mirror of
https://github.com/ko-build/ko.git
synced 2025-03-17 20:47:51 +02:00
Always produce OCI images and indexes (#449)
* Always produce OCI images and indexes * test each constituent manifest's mediatype
This commit is contained in:
parent
729419aebb
commit
465eca2b93
@ -701,6 +701,9 @@ 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
|
||||
@ -877,16 +880,15 @@ func (g *gobuild) Build(ctx context.Context, s string) (Result, error) {
|
||||
}
|
||||
|
||||
// Annotate the image or index with base image information.
|
||||
// (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)
|
||||
// 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()
|
||||
}
|
||||
res = mutate.Annotations(res, anns).(Result)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
@ -922,18 +924,13 @@ 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,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
baseType, err := baseIndex.MediaType()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
idx := mutate.IndexMediaType(mutate.AppendManifests(empty.Index, adds...), baseType)
|
||||
idx := mutate.IndexMediaType(mutate.AppendManifests(empty.Index, adds...), types.OCIImageIndex)
|
||||
|
||||
return idx, nil
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ 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"
|
||||
)
|
||||
|
||||
@ -420,6 +421,17 @@ 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) {
|
||||
@ -731,6 +743,23 @@ 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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user