in internal/api/orassdk.go [60:109]
func (o *ORASClient) Annotate(ctx context.Context, reference string, artifactType string, annotationsArg map[string]string) error {
dst, err := o.getTarget(reference)
if err != nil {
return err
}
// do the equivalent of
// prepare manifest
store, err := file.New("")
if err != nil {
return err
}
defer store.Close()
subject, err := dst.Resolve(ctx, reference)
if err != nil {
return err
}
graphCopyOptions := oras.DefaultCopyGraphOptions
packOpts := oras.PackManifestOptions{
Subject: &subject,
ManifestAnnotations: annotationsArg,
}
pack := func() (ocispec.Descriptor, error) {
return oras.PackManifest(ctx, store, oras.PackManifestVersion1_1, artifactType, packOpts)
}
copyFunc := func(root ocispec.Descriptor) error {
return oras.CopyGraph(ctx, store, dst, root, graphCopyOptions)
}
// Attach
targetDst := oras.Target(dst)
if tracked, ok := targetDst.(GraphTarget); ok {
defer tracked.Close()
}
// Push
root, err := pack()
if err != nil {
return err
}
if err = copyFunc(root); err != nil {
return err
}
return nil
}