Skip to content

Commit 24952b4

Browse files
committed
fix: show data from docker mediatypes in search results
Signed-off-by: Andrei Aaron <[email protected]>
1 parent e8bf6e5 commit 24952b4

File tree

3 files changed

+83
-53
lines changed

3 files changed

+83
-53
lines changed

pkg/meta/boltdb/boltdb.go

+29-19
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
zerr "zotregistry.dev/zot/errors"
1818
"zotregistry.dev/zot/pkg/api/constants"
1919
zcommon "zotregistry.dev/zot/pkg/common"
20+
"zotregistry.dev/zot/pkg/compat"
2021
"zotregistry.dev/zot/pkg/log"
2122
"zotregistry.dev/zot/pkg/meta/common"
2223
mConvert "zotregistry.dev/zot/pkg/meta/convert"
@@ -142,13 +143,13 @@ func (bdw *BoltDB) SetImageMeta(digest godigest.Digest, imageMeta mTypes.ImageMe
142143

143144
protoImageMeta := &proto_go.ImageMeta{}
144145

145-
switch imageMeta.MediaType {
146-
case ispec.MediaTypeImageManifest:
146+
if imageMeta.MediaType == ispec.MediaTypeImageManifest ||
147+
compat.IsCompatibleManifestMediaType(imageMeta.MediaType) {
147148
manifest := imageMeta.Manifests[0]
148-
149149
protoImageMeta = mConvert.GetProtoImageManifestData(manifest.Manifest, manifest.Config,
150150
manifest.Size, manifest.Digest.String())
151-
case ispec.MediaTypeImageIndex:
151+
} else if imageMeta.MediaType == ispec.MediaTypeImageIndex ||
152+
compat.IsCompatibleManifestListMediaType(imageMeta.MediaType) {
152153
protoImageMeta = mConvert.GetProtoImageIndexMeta(*imageMeta.Index, imageMeta.Size, imageMeta.Digest.String())
153154
}
154155

@@ -399,7 +400,8 @@ func (bdw *BoltDB) FilterImageMeta(ctx context.Context, digests []string,
399400
return err
400401
}
401402

402-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
403+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
404+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
403405
_, manifestDataList, err := getAllContainedMeta(imageBuck, protoImageMeta)
404406
if err != nil {
405407
return err
@@ -487,7 +489,10 @@ func getAllContainedMeta(imageBuck *bbolt.Bucket, imageIndexData *proto_go.Image
487489
imageMetaList := make([]*proto_go.ImageMeta, 0, len(imageIndexData.Index.Index.Manifests))
488490

489491
for _, manifest := range imageIndexData.Index.Index.Manifests {
490-
if manifest.MediaType != ispec.MediaTypeImageManifest && manifest.MediaType != ispec.MediaTypeImageIndex {
492+
if manifest.MediaType != ispec.MediaTypeImageManifest &&
493+
manifest.MediaType != ispec.MediaTypeImageIndex &&
494+
!compat.IsCompatibleManifestMediaType(manifest.MediaType) &&
495+
!compat.IsCompatibleManifestListMediaType(manifest.MediaType) {
491496
// filter out unexpected media types from the manifest lists,
492497
// this could be the case of buildkit cache entries for example
493498
continue
@@ -498,11 +503,12 @@ func getAllContainedMeta(imageBuck *bbolt.Bucket, imageIndexData *proto_go.Image
498503
return imageMetaList, manifestDataList, err
499504
}
500505

501-
switch imageManifestData.MediaType {
502-
case ispec.MediaTypeImageManifest:
506+
if imageManifestData.MediaType == ispec.MediaTypeImageManifest ||
507+
compat.IsCompatibleManifestMediaType(imageManifestData.MediaType) {
503508
imageMetaList = append(imageMetaList, imageManifestData)
504509
manifestDataList = append(manifestDataList, imageManifestData.Manifests[0])
505-
case ispec.MediaTypeImageIndex:
510+
} else if imageManifestData.MediaType == ispec.MediaTypeImageIndex ||
511+
compat.IsCompatibleManifestListMediaType(imageManifestData.MediaType) {
506512
partialImageDataList, partialManifestDataList, err := getAllContainedMeta(imageBuck, imageManifestData)
507513
if err != nil {
508514
return imageMetaList, manifestDataList, err
@@ -561,8 +567,8 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
561567

562568
var protoImageMeta *proto_go.ImageMeta
563569

564-
switch descriptor.MediaType {
565-
case ispec.MediaTypeImageManifest:
570+
if descriptor.MediaType == ispec.MediaTypeImageManifest || //nolint:gocritic
571+
compat.IsCompatibleManifestMediaType(descriptor.MediaType) {
566572
manifestDigest := descriptor.Digest
567573

568574
imageManifestData, err := getProtoImageMeta(imageBuck, manifestDigest)
@@ -572,7 +578,8 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
572578
}
573579

574580
protoImageMeta = imageManifestData
575-
case ispec.MediaTypeImageIndex:
581+
} else if descriptor.MediaType == ispec.MediaTypeImageIndex ||
582+
compat.IsCompatibleManifestListMediaType(descriptor.MediaType) {
576583
indexDigest := descriptor.Digest
577584

578585
imageIndexData, err := getProtoImageMeta(imageBuck, indexDigest)
@@ -589,7 +596,7 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
589596
imageIndexData.Manifests = manifestDataList
590597

591598
protoImageMeta = imageIndexData
592-
default:
599+
} else {
593600
bdw.Log.Error().Str("mediaType", descriptor.MediaType).Msg("unsupported media type")
594601

595602
continue
@@ -643,8 +650,8 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
643650
continue
644651
}
645652

646-
switch descriptor.MediaType {
647-
case ispec.MediaTypeImageManifest:
653+
if descriptor.MediaType == ispec.MediaTypeImageManifest || //nolint:gocritic
654+
compat.IsCompatibleManifestMediaType(descriptor.MediaType) {
648655
manifestDigest := descriptor.Digest
649656

650657
imageManifestData, err := getProtoImageMeta(imageMetaBuck, manifestDigest)
@@ -659,7 +666,8 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
659666
if filterFunc(repoMeta, imageMeta) {
660667
images = append(images, mConvert.GetFullImageMetaFromProto(tag, protoRepoMeta, imageManifestData))
661668
}
662-
case ispec.MediaTypeImageIndex:
669+
} else if descriptor.MediaType == ispec.MediaTypeImageIndex ||
670+
compat.IsCompatibleManifestListMediaType(descriptor.MediaType) {
663671
indexDigest := descriptor.Digest
664672

665673
protoImageIndexMeta, err := getProtoImageMeta(imageMetaBuck, indexDigest)
@@ -693,7 +701,7 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
693701

694702
images = append(images, mConvert.GetFullImageMetaFromProto(tag, protoRepoMeta, protoImageIndexMeta))
695703
}
696-
default:
704+
} else {
697705
bdw.Log.Error().Str("mediaType", descriptor.MediaType).Msg("unsupported media type")
698706

699707
continue
@@ -818,7 +826,8 @@ func (bdw *BoltDB) GetFullImageMeta(ctx context.Context, repo string, tag string
818826
return err
819827
}
820828

821-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
829+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
830+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
822831
_, manifestDataList, err := getAllContainedMeta(imageBuck, protoImageMeta)
823832
if err != nil {
824833
return err
@@ -844,7 +853,8 @@ func (bdw *BoltDB) GetImageMeta(digest godigest.Digest) (mTypes.ImageMeta, error
844853
return err
845854
}
846855

847-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
856+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
857+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
848858
_, manifestDataList, err := getAllContainedMeta(imageBuck, protoImageMeta)
849859
if err != nil {
850860
return err

pkg/meta/dynamodb/dynamodb.go

+25-15
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
zerr "zotregistry.dev/zot/errors"
2020
"zotregistry.dev/zot/pkg/api/constants"
2121
zcommon "zotregistry.dev/zot/pkg/common"
22+
"zotregistry.dev/zot/pkg/compat"
2223
"zotregistry.dev/zot/pkg/log"
2324
"zotregistry.dev/zot/pkg/meta/common"
2425
mConvert "zotregistry.dev/zot/pkg/meta/convert"
@@ -231,7 +232,10 @@ func (dwr *DynamoDB) getAllContainedMeta(ctx context.Context, imageIndexData *pr
231232
manifestDigests := make([]string, 0, len(imageIndexData.Index.Index.Manifests))
232233

233234
for _, manifest := range imageIndexData.Index.Index.Manifests {
234-
if manifest.MediaType != ispec.MediaTypeImageManifest && manifest.MediaType != ispec.MediaTypeImageIndex {
235+
if manifest.MediaType != ispec.MediaTypeImageManifest &&
236+
manifest.MediaType != ispec.MediaTypeImageIndex &&
237+
!compat.IsCompatibleManifestMediaType(manifest.MediaType) &&
238+
!compat.IsCompatibleManifestListMediaType(manifest.MediaType) {
235239
// filter out unexpected media types from the manifest lists,
236240
// this could be the case of buildkit cache entries for example
237241
continue
@@ -251,11 +255,12 @@ func (dwr *DynamoDB) getAllContainedMeta(ctx context.Context, imageIndexData *pr
251255
return imageMetaList, manifestDataList, err
252256
}
253257

254-
switch imageManifestData.MediaType {
255-
case ispec.MediaTypeImageManifest:
258+
if imageManifestData.MediaType == ispec.MediaTypeImageManifest ||
259+
compat.IsCompatibleManifestMediaType(imageManifestData.MediaType) {
256260
imageMetaList = append(imageMetaList, imageManifestData)
257261
manifestDataList = append(manifestDataList, imageManifestData.Manifests[0])
258-
case ispec.MediaTypeImageIndex:
262+
} else if imageManifestData.MediaType == ispec.MediaTypeImageIndex ||
263+
compat.IsCompatibleManifestListMediaType(imageManifestData.MediaType) {
259264
partialImageDataList, partialManifestDataList, err := dwr.getAllContainedMeta(ctx, imageManifestData)
260265
if err != nil {
261266
return imageMetaList, manifestDataList, err
@@ -665,8 +670,8 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType
665670

666671
var protoImageMeta *proto_go.ImageMeta
667672

668-
switch descriptor.MediaType {
669-
case ispec.MediaTypeImageManifest:
673+
if descriptor.MediaType == ispec.MediaTypeImageManifest || //nolint:gocritic
674+
compat.IsCompatibleManifestMediaType(descriptor.MediaType) {
670675
manifestDigest := descriptor.Digest
671676

672677
imageManifestData, err := dwr.GetProtoImageMeta(ctx, godigest.Digest(manifestDigest))
@@ -676,7 +681,8 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType
676681
}
677682

678683
protoImageMeta = imageManifestData
679-
case ispec.MediaTypeImageIndex:
684+
} else if descriptor.MediaType == ispec.MediaTypeImageIndex ||
685+
compat.IsCompatibleManifestListMediaType(descriptor.MediaType) {
680686
indexDigest := godigest.Digest(descriptor.Digest)
681687

682688
imageIndexData, err := dwr.GetProtoImageMeta(ctx, indexDigest)
@@ -693,7 +699,7 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType
693699
imageIndexData.Manifests = manifestDataList
694700

695701
protoImageMeta = imageIndexData
696-
default:
702+
} else {
697703
dwr.Log.Error().Str("mediaType", descriptor.MediaType).Msg("unsupported media type")
698704

699705
continue
@@ -747,8 +753,8 @@ func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.Filter
747753
continue
748754
}
749755

750-
switch descriptor.MediaType {
751-
case ispec.MediaTypeImageManifest:
756+
if descriptor.MediaType == ispec.MediaTypeImageManifest || //nolint:gocritic
757+
compat.IsCompatibleManifestMediaType(descriptor.MediaType) {
752758
manifestDigest := descriptor.Digest
753759

754760
imageManifestData, err := dwr.GetProtoImageMeta(ctx, godigest.Digest(manifestDigest))
@@ -763,7 +769,8 @@ func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.Filter
763769
if filterFunc(repoMeta, imageMeta) {
764770
images = append(images, mConvert.GetFullImageMetaFromProto(tag, protoRepoMeta, imageManifestData))
765771
}
766-
case ispec.MediaTypeImageIndex:
772+
} else if descriptor.MediaType == ispec.MediaTypeImageIndex ||
773+
compat.IsCompatibleManifestListMediaType(descriptor.MediaType) {
767774
indexDigest := descriptor.Digest
768775

769776
protoImageIndexMeta, err := dwr.GetProtoImageMeta(ctx, godigest.Digest(indexDigest))
@@ -797,7 +804,7 @@ func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.Filter
797804

798805
images = append(images, mConvert.GetFullImageMetaFromProto(tag, protoRepoMeta, protoImageIndexMeta))
799806
}
800-
default:
807+
} else {
801808
dwr.Log.Error().Str("mediaType", descriptor.MediaType).Msg("unsupported media type")
802809

803810
continue
@@ -902,7 +909,8 @@ func (dwr *DynamoDB) GetFullImageMeta(ctx context.Context, repo string, tag stri
902909
return mTypes.FullImageMeta{}, err
903910
}
904911

905-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
912+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
913+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
906914
_, manifestDataList, err := dwr.getAllContainedMeta(ctx, protoImageMeta)
907915
if err != nil {
908916
return mTypes.FullImageMeta{}, err
@@ -929,7 +937,8 @@ func (dwr *DynamoDB) GetImageMeta(digest godigest.Digest) (mTypes.ImageMeta, err
929937
return mTypes.ImageMeta{}, err
930938
}
931939

932-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
940+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
941+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
933942
_, manifestDataList, err := dwr.getAllContainedMeta(context.Background(), protoImageMeta)
934943
if err != nil {
935944
return mTypes.ImageMeta{}, err
@@ -1350,7 +1359,8 @@ func (dwr *DynamoDB) FilterImageMeta(ctx context.Context, digests []string,
13501359
return nil, err
13511360
}
13521361

1353-
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex {
1362+
if protoImageMeta.MediaType == ispec.MediaTypeImageIndex ||
1363+
compat.IsCompatibleManifestListMediaType(protoImageMeta.MediaType) {
13541364
_, manifestDataList, err := dwr.getAllContainedMeta(context.Background(), protoImageMeta)
13551365
if err != nil {
13561366
return nil, err

0 commit comments

Comments
 (0)