@@ -17,6 +17,7 @@ import (
17
17
zerr "zotregistry.dev/zot/errors"
18
18
"zotregistry.dev/zot/pkg/api/constants"
19
19
zcommon "zotregistry.dev/zot/pkg/common"
20
+ "zotregistry.dev/zot/pkg/compat"
20
21
"zotregistry.dev/zot/pkg/log"
21
22
"zotregistry.dev/zot/pkg/meta/common"
22
23
mConvert "zotregistry.dev/zot/pkg/meta/convert"
@@ -142,13 +143,13 @@ func (bdw *BoltDB) SetImageMeta(digest godigest.Digest, imageMeta mTypes.ImageMe
142
143
143
144
protoImageMeta := & proto_go.ImageMeta {}
144
145
145
- switch imageMeta .MediaType {
146
- case ispec . MediaTypeImageManifest :
146
+ if imageMeta .MediaType == ispec . MediaTypeImageManifest ||
147
+ compat . IsCompatibleManifestMediaType ( imageMeta . MediaType ) {
147
148
manifest := imageMeta .Manifests [0 ]
148
-
149
149
protoImageMeta = mConvert .GetProtoImageManifestData (manifest .Manifest , manifest .Config ,
150
150
manifest .Size , manifest .Digest .String ())
151
- case ispec .MediaTypeImageIndex :
151
+ } else if imageMeta .MediaType == ispec .MediaTypeImageIndex ||
152
+ compat .IsCompatibleManifestListMediaType (imageMeta .MediaType ) {
152
153
protoImageMeta = mConvert .GetProtoImageIndexMeta (* imageMeta .Index , imageMeta .Size , imageMeta .Digest .String ())
153
154
}
154
155
@@ -399,7 +400,8 @@ func (bdw *BoltDB) FilterImageMeta(ctx context.Context, digests []string,
399
400
return err
400
401
}
401
402
402
- if protoImageMeta .MediaType == ispec .MediaTypeImageIndex {
403
+ if protoImageMeta .MediaType == ispec .MediaTypeImageIndex ||
404
+ compat .IsCompatibleManifestListMediaType (protoImageMeta .MediaType ) {
403
405
_ , manifestDataList , err := getAllContainedMeta (imageBuck , protoImageMeta )
404
406
if err != nil {
405
407
return err
@@ -487,7 +489,10 @@ func getAllContainedMeta(imageBuck *bbolt.Bucket, imageIndexData *proto_go.Image
487
489
imageMetaList := make ([]* proto_go.ImageMeta , 0 , len (imageIndexData .Index .Index .Manifests ))
488
490
489
491
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 ) {
491
496
// filter out unexpected media types from the manifest lists,
492
497
// this could be the case of buildkit cache entries for example
493
498
continue
@@ -498,11 +503,12 @@ func getAllContainedMeta(imageBuck *bbolt.Bucket, imageIndexData *proto_go.Image
498
503
return imageMetaList , manifestDataList , err
499
504
}
500
505
501
- switch imageManifestData .MediaType {
502
- case ispec . MediaTypeImageManifest :
506
+ if imageManifestData .MediaType == ispec . MediaTypeImageManifest ||
507
+ compat . IsCompatibleManifestMediaType ( imageManifestData . MediaType ) {
503
508
imageMetaList = append (imageMetaList , imageManifestData )
504
509
manifestDataList = append (manifestDataList , imageManifestData .Manifests [0 ])
505
- case ispec .MediaTypeImageIndex :
510
+ } else if imageManifestData .MediaType == ispec .MediaTypeImageIndex ||
511
+ compat .IsCompatibleManifestListMediaType (imageManifestData .MediaType ) {
506
512
partialImageDataList , partialManifestDataList , err := getAllContainedMeta (imageBuck , imageManifestData )
507
513
if err != nil {
508
514
return imageMetaList , manifestDataList , err
@@ -561,8 +567,8 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
561
567
562
568
var protoImageMeta * proto_go.ImageMeta
563
569
564
- switch descriptor .MediaType {
565
- case ispec . MediaTypeImageManifest :
570
+ if descriptor .MediaType == ispec . MediaTypeImageManifest || //nolint:gocritic
571
+ compat . IsCompatibleManifestMediaType ( descriptor . MediaType ) {
566
572
manifestDigest := descriptor .Digest
567
573
568
574
imageManifestData , err := getProtoImageMeta (imageBuck , manifestDigest )
@@ -572,7 +578,8 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
572
578
}
573
579
574
580
protoImageMeta = imageManifestData
575
- case ispec .MediaTypeImageIndex :
581
+ } else if descriptor .MediaType == ispec .MediaTypeImageIndex ||
582
+ compat .IsCompatibleManifestListMediaType (descriptor .MediaType ) {
576
583
indexDigest := descriptor .Digest
577
584
578
585
imageIndexData , err := getProtoImageMeta (imageBuck , indexDigest )
@@ -589,7 +596,7 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string,
589
596
imageIndexData .Manifests = manifestDataList
590
597
591
598
protoImageMeta = imageIndexData
592
- default :
599
+ } else {
593
600
bdw .Log .Error ().Str ("mediaType" , descriptor .MediaType ).Msg ("unsupported media type" )
594
601
595
602
continue
@@ -643,8 +650,8 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
643
650
continue
644
651
}
645
652
646
- switch descriptor .MediaType {
647
- case ispec . MediaTypeImageManifest :
653
+ if descriptor .MediaType == ispec . MediaTypeImageManifest || //nolint:gocritic
654
+ compat . IsCompatibleManifestMediaType ( descriptor . MediaType ) {
648
655
manifestDigest := descriptor .Digest
649
656
650
657
imageManifestData , err := getProtoImageMeta (imageMetaBuck , manifestDigest )
@@ -659,7 +666,8 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
659
666
if filterFunc (repoMeta , imageMeta ) {
660
667
images = append (images , mConvert .GetFullImageMetaFromProto (tag , protoRepoMeta , imageManifestData ))
661
668
}
662
- case ispec .MediaTypeImageIndex :
669
+ } else if descriptor .MediaType == ispec .MediaTypeImageIndex ||
670
+ compat .IsCompatibleManifestListMediaType (descriptor .MediaType ) {
663
671
indexDigest := descriptor .Digest
664
672
665
673
protoImageIndexMeta , err := getProtoImageMeta (imageMetaBuck , indexDigest )
@@ -693,7 +701,7 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe
693
701
694
702
images = append (images , mConvert .GetFullImageMetaFromProto (tag , protoRepoMeta , protoImageIndexMeta ))
695
703
}
696
- default :
704
+ } else {
697
705
bdw .Log .Error ().Str ("mediaType" , descriptor .MediaType ).Msg ("unsupported media type" )
698
706
699
707
continue
@@ -818,7 +826,8 @@ func (bdw *BoltDB) GetFullImageMeta(ctx context.Context, repo string, tag string
818
826
return err
819
827
}
820
828
821
- if protoImageMeta .MediaType == ispec .MediaTypeImageIndex {
829
+ if protoImageMeta .MediaType == ispec .MediaTypeImageIndex ||
830
+ compat .IsCompatibleManifestListMediaType (protoImageMeta .MediaType ) {
822
831
_ , manifestDataList , err := getAllContainedMeta (imageBuck , protoImageMeta )
823
832
if err != nil {
824
833
return err
@@ -844,7 +853,8 @@ func (bdw *BoltDB) GetImageMeta(digest godigest.Digest) (mTypes.ImageMeta, error
844
853
return err
845
854
}
846
855
847
- if protoImageMeta .MediaType == ispec .MediaTypeImageIndex {
856
+ if protoImageMeta .MediaType == ispec .MediaTypeImageIndex ||
857
+ compat .IsCompatibleManifestListMediaType (protoImageMeta .MediaType ) {
848
858
_ , manifestDataList , err := getAllContainedMeta (imageBuck , protoImageMeta )
849
859
if err != nil {
850
860
return err
0 commit comments