MCPcopy Create free account
hub / github.com/chainloop-dev/chainloop / Save

Method Save

app/controlplane/pkg/data/referrer.go:58–123  ·  view source on GitHub ↗
(ctx context.Context, referrers []*biz.Referrer, workflowID uuid.UUID)

Source from the content-addressed store, hash-verified

56type storedReferrerMap map[string]uuid.UUID
57
58func (r *ReferrerRepo) Save(ctx context.Context, referrers []*biz.Referrer, workflowID uuid.UUID) (err error) {
59 ctx, span := otelx.Start(ctx, referrerRepoTracer, "ReferrerRepo.Save")
60 defer span.End()
61
62 // find the workflow
63 wf, err := r.workflowRepo.FindByID(ctx, workflowID)
64 if err != nil {
65 return fmt.Errorf("failed to find workflow: %w", err)
66 } else if wf == nil {
67 return biz.NewErrNotFound("workflow")
68 }
69
70 storedMap := make(storedReferrerMap)
71
72 for _, ref := range referrers {
73 // Check if it exists already, if not create it
74 storedID, err := r.data.DB.Referrer.Create().
75 SetDigest(ref.Digest).SetKind(ref.Kind).SetDownloadable(ref.Downloadable).
76 SetMetadata(ref.Metadata).SetAnnotations(ref.Annotations).
77 AddWorkflowIDs(workflowID).
78 OnConflictColumns(
79 referrer.FieldDigest, referrer.FieldKind,
80 ).UpdateNewValues().ID(ctx)
81 if err != nil {
82 return fmt.Errorf("failed to create referrer: %w", err)
83 }
84
85 storedRef, err := r.data.DB.Referrer.Query().Select(referrer.FieldID).Where(referrer.ID(storedID)).First(ctx)
86 if err != nil {
87 return fmt.Errorf("failed to load referrer: %w", err)
88 } else if storedRef == nil {
89 return fmt.Errorf("failed to load referrer: %w", err)
90 }
91
92 // Store it in the map
93 storedMap[ref.MapID()] = storedRef.ID
94 }
95
96 // 2 - define the relationship between referrers
97 for _, parentRef := range referrers {
98 // This is the current item stored in DB
99 storedReferrer := storedMap[parentRef.MapID()]
100 // Iterate on the items it refer to (references)
101 var references []uuid.UUID
102 for _, ref := range parentRef.References {
103 // amd find it in the DB
104 storedReference, ok := storedMap[ref.MapID()]
105 if !ok {
106 return fmt.Errorf("referrer %v not found", ref)
107 }
108
109 references = append(references, storedReference)
110 }
111
112 if len(references) == 0 {
113 continue
114 }
115

Callers

nothing calls this directly

Implementers 1

ReferrerRepoapp/controlplane/pkg/data/referrer.go

Calls 15

StartFunction · 0.92
NewErrNotFoundFunction · 0.92
IDFunction · 0.92
MapIDMethod · 0.80
FindByIDMethod · 0.65
IDMethod · 0.65
CreateMethod · 0.65
ExecMethod · 0.65
UpdateNewValuesMethod · 0.45
OnConflictColumnsMethod · 0.45
AddWorkflowIDsMethod · 0.45
SetAnnotationsMethod · 0.45

Tested by

no test coverage detected