Merge pull request #3888 from crazy-max/fix-oci-mediatypes
build: handle buildkit defaulting to oci mediatypes
This commit is contained in:
+13
-13
@@ -71,7 +71,7 @@ func testImagetoolsCopyManifest(t *testing.T, sb integration.Sandbox) {
|
|||||||
var mfst ocispecs.Manifest
|
var mfst ocispecs.Manifest
|
||||||
err = json.Unmarshal(dt, &mfst)
|
err = json.Unmarshal(dt, &mfst)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, mfst.MediaType)
|
require.Equal(t, defaultManifestMediaType(t, sb), mfst.MediaType)
|
||||||
|
|
||||||
registry2, err := sb.NewRegistry()
|
registry2, err := sb.NewRegistry()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -101,7 +101,7 @@ func testImagetoolsCopyManifest(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx2 ocispecs.Index
|
var idx2 ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx2)
|
err = json.Unmarshal(dt, &idx2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx2.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx2.MediaType)
|
||||||
require.Equal(t, 1, len(idx2.Manifests))
|
require.Equal(t, 1, len(idx2.Manifests))
|
||||||
|
|
||||||
cmd = buildxCmd(sb, withArgs("imagetools", "inspect", target2+"@"+string(idx2.Manifests[0].Digest), "--raw"))
|
cmd = buildxCmd(sb, withArgs("imagetools", "inspect", target2+"@"+string(idx2.Manifests[0].Digest), "--raw"))
|
||||||
@@ -111,7 +111,7 @@ func testImagetoolsCopyManifest(t *testing.T, sb integration.Sandbox) {
|
|||||||
var mfst2 ocispecs.Manifest
|
var mfst2 ocispecs.Manifest
|
||||||
err = json.Unmarshal(dt, &mfst2)
|
err = json.Unmarshal(dt, &mfst2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, mfst2.MediaType)
|
require.Equal(t, defaultManifestMediaType(t, sb), mfst2.MediaType)
|
||||||
|
|
||||||
require.Equal(t, mfst.Config.Digest, mfst2.Config.Digest)
|
require.Equal(t, mfst.Config.Digest, mfst2.Config.Digest)
|
||||||
require.Equal(t, len(mfst.Layers), len(mfst2.Layers))
|
require.Equal(t, len(mfst.Layers), len(mfst2.Layers))
|
||||||
@@ -127,10 +127,10 @@ func testImagetoolsCopyManifest(t *testing.T, sb integration.Sandbox) {
|
|||||||
dt, err = cmd.CombinedOutput()
|
dt, err = cmd.CombinedOutput()
|
||||||
require.NoError(t, err, string(dt))
|
require.NoError(t, err, string(dt))
|
||||||
|
|
||||||
var idx3 ocispecs.Manifest
|
var mfst3 ocispecs.Manifest
|
||||||
err = json.Unmarshal(dt, &idx3)
|
err = json.Unmarshal(dt, &mfst3)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, idx3.MediaType)
|
require.Equal(t, defaultManifestMediaType(t, sb), mfst3.MediaType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testImagetoolsCopyIndex verifies create/inspect behavior for a multi-platform index.
|
// testImagetoolsCopyIndex verifies create/inspect behavior for a multi-platform index.
|
||||||
@@ -158,7 +158,7 @@ func testImagetoolsCopyIndex(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx ocispecs.Index
|
var idx ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx)
|
err = json.Unmarshal(dt, &idx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx.MediaType)
|
||||||
require.Equal(t, 2, len(idx.Manifests))
|
require.Equal(t, 2, len(idx.Manifests))
|
||||||
|
|
||||||
registry2, err := sb.NewRegistry()
|
registry2, err := sb.NewRegistry()
|
||||||
@@ -191,7 +191,7 @@ func testImagetoolsCopyIndex(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx2 ocispecs.Index
|
var idx2 ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx2)
|
err = json.Unmarshal(dt, &idx2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx2.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx2.MediaType)
|
||||||
|
|
||||||
require.Equal(t, len(idx.Manifests), len(idx2.Manifests))
|
require.Equal(t, len(idx.Manifests), len(idx2.Manifests))
|
||||||
for i := range idx.Manifests {
|
for i := range idx.Manifests {
|
||||||
@@ -209,7 +209,7 @@ func testImagetoolsCopyIndex(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx3 ocispecs.Index
|
var idx3 ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx3)
|
err = json.Unmarshal(dt, &idx3)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx3.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx3.MediaType)
|
||||||
|
|
||||||
require.Equal(t, len(idx.Manifests), len(idx3.Manifests))
|
require.Equal(t, len(idx.Manifests), len(idx3.Manifests))
|
||||||
for i := range idx.Manifests {
|
for i := range idx.Manifests {
|
||||||
@@ -763,7 +763,7 @@ func testImagetoolsAppend(t *testing.T, sb integration.Sandbox) {
|
|||||||
var amd64Manifest ocispecs.Manifest
|
var amd64Manifest ocispecs.Manifest
|
||||||
err = json.Unmarshal(dt, &amd64Manifest)
|
err = json.Unmarshal(dt, &amd64Manifest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, amd64Manifest.MediaType)
|
require.Equal(t, defaultManifestMediaType(t, sb), amd64Manifest.MediaType)
|
||||||
amd64Digest := digest.FromBytes(dt)
|
amd64Digest := digest.FromBytes(dt)
|
||||||
|
|
||||||
source := registry + "/buildx/imtools-append-source:latest"
|
source := registry + "/buildx/imtools-append-source:latest"
|
||||||
@@ -777,7 +777,7 @@ func testImagetoolsAppend(t *testing.T, sb integration.Sandbox) {
|
|||||||
var arm64Manifest ocispecs.Manifest
|
var arm64Manifest ocispecs.Manifest
|
||||||
err = json.Unmarshal(dt, &arm64Manifest)
|
err = json.Unmarshal(dt, &arm64Manifest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, arm64Manifest.MediaType)
|
require.Equal(t, defaultManifestMediaType(t, sb), arm64Manifest.MediaType)
|
||||||
arm64Digest := digest.FromBytes(dt)
|
arm64Digest := digest.FromBytes(dt)
|
||||||
|
|
||||||
cmd = buildxCmd(sb, withArgs("imagetools", "create", "--append", "-t", target, source))
|
cmd = buildxCmd(sb, withArgs("imagetools", "create", "--append", "-t", target, source))
|
||||||
@@ -791,7 +791,7 @@ func testImagetoolsAppend(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx ocispecs.Index
|
var idx ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx)
|
err = json.Unmarshal(dt, &idx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx.MediaType)
|
||||||
require.Len(t, idx.Manifests, 2)
|
require.Len(t, idx.Manifests, 2)
|
||||||
|
|
||||||
platformsByDigest := map[digest.Digest]string{}
|
platformsByDigest := map[digest.Digest]string{}
|
||||||
@@ -852,7 +852,7 @@ func testImagetoolsFile(t *testing.T, sb integration.Sandbox) {
|
|||||||
var idx ocispecs.Index
|
var idx ocispecs.Index
|
||||||
err = json.Unmarshal(dt, &idx)
|
err = json.Unmarshal(dt, &idx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, idx.MediaType)
|
require.Equal(t, defaultIndexMediaType(t, sb), idx.MediaType)
|
||||||
require.Len(t, idx.Manifests, 1)
|
require.Len(t, idx.Manifests, 1)
|
||||||
require.Equal(t, sourceDesc.Digest, idx.Manifests[0].Digest)
|
require.Equal(t, sourceDesc.Digest, idx.Manifests[0].Digest)
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,10 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
"github.com/Masterminds/semver/v3"
|
||||||
|
"github.com/containerd/containerd/v2/core/images"
|
||||||
"github.com/containerd/continuity/fs/fstest"
|
"github.com/containerd/continuity/fs/fstest"
|
||||||
"github.com/moby/buildkit/util/testutil/integration"
|
"github.com/moby/buildkit/util/testutil/integration"
|
||||||
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -250,6 +252,20 @@ func skipNoCompatBuildKit(t *testing.T, sb integration.Sandbox, constraint strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func defaultManifestMediaType(t *testing.T, sb integration.Sandbox) string {
|
||||||
|
if matchesBuildKitVersion(t, sb, ">= 0.31.0-0") {
|
||||||
|
return ocispecs.MediaTypeImageManifest
|
||||||
|
}
|
||||||
|
return images.MediaTypeDockerSchema2Manifest
|
||||||
|
}
|
||||||
|
|
||||||
|
func defaultIndexMediaType(t *testing.T, sb integration.Sandbox) string {
|
||||||
|
if matchesBuildKitVersion(t, sb, ">= 0.31.0-0") {
|
||||||
|
return ocispecs.MediaTypeImageIndex
|
||||||
|
}
|
||||||
|
return images.MediaTypeDockerSchema2ManifestList
|
||||||
|
}
|
||||||
|
|
||||||
func ptrstr(s any) *string {
|
func ptrstr(s any) *string {
|
||||||
var n *string
|
var n *string
|
||||||
if reflect.ValueOf(s).Kind() == reflect.String {
|
if reflect.ValueOf(s).Kind() == reflect.String {
|
||||||
|
|||||||
Reference in New Issue
Block a user