From 9ff050e9a31ac428f24e7e92e32a7d0402c93381 Mon Sep 17 00:00:00 2001 From: Brandyn Bayes Date: Wed, 22 Jan 2025 14:30:00 -0800 Subject: [PATCH 1/2] Add docker media types in OCI formats Signed-off-by: Brandyn Bayes --- oci/layout/fixtures/name_lookups/index.json | 24 +++++++++++--- oci/layout/oci_transport.go | 3 +- oci/layout/oci_transport_test.go | 35 ++++++++++++++++++++- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/oci/layout/fixtures/name_lookups/index.json b/oci/layout/fixtures/name_lookups/index.json index b79d108980..008da06460 100644 --- a/oci/layout/fixtures/name_lookups/index.json +++ b/oci/layout/fixtures/name_lookups/index.json @@ -3,7 +3,7 @@ "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { - "mediaType": "application/vnd.oci.image.manifest.v1+json", + "mediaType": "application/vnd.oci.image.index.v1+json", "digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "size": 1, "annotations": { @@ -19,17 +19,33 @@ } }, { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "digest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 3, "annotations": { - "org.opencontainers.image.ref.name": "invalid-mime" + "org.opencontainers.image.ref.name": "c" } }, { - "mediaType": "x-completely-unknown", + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", "size": 4, + "annotations": { + "org.opencontainers.image.ref.name": "d" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "size": 5, + "annotations": { + "org.opencontainers.image.ref.name": "e" + } + }, + { + "mediaType": "x-completely-unknown", + "digest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "size": 6, "annotations": { "org.opencontainers.image.ref.name": "invalid-mime" } diff --git a/oci/layout/oci_transport.go b/oci/layout/oci_transport.go index 6ab3846763..782e929c2c 100644 --- a/oci/layout/oci_transport.go +++ b/oci/layout/oci_transport.go @@ -12,6 +12,7 @@ import ( "github.com/containers/image/v5/directory/explicitfilepath" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/image" + "github.com/containers/image/v5/internal/manifest" "github.com/containers/image/v5/oci/internal" "github.com/containers/image/v5/transports" "github.com/containers/image/v5/types" @@ -234,7 +235,7 @@ func (ref ociReference) getManifestDescriptor() (imgspecv1.Descriptor, int, erro var unsupportedMIMETypes []string for i, md := range index.Manifests { if refName, ok := md.Annotations[imgspecv1.AnnotationRefName]; ok && refName == ref.image { - if md.MediaType == imgspecv1.MediaTypeImageManifest || md.MediaType == imgspecv1.MediaTypeImageIndex { + if md.MediaType == imgspecv1.MediaTypeImageManifest || md.MediaType == imgspecv1.MediaTypeImageIndex || md.MediaType == manifest.DockerV2Schema1MediaType || md.MediaType == manifest.DockerV2Schema2MediaType || md.MediaType == manifest.DockerV2ListMediaType { return md, i, nil } unsupportedMIMETypes = append(unsupportedMIMETypes, md.MediaType) diff --git a/oci/layout/oci_transport_test.go b/oci/layout/oci_transport_test.go index 5c608737ab..5e6c9fa85f 100644 --- a/oci/layout/oci_transport_test.go +++ b/oci/layout/oci_transport_test.go @@ -53,7 +53,7 @@ func TestGetManifestDescriptor(t *testing.T) { dir: "fixtures/name_lookups", image: "a", expectedDescriptor: &imgspecv1.Descriptor{ - MediaType: "application/vnd.oci.image.manifest.v1+json", + MediaType: "application/vnd.oci.image.index.v1+json", Digest: "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", Size: 1, Annotations: map[string]string{"org.opencontainers.image.ref.name": "a"}, @@ -71,6 +71,39 @@ func TestGetManifestDescriptor(t *testing.T) { }, expectedIndex: 1, }, + { // A valid reference in a multi-manifest directory + dir: "fixtures/name_lookups", + image: "c", + expectedDescriptor: &imgspecv1.Descriptor{ + MediaType: "application/vnd.docker.distribution.manifest.list.v2+json", + Digest: "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", + Size: 3, + Annotations: map[string]string{"org.opencontainers.image.ref.name": "c"}, + }, + expectedIndex: 2, + }, + { // A valid reference in a multi-manifest directory + dir: "fixtures/name_lookups", + image: "d", + expectedDescriptor: &imgspecv1.Descriptor{ + MediaType: "application/vnd.docker.distribution.manifest.v2+json", + Digest: "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", + Size: 4, + Annotations: map[string]string{"org.opencontainers.image.ref.name": "d"}, + }, + expectedIndex: 3, + }, + { // A valid reference in a multi-manifest directory + dir: "fixtures/name_lookups", + image: "e", + expectedDescriptor: &imgspecv1.Descriptor{ + MediaType: "application/vnd.docker.distribution.manifest.v2+json", + Digest: "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + Size: 5, + Annotations: map[string]string{"org.opencontainers.image.ref.name": "e"}, + }, + expectedIndex: 4, + }, { // No entry found dir: "fixtures/name_lookups", image: "this-does-not-exist", From 88b8e490ecb0c8702981a459fa602a9c0b316279 Mon Sep 17 00:00:00 2001 From: Brandyn Bayes Date: Thu, 23 Jan 2025 10:13:52 -0800 Subject: [PATCH 2/2] Update oci reader tests Signed-off-by: Brandyn Bayes --- oci/layout/reader_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/oci/layout/reader_test.go b/oci/layout/reader_test.go index d59c281bd8..ec0784f15e 100644 --- a/oci/layout/reader_test.go +++ b/oci/layout/reader_test.go @@ -35,14 +35,16 @@ func TestList(t *testing.T) { }, { path: "fixtures/name_lookups", - num: 4, + num: 6, digests: []string{ "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", + "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", }, - names: map[int]string{0: "a", 1: "b", 2: "invalid-mime", 3: "invalid-mime"}, + names: map[int]string{0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "invalid-mime"}, }, } { results, err := List(test.path)