diff --git a/contrib/diffservice/service.go b/contrib/diffservice/service.go index c8e25a371..fc5092670 100644 --- a/contrib/diffservice/service.go +++ b/contrib/diffservice/service.go @@ -20,12 +20,11 @@ import ( "context" diffapi "github.com/containerd/containerd/api/services/diff/v1" - "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/diff" "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/mount" + "github.com/containerd/containerd/oci" "github.com/containerd/typeurl/v2" - "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -49,7 +48,7 @@ func (s *service) Apply(ctx context.Context, er *diffapi.ApplyRequest) (*diffapi var ( ocidesc ocispec.Descriptor err error - desc = toDescriptor(er.Diff) + desc = oci.DescriptorFromProto(er.Diff) mounts = mount.FromProto(er.Mounts) ) @@ -68,7 +67,7 @@ func (s *service) Apply(ctx context.Context, er *diffapi.ApplyRequest) (*diffapi } return &diffapi.ApplyResponse{ - Applied: fromDescriptor(ocidesc), + Applied: oci.DescriptorToProto(ocidesc), }, nil } @@ -104,24 +103,6 @@ func (s *service) Diff(ctx context.Context, dr *diffapi.DiffRequest) (*diffapi.D } return &diffapi.DiffResponse{ - Diff: fromDescriptor(ocidesc), + Diff: oci.DescriptorToProto(ocidesc), }, nil } - -func toDescriptor(d *types.Descriptor) ocispec.Descriptor { - return ocispec.Descriptor{ - MediaType: d.MediaType, - Digest: digest.Digest(d.Digest), - Size: d.Size, - Annotations: d.Annotations, - } -} - -func fromDescriptor(d ocispec.Descriptor) *types.Descriptor { - return &types.Descriptor{ - MediaType: d.MediaType, - Digest: d.Digest.String(), - Size: d.Size, - Annotations: d.Annotations, - } -} diff --git a/diff/proxy/differ.go b/diff/proxy/differ.go index 67b0efc66..4e61bfdee 100644 --- a/diff/proxy/differ.go +++ b/diff/proxy/differ.go @@ -20,14 +20,13 @@ import ( "context" diffapi "github.com/containerd/containerd/api/services/diff/v1" - "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/diff" "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/mount" + "github.com/containerd/containerd/oci" "github.com/containerd/containerd/pkg/epoch" "github.com/containerd/containerd/protobuf" ptypes "github.com/containerd/containerd/protobuf/types" - "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "google.golang.org/protobuf/types/known/timestamppb" @@ -59,7 +58,7 @@ func (r *diffRemote) Apply(ctx context.Context, desc ocispec.Descriptor, mounts } req := &diffapi.ApplyRequest{ - Diff: fromDescriptor(desc), + Diff: oci.DescriptorToProto(desc), Mounts: mount.ToProto(mounts), Payloads: payloads, } @@ -67,7 +66,7 @@ func (r *diffRemote) Apply(ctx context.Context, desc ocispec.Descriptor, mounts if err != nil { return ocispec.Descriptor{}, errdefs.FromGRPC(err) } - return toDescriptor(resp.Applied), nil + return oci.DescriptorFromProto(resp.Applied), nil } func (r *diffRemote) Compare(ctx context.Context, a, b []mount.Mount, opts ...diff.Opt) (ocispec.Descriptor, error) { @@ -96,26 +95,5 @@ func (r *diffRemote) Compare(ctx context.Context, a, b []mount.Mount, opts ...di if err != nil { return ocispec.Descriptor{}, errdefs.FromGRPC(err) } - return toDescriptor(resp.Diff), nil -} - -func toDescriptor(d *types.Descriptor) ocispec.Descriptor { - if d == nil { - return ocispec.Descriptor{} - } - return ocispec.Descriptor{ - MediaType: d.MediaType, - Digest: digest.Digest(d.Digest), - Size: d.Size, - Annotations: d.Annotations, - } -} - -func fromDescriptor(d ocispec.Descriptor) *types.Descriptor { - return &types.Descriptor{ - MediaType: d.MediaType, - Digest: d.Digest.String(), - Size: d.Size, - Annotations: d.Annotations, - } + return oci.DescriptorFromProto(resp.Diff), nil } diff --git a/oci/spec.go b/oci/spec.go index bee3b44d6..23961b75d 100644 --- a/oci/spec.go +++ b/oci/spec.go @@ -21,8 +21,11 @@ import ( "path/filepath" "runtime" + "github.com/opencontainers/go-digest" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/opencontainers/runtime-spec/specs-go" + "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/containers" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/platforms" @@ -220,3 +223,25 @@ func populateDefaultDarwinSpec(s *Spec) error { } return nil } + +// DescriptorFromProto converts containerds protobuf [types.Descriptor] +// to the OCI image specs [ocispec.Descriptor]. +func DescriptorFromProto(d *types.Descriptor) ocispec.Descriptor { + return ocispec.Descriptor{ + MediaType: d.MediaType, + Digest: digest.Digest(d.Digest), + Size: d.Size, + Annotations: d.Annotations, + } +} + +// DescriptorToProto converts the OCI image specs [ocispec.Descriptor] +// to containerds protobuf [types.Descriptor]. +func DescriptorToProto(d ocispec.Descriptor) *types.Descriptor { + return &types.Descriptor{ + MediaType: d.MediaType, + Digest: d.Digest.String(), + Size: d.Size, + Annotations: d.Annotations, + } +} diff --git a/services/diff/local.go b/services/diff/local.go index 20c5468fb..5f7d3f2b3 100644 --- a/services/diff/local.go +++ b/services/diff/local.go @@ -21,14 +21,13 @@ import ( "fmt" diffapi "github.com/containerd/containerd/api/services/diff/v1" - "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/diff" "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/mount" + "github.com/containerd/containerd/oci" "github.com/containerd/containerd/plugin" "github.com/containerd/containerd/services" "github.com/containerd/typeurl/v2" - "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "google.golang.org/grpc" ) @@ -97,7 +96,7 @@ func (l *local) Apply(ctx context.Context, er *diffapi.ApplyRequest, _ ...grpc.C var ( ocidesc ocispec.Descriptor err error - desc = toDescriptor(er.Diff) + desc = oci.DescriptorFromProto(er.Diff) mounts = mount.FromProto(er.Mounts) ) @@ -122,7 +121,7 @@ func (l *local) Apply(ctx context.Context, er *diffapi.ApplyRequest, _ ...grpc.C } return &diffapi.ApplyResponse{ - Applied: fromDescriptor(ocidesc), + Applied: oci.DescriptorToProto(ocidesc), }, nil } @@ -161,24 +160,6 @@ func (l *local) Diff(ctx context.Context, dr *diffapi.DiffRequest, _ ...grpc.Cal } return &diffapi.DiffResponse{ - Diff: fromDescriptor(ocidesc), + Diff: oci.DescriptorToProto(ocidesc), }, nil } - -func toDescriptor(d *types.Descriptor) ocispec.Descriptor { - return ocispec.Descriptor{ - MediaType: d.MediaType, - Digest: digest.Digest(d.Digest), - Size: d.Size, - Annotations: d.Annotations, - } -} - -func fromDescriptor(d ocispec.Descriptor) *types.Descriptor { - return &types.Descriptor{ - MediaType: d.MediaType, - Digest: d.Digest.String(), - Size: d.Size, - Annotations: d.Annotations, - } -}