diff --git a/pkg/build/gobuild.go b/pkg/build/gobuild.go index 07b2023830..cff0a712f2 100644 --- a/pkg/build/gobuild.go +++ b/pkg/build/gobuild.go @@ -701,9 +701,6 @@ func (g *gobuild) configForImportPath(ip string) Config { func (g *gobuild) buildOne(ctx context.Context, refStr string, base v1.Image, platform *v1.Platform) (v1.Image, error) { ref := newRef(refStr) - // Always produce OCI images, even if the base image isn't an OCI image. - base = mutate.MediaType(base, types.OCIManifestSchema1) - cf, err := base.ConfigFile() if err != nil { return nil, err @@ -880,15 +877,16 @@ func (g *gobuild) Build(ctx context.Context, s string) (Result, error) { } // Annotate the image or index with base image information. - // If the result is an Index, it should be an OCI index that supports - // annotations. - anns := map[string]string{ - specsv1.AnnotationBaseImageDigest: baseDigest.String(), - } - if _, ok := baseRef.(name.Tag); ok { - anns[specsv1.AnnotationBaseImageName] = baseRef.Name() + // (Docker manifest lists don't support annotations) + if mt != types.DockerManifestList { + anns := map[string]string{ + specsv1.AnnotationBaseImageDigest: baseDigest.String(), + } + if _, ok := baseRef.(name.Tag); ok { + anns[specsv1.AnnotationBaseImageName] = baseRef.Name() + } + res = mutate.Annotations(res, anns).(Result) } - res = mutate.Annotations(res, anns).(Result) return res, nil } @@ -924,13 +922,18 @@ func (g *gobuild) buildAll(ctx context.Context, ref string, baseIndex v1.ImageIn Add: img, Descriptor: v1.Descriptor{ URLs: desc.URLs, + MediaType: desc.MediaType, Annotations: desc.Annotations, Platform: desc.Platform, }, }) } - idx := mutate.IndexMediaType(mutate.AppendManifests(empty.Index, adds...), types.OCIImageIndex) + baseType, err := baseIndex.MediaType() + if err != nil { + return nil, err + } + idx := mutate.IndexMediaType(mutate.AppendManifests(empty.Index, adds...), baseType) return idx, nil } diff --git a/pkg/build/gobuild_test.go b/pkg/build/gobuild_test.go index a90e99d387..a271364a71 100644 --- a/pkg/build/gobuild_test.go +++ b/pkg/build/gobuild_test.go @@ -36,7 +36,6 @@ import ( "github.com/google/go-containerregistry/pkg/v1/empty" "github.com/google/go-containerregistry/pkg/v1/mutate" "github.com/google/go-containerregistry/pkg/v1/random" - "github.com/google/go-containerregistry/pkg/v1/types" specsv1 "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -421,17 +420,6 @@ func TestGoBuildNoKoData(t *testing.T) { t.Errorf("created = %v, want %v", actual, creationTime) } }) - - t.Run("check OCI media type", func(t *testing.T) { - mt, err := img.MediaType() - if err != nil { - t.Errorf("MediaType() = %v", err) - } - - if got, want := mt, types.OCIManifestSchema1; got != want { - t.Errorf("mediaType = %v, want %v", got, want) - } - }) } func validateImage(t *testing.T, img v1.Image, baseLayers int64, creationTime v1.Time, checkAnnotations bool) { @@ -743,23 +731,6 @@ func TestGoBuildIndex(t *testing.T) { t.Errorf("Digest mismatch: %s != %s", d1, d2) } }) - - t.Run("check OCI media type", func(t *testing.T) { - mt, err := idx.MediaType() - if err != nil { - t.Fatalf("MediaType() = %v", err) - } - - if got, want := mt, types.OCIImageIndex; got != want { - t.Errorf("mediaType = %v, want %v", got, want) - } - - for i, mf := range im.Manifests { - if got, want := mf.MediaType, types.OCIManifestSchema1; got != want { - t.Errorf("manifest[%d] mediaType = %s, want %s", i, got, want) - } - } - }) } func TestNestedIndex(t *testing.T) {