Skip to content

Commit

Permalink
feat: support manifest annotations
Browse files Browse the repository at this point in the history
Signed-off-by: Yiyang Huang <huangyiyang499@gmail.com>
  • Loading branch information
Yiyang Huang committed Jun 4, 2023
1 parent 54049ff commit 54aba94
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 12 deletions.
12 changes: 7 additions & 5 deletions pkg/adapter/annotation/annotation.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ const (
// and converted image in harbor.
// Example value: `sha256:2d64e20e048640ecb619b82a26c168b7649a173d4ad6cf2af3feda9b64fe6fb8`.
AnnotationAccelerationSourceDigest = "io.goharbor.artifact.v1alpha1.acceleration.source.digest"
// AnnotationNydusFlag is used to indicate a image which is nydus format.
AnnotationNydusFlag = "containerd.io/snapshot/nydus"
)

func annotate(annotations map[string]string, appended Appended) map[string]string {
Expand All @@ -56,6 +58,7 @@ func annotate(annotations map[string]string, appended Appended) map[string]strin
annotations[AnnotationAccelerationDriverVersion] = appended.DriverVersion
}
annotations[AnnotationAccelerationSourceDigest] = appended.SourceDigest
annotations[AnnotationNydusFlag] = "true"

return annotations
}
Expand All @@ -65,7 +68,8 @@ func Append(ctx context.Context, provider providerContent.Provider, desc *ocispe
var err error

switch desc.MediaType {
case ocispec.MediaTypeImageManifest:
// Refer: https://github.com/goharbor/harbor/blob/main/src/controller/artifact/abstractor.go#L75
case ocispec.MediaTypeImageManifest, images.MediaTypeDockerSchema2Manifest:
var manifest ocispec.Manifest
labels, err = utils.ReadJSON(ctx, provider.ContentStore(), &manifest, *desc)
if err != nil {
Expand All @@ -80,7 +84,8 @@ func Append(ctx context.Context, provider providerContent.Provider, desc *ocispe

return desc, nil

case ocispec.MediaTypeImageIndex:
// Refer: https://github.com/goharbor/harbor/blob/main/src/controller/artifact/abstractor.go#L79
case ocispec.MediaTypeImageIndex, images.MediaTypeDockerSchema2ManifestList:
var index ocispec.Index
labels, err = utils.ReadJSON(ctx, provider.ContentStore(), &index, *desc)
if err != nil {
Expand All @@ -94,9 +99,6 @@ func Append(ctx context.Context, provider providerContent.Provider, desc *ocispe
}

return desc, nil

case images.MediaTypeDockerSchema2Manifest, images.MediaTypeDockerSchema2ManifestList:
return nil, fmt.Errorf("docker manifest not support to append annotation")
}

return nil, fmt.Errorf("invalid mediatype %s", desc.MediaType)
Expand Down
26 changes: 19 additions & 7 deletions pkg/driver/nydus/nydus.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,22 @@ import (
"os"
"strconv"

"github.com/goharbor/acceleration-service/pkg/adapter/annotation"
accelcontent "github.com/goharbor/acceleration-service/pkg/content"
"github.com/goharbor/acceleration-service/pkg/driver/nydus/parser"
nydusutils "github.com/goharbor/acceleration-service/pkg/driver/nydus/utils"
"github.com/goharbor/acceleration-service/pkg/errdefs"
"github.com/goharbor/acceleration-service/pkg/utils"

"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images/converter"
"github.com/containerd/containerd/platforms"
"github.com/containerd/nydus-snapshotter/pkg/backend"
nydusify "github.com/containerd/nydus-snapshotter/pkg/converter"
"github.com/goharbor/acceleration-service/pkg/driver/nydus/parser"
"github.com/goharbor/acceleration-service/pkg/errdefs"
"github.com/opencontainers/image-spec/specs-go"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"

accelcontent "github.com/goharbor/acceleration-service/pkg/content"
nydusutils "github.com/goharbor/acceleration-service/pkg/driver/nydus/utils"
"github.com/goharbor/acceleration-service/pkg/utils"
)

type chunkDictInfo struct {
Expand Down Expand Up @@ -178,7 +179,18 @@ func (d *Driver) Convert(ctx context.Context, provider accelcontent.Provider, so
return nil, err
}
if d.mergeManifest {
return d.makeManifestIndex(ctx, provider.ContentStore(), *image, *desc)
desc, err = d.makeManifestIndex(ctx, provider.ContentStore(), *image, *desc)
if err != nil {
return nil, err
}
}
desc, err = annotation.Append(ctx, provider, desc, annotation.Appended{
DriverName: d.Name(),
DriverVersion: d.Version(),
SourceDigest: image.Digest.String(),
})
if err != nil {
return nil, err
}
return desc, err
}
Expand Down

0 comments on commit 54aba94

Please sign in to comment.