mirror of
https://github.com/moby/buildkit.git
synced 2026-11-06 05:16:45 +00:00
Merge pull request #6824 from tonistiigi/oci-mediatypes
exporter/containerimage: default to oci-mediatypes=true
This commit is contained in:
31 files changed
+477
-117
No files matched your search
Vendored
+1
-1
@@ -1750,7 +1750,7 @@ func TestGetRemotes(t *testing.T) {
|
||||
case compression.EStargz:
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, desc.MediaType)
|
||||
case compression.Zstd:
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer+"+zstd", desc.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerZstd, desc.MediaType)
|
||||
default:
|
||||
require.Fail(t, "unhandled media type", compressionType)
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ func testBuildExportNydusWithHybrid(t *testing.T, sb integration.Sandbox) {
|
||||
|
||||
mediaTypes := map[compression.Type]string{
|
||||
compression.Gzip: ocispecs.MediaTypeImageLayerGzip,
|
||||
compression.Zstd: ocispecs.MediaTypeImageLayer + "+zstd",
|
||||
compression.Zstd: ocispecs.MediaTypeImageLayerZstd,
|
||||
}
|
||||
target := fmt.Sprintf("%s/%s/alpine:%s", registry, compType, identity.NewID())
|
||||
_, err = c.Solve(sb.Context(), def, SolveOpt{
|
||||
|
||||
+45
-52
@@ -1465,7 +1465,7 @@ func testPushByDigest(t *testing.T, sb integration.Sandbox) {
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, resp.ExporterResponse[exptypes.ExporterImageDigestKey], desc.Digest.String())
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, desc.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageManifest, desc.MediaType)
|
||||
require.Greater(t, desc.Size, int64(0))
|
||||
}
|
||||
|
||||
@@ -3209,7 +3209,7 @@ func testSessionExporter(t *testing.T, sb integration.Sandbox) {
|
||||
|
||||
require.Equal(t, 2, len(mfst.Layers))
|
||||
for _, layer := range mfst.Layers {
|
||||
require.Contains(t, layer.MediaType, "application/vnd.oci.image.layer.v1.tar+zstd")
|
||||
require.Contains(t, layer.MediaType, ocispecs.MediaTypeImageLayerZstd)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3680,9 +3680,9 @@ func testBuildExportScratch(t *testing.T, sb integration.Sandbox) {
|
||||
imgs, err := testutil.ReadImages(sb.Context(), provider, desc)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, imgs.Images, 1)
|
||||
img := imgs.Find(platforms.Format(platforms.DefaultSpec()))
|
||||
img := imgs.Images[0]
|
||||
require.Empty(t, img.Layers)
|
||||
require.Equal(t, platforms.DefaultSpec(), img.Img.Platform)
|
||||
require.True(t, platforms.Only(platforms.DefaultSpec()).Match(img.Img.Platform))
|
||||
|
||||
desc, provider, err = contentutil.ProviderFromRef(targetMulti)
|
||||
require.NoError(t, err)
|
||||
@@ -4362,7 +4362,7 @@ func testMultipleExporters(t *testing.T, sb integration.Sandbox) {
|
||||
Type: ExporterImage,
|
||||
Attrs: map[string]string{
|
||||
"name": target2,
|
||||
"oci-mediatypes": "true",
|
||||
"oci-mediatypes": "false",
|
||||
},
|
||||
},
|
||||
}...)
|
||||
@@ -4430,8 +4430,8 @@ func testMultipleExporters(t *testing.T, sb integration.Sandbox) {
|
||||
} else {
|
||||
require.Len(t, ev.Record.Result.Results, 2)
|
||||
require.Len(t, ev.Record.Exporters, 6)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, ev.Record.Result.Results[0].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageManifest, ev.Record.Result.Results[1].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageManifest, ev.Record.Result.Results[0].MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, ev.Record.Result.Results[1].MediaType)
|
||||
}
|
||||
require.Equal(t, ev.Record.Result.Results[0], ev.Record.Result.ResultDeprecated)
|
||||
}
|
||||
@@ -5439,6 +5439,7 @@ func testBuildExportWithForeignLayer(t *testing.T, sb integration.Sandbox) {
|
||||
Attrs: map[string]string{
|
||||
"name": target,
|
||||
"push": "true",
|
||||
"oci-mediatypes": "false",
|
||||
"prefer-nondist-layers": "true",
|
||||
},
|
||||
},
|
||||
@@ -5484,8 +5485,9 @@ func testBuildExportWithForeignLayer(t *testing.T, sb integration.Sandbox) {
|
||||
{
|
||||
Type: ExporterImage,
|
||||
Attrs: map[string]string{
|
||||
"name": target,
|
||||
"push": "true",
|
||||
"name": target,
|
||||
"push": "true",
|
||||
"oci-mediatypes": "false",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -5572,7 +5574,7 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
|
||||
mfst, err := images.Manifest(ctx, client.ContentStore(), img.Target(), nil)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, len(mfst.Layers))
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[0].MediaType)
|
||||
}
|
||||
|
||||
// new layer with gzip compression
|
||||
@@ -5641,8 +5643,8 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
|
||||
err = json.Unmarshal(dt, &mfst)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, len(mfst.Layers))
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
|
||||
|
||||
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
|
||||
require.NoError(t, err)
|
||||
@@ -5686,8 +5688,8 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
|
||||
err = json.Unmarshal(dt, &mfst)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, len(mfst.Layers))
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
|
||||
|
||||
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
|
||||
require.NoError(t, err)
|
||||
@@ -5775,7 +5777,7 @@ func testBuildExportZstd(t *testing.T, sb integration.Sandbox) {
|
||||
require.NoError(t, err)
|
||||
|
||||
lastLayer := mfst.Layers[len(mfst.Layers)-1]
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer+"+zstd", lastLayer.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerZstd, lastLayer.MediaType)
|
||||
|
||||
zstdLayerDigest := lastLayer.Digest.Hex()
|
||||
require.Equal(t, []byte{0x28, 0xb5, 0x2f, 0xfd}, m[ocispecs.ImageBlobsDir+"/sha256/"+zstdLayerDigest].Data[:4])
|
||||
@@ -5811,7 +5813,7 @@ func testBuildExportZstd(t *testing.T, sb integration.Sandbox) {
|
||||
require.NoError(t, err)
|
||||
|
||||
lastLayer = mfst.Layers[len(mfst.Layers)-1]
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Layer+".zstd", lastLayer.MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerZstd, lastLayer.MediaType)
|
||||
|
||||
require.Equal(t, lastLayer.Digest.Hex(), zstdLayerDigest)
|
||||
}
|
||||
@@ -5905,9 +5907,9 @@ func testPullZstdImage(t *testing.T, sb integration.Sandbox) {
|
||||
|
||||
firstLayer := mfst.Layers[0]
|
||||
if ociMediaTypes {
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer+"+zstd", firstLayer.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerZstd, firstLayer.MediaType)
|
||||
} else {
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Layer+".zstd", firstLayer.MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerZstd, firstLayer.MediaType)
|
||||
}
|
||||
|
||||
zstdLayerDigest := firstLayer.Digest.Hex()
|
||||
@@ -6062,10 +6064,10 @@ func testBuildPushAndValidate(t *testing.T, sb integration.Sandbox) {
|
||||
err = json.Unmarshal(dt, &mfst)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, images.MediaTypeDockerSchema2Manifest, mfst.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageManifest, mfst.MediaType)
|
||||
require.Equal(t, 3, len(mfst.Layers))
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[0].MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
|
||||
|
||||
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
|
||||
require.NoError(t, err)
|
||||
@@ -6826,7 +6828,7 @@ func testZstdLocalCacheExport(t *testing.T, sb integration.Sandbox) {
|
||||
require.NoError(t, err)
|
||||
|
||||
lastLayer := layerIndex.Manifests[len(layerIndex.Manifests)-2]
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayer+"+zstd", lastLayer.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageLayerZstd, lastLayer.MediaType)
|
||||
|
||||
zstdLayerDigest := lastLayer.Digest.Hex()
|
||||
dt, err = os.ReadFile(filepath.Join(destDir, ocispecs.ImageBlobsDir+"/sha256/"+zstdLayerDigest))
|
||||
@@ -10471,7 +10473,7 @@ func testExportAnnotationsMediaTypes(t *testing.T, sb integration.Sandbox) {
|
||||
require.Equal(t, "b", imgs.Images[0].Manifest.Annotations["a"])
|
||||
require.Equal(t, "d", imgs2.Index.Annotations["c"])
|
||||
|
||||
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, imgs.Index.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageIndex, imgs.Index.MediaType)
|
||||
require.Equal(t, ocispecs.MediaTypeImageIndex, imgs2.Index.MediaType)
|
||||
}
|
||||
|
||||
@@ -11144,7 +11146,7 @@ func testSBOMScan(t *testing.T, sb integration.Sandbox) {
|
||||
scannerFrontend := func(ctx context.Context, c gateway.Client) (*gateway.Result, error) {
|
||||
res := gateway.NewResult()
|
||||
|
||||
st := llb.Image("busybox")
|
||||
st := llb.Image("busybox", llb.Platform(p))
|
||||
def, err := st.Marshal(sb.Context())
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -11162,16 +11164,7 @@ func testSBOMScan(t *testing.T, sb integration.Sandbox) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.AddRef(pk, ref)
|
||||
|
||||
expPlatforms := &exptypes.Platforms{
|
||||
Platforms: []exptypes.Platform{{ID: pk, Platform: p}},
|
||||
}
|
||||
dt, err := json.Marshal(expPlatforms)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.AddMeta(exptypes.ExporterPlatformsKey, dt)
|
||||
res.SetRef(ref)
|
||||
|
||||
var img ocispecs.Image
|
||||
cmd := `
|
||||
@@ -11195,7 +11188,7 @@ EOF
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to marshal image config")
|
||||
}
|
||||
res.AddMeta(fmt.Sprintf("%s/%s", exptypes.ExporterImageConfigKey, pk), config)
|
||||
res.AddMeta(exptypes.ExporterImageConfigKey, config)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
@@ -11206,8 +11199,9 @@ EOF
|
||||
{
|
||||
Type: ExporterImage,
|
||||
Attrs: map[string]string{
|
||||
"name": scannerTarget,
|
||||
"push": "true",
|
||||
"name": scannerTarget,
|
||||
"push": "true",
|
||||
"oci-mediatypes": "false",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -11497,7 +11491,7 @@ func testSBOMScanSingleRef(t *testing.T, sb integration.Sandbox) {
|
||||
scannerFrontend := func(ctx context.Context, c gateway.Client) (*gateway.Result, error) {
|
||||
res := gateway.NewResult()
|
||||
|
||||
st := llb.Image("busybox")
|
||||
st := llb.Image("busybox", llb.Platform(p))
|
||||
def, err := st.Marshal(sb.Context())
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -11515,16 +11509,7 @@ func testSBOMScanSingleRef(t *testing.T, sb integration.Sandbox) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.AddRef(pk, ref)
|
||||
|
||||
expPlatforms := &exptypes.Platforms{
|
||||
Platforms: []exptypes.Platform{{ID: pk, Platform: p}},
|
||||
}
|
||||
dt, err := json.Marshal(expPlatforms)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res.AddMeta(exptypes.ExporterPlatformsKey, dt)
|
||||
res.SetRef(ref)
|
||||
|
||||
var img ocispecs.Image
|
||||
cmd := `
|
||||
@@ -11542,7 +11527,7 @@ EOF
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to marshal image config")
|
||||
}
|
||||
res.AddMeta(fmt.Sprintf("%s/%s", exptypes.ExporterImageConfigKey, pk), config)
|
||||
res.AddMeta(exptypes.ExporterImageConfigKey, config)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
@@ -11553,8 +11538,9 @@ EOF
|
||||
{
|
||||
Type: ExporterImage,
|
||||
Attrs: map[string]string{
|
||||
"name": scannerTarget,
|
||||
"push": "true",
|
||||
"name": scannerTarget,
|
||||
"push": "true",
|
||||
"oci-mediatypes": "false",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -11633,7 +11619,14 @@ EOF
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, len(imgs.Images))
|
||||
|
||||
img := imgs.Find(pk)
|
||||
var img *testutil.ImageInfo
|
||||
for _, candidate := range imgs.Images {
|
||||
if candidate.Desc.Platform != nil && platforms.Format(*candidate.Desc.Platform) == "unknown/unknown" {
|
||||
continue
|
||||
}
|
||||
img = candidate
|
||||
break
|
||||
}
|
||||
require.NotNil(t, img)
|
||||
require.Equal(t, []string{"/bin/sh", "-c", "cat /greeting"}, img.Img.Config.Cmd)
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:430ee4fa77d640d42de0c6357e4cff7249712a28284310bda8293050c6cbc5d8",
|
||||
"size": 2219886,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:48cef04b9e3890175d531912bd6307b344eb1d16caba14f32989e8034466dde4",
|
||||
"size": 175,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3096f0079befb9bacfab7003f9de4604477e81ef1cd0d4bb9f967db5aba7bebc",
|
||||
"size": 242,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:163f5dbfba981d0b1e6e9c5a1ba003efa40e7e7d38e8471653e1f1b2abd370d9",
|
||||
"size": 201,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3b2645dc700f1550f22b0915aea1fb70755d0cccd4171499c7a18f396a284d48",
|
||||
"size": 4492656,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:426dfb571c2a1f52cb66e0a69fbe2348348afc4ba893cba5754a841882d91773",
|
||||
"size": 3612,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:5c3240cc0bcdc46a4ff085359eba4d0ffe7e5e161c5f376e79f2264719041668",
|
||||
"size": 6172,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:847e9b228e5b81db2fe943892d3602808b8f94ec498afe963a23bf8ab1d39a26",
|
||||
"size": 4124,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:86961eaccfc75a8eea4385f921d5aa55c8bb752f1c92a7c3189ae4a4fc37a45c",
|
||||
"size": 2216704,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:f39e671d2c987aa1cedb5d830a68d394ce7f72502ec50d6bd11efaa71bb697d2",
|
||||
"size": 168,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:ba67dd0bb35371d02be3b950c6d617e1f22f55861fc5a7d0d354c8fbb2f77b56",
|
||||
"size": 228,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:ca66b99f9916a22accc57a790d407b442a10791859f9d0a6b6c8108857c3c608",
|
||||
"size": 187,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:430ee4fa77d640d42de0c6357e4cff7249712a28284310bda8293050c6cbc5d8",
|
||||
"size": 2219886,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:48cef04b9e3890175d531912bd6307b344eb1d16caba14f32989e8034466dde4",
|
||||
"size": 175,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3096f0079befb9bacfab7003f9de4604477e81ef1cd0d4bb9f967db5aba7bebc",
|
||||
"size": 242,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:163f5dbfba981d0b1e6e9c5a1ba003efa40e7e7d38e8471653e1f1b2abd370d9",
|
||||
"size": 201,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
],
|
||||
"annotations": {
|
||||
"org.opencontainers.image.title": "compatibility-test"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:430ee4fa77d640d42de0c6357e4cff7249712a28284310bda8293050c6cbc5d8",
|
||||
"size": 2219886,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:48cef04b9e3890175d531912bd6307b344eb1d16caba14f32989e8034466dde4",
|
||||
"size": 175,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3096f0079befb9bacfab7003f9de4604477e81ef1cd0d4bb9f967db5aba7bebc",
|
||||
"size": 242,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:163f5dbfba981d0b1e6e9c5a1ba003efa40e7e7d38e8471653e1f1b2abd370d9",
|
||||
"size": 201,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:430ee4fa77d640d42de0c6357e4cff7249712a28284310bda8293050c6cbc5d8",
|
||||
"size": 2219886,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:48cef04b9e3890175d531912bd6307b344eb1d16caba14f32989e8034466dde4",
|
||||
"size": 175,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3096f0079befb9bacfab7003f9de4604477e81ef1cd0d4bb9f967db5aba7bebc",
|
||||
"size": 242,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:163f5dbfba981d0b1e6e9c5a1ba003efa40e7e7d38e8471653e1f1b2abd370d9",
|
||||
"size": 201,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar",
|
||||
"digest": "sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17",
|
||||
"size": 4492288,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar",
|
||||
"digest": "sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654",
|
||||
"size": 3584,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar",
|
||||
"digest": "sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042",
|
||||
"size": 6144,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar",
|
||||
"digest": "sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466",
|
||||
"size": 4096,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"adfa050237a5fcf9f1e5ad6351b3665e4b99e0c12f33bdd3535b8fb001f9dd2e","container_config":{"Hostname":"adfa050237a5","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"Image":"sha256:919de79e94ce464098cec8a4796f27aa2d0c93985e27f6a157c8bbb557568013","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2015-10-21T07:28:00Z","docker_version":"20.10.23","history":[{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) ADD file:7e9002edaafd4e4579b65c8f0aaabde1aeb7fd3f8d95579f7fd3443cef785fd1 in / "},{"created":"2015-10-21T07:28:00Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /proc, mkdir /sys, mkdir /base, mkfile /base/base.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mkdir /inputs/git, mkfile /inputs/llb.txt, copy /artifact.txt /inputs/http.txt, copy /git.txt /inputs/git/git.txt, copy /sub/nested.txt /inputs/git/nested.txt","comment":"buildkit.exporter.image.v0"},{"created":"2015-10-21T07:28:00Z","created_by":"mount / from exec sh -eux -c \nmkdir -p /generated/deeper\necho exec-fixture \u003e /generated/exec.txt\necho nested-exec \u003e /generated/deeper/nested.txt\n","comment":"buildkit.exporter.image.v0"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:fe4922f0a3ca2aa707ca0f8cc53937e947fec1157a09302baf11904258d67d17","sha256:007165e99d6304af5653e8a8cc1c8886e5719cf31bf09cbd9f50fa09008ef654","sha256:9228085939d1444bd500ac8a4f8ee9d39fed1e5905da0968ffed61887ab41042","sha256:672c0da84adab23797eebbf41315e289f03b02e266bdd6f6e88a7736583a4466"]}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:1772fd0a3b45a62fc5e23737bf8aa63ea2cb178a02e57cec4d14ef9e6fcc4c95",
|
||||
"size": 2295
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+zstd",
|
||||
"digest": "sha256:732ad1c88bfbc8aa6f9d98b0aa872a79298affbec456265500477eaf7b3acad4",
|
||||
"size": 1997110,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+zstd",
|
||||
"digest": "sha256:72a37ade5c8308d1328a61790c83d4f6cc2e6a18cdbf96f17058766d61758100",
|
||||
"size": 170,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+zstd",
|
||||
"digest": "sha256:cdd742478917b2382493c0c3ccf484ffa94833015e81b7b084c608bb8405affa",
|
||||
"size": 232,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+zstd",
|
||||
"digest": "sha256:ef0abf1996faa0809cea6e2f7f971089f5990894c5b267927f9776e073a75325",
|
||||
"size": 186,
|
||||
"annotations": {
|
||||
"buildkit/rewritten-timestamp": "1445412480"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+14
-3
@@ -88,13 +88,24 @@ See also the [documentation](/frontend/dockerfile/docs/reference.md#buildkit-bui
|
||||
BuildKit currently supports these values:
|
||||
|
||||
- `10` for the `v0.13.0` and `v0.14.0` historical path
|
||||
- `20` for the `v0.15.0+` path and current behavior
|
||||
- `20` for the `v0.15.0` through `v0.31.x` path
|
||||
- `30` for the current path
|
||||
|
||||
### `30`
|
||||
|
||||
`30` is the current compatibility version.
|
||||
|
||||
Compared to `20`, `30` changes the default image exporter media type behavior:
|
||||
|
||||
- when `oci-mediatypes` is not set, image exports default to OCI media types
|
||||
|
||||
### `20`
|
||||
|
||||
`20` is the current compatibility version.
|
||||
`20` represents the historical `v0.15.0` through `v0.31.x` path.
|
||||
|
||||
It matches released BuildKit output from `v0.15.0` and newer for the compatibility test matrix in `client/compatibility_test.go`.
|
||||
It matches the `v0.15.0` through `v0.31.x` output covered by the compatibility test matrix in `client/compatibility_test.go`.
|
||||
|
||||
Compared to `30`, image exports that do not set `oci-mediatypes` keep the historical `20` media type behavior. Image exports without attestations default to Docker media types. Image exports with attestations use OCI media types because attestations require them.
|
||||
|
||||
### `10`
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"github.com/moby/buildkit/exporter/containerimage/exptypes"
|
||||
"github.com/moby/buildkit/session"
|
||||
"github.com/moby/buildkit/snapshot"
|
||||
"github.com/moby/buildkit/solver/llbsolver/compat"
|
||||
"github.com/moby/buildkit/util/compression"
|
||||
"github.com/moby/buildkit/util/contentutil"
|
||||
"github.com/moby/buildkit/util/errutil"
|
||||
@@ -232,6 +233,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source
|
||||
return nil, nil, nil, err
|
||||
}
|
||||
opts.Annotations = opts.Annotations.Merge(as)
|
||||
opts.SetOCITypesDefault(defaultImageOCITypes(buildInfo.CompatibilityVersion, src))
|
||||
|
||||
ctx, done, err := leaseutil.WithLease(ctx, e.opt.LeaseManager, leaseutil.MakeTemporary)
|
||||
if err != nil {
|
||||
@@ -577,6 +579,13 @@ func addAnnotations(m map[digest.Digest]map[string]string, desc ocispecs.Descrip
|
||||
maps.Copy(a, desc.Annotations)
|
||||
}
|
||||
|
||||
func defaultImageOCITypes(compatibilityVersion int, src *exporter.Source) bool {
|
||||
if compatibilityVersion >= compat.CompatibilityVersion031 {
|
||||
return true
|
||||
}
|
||||
return len(src.Attestations) > 0
|
||||
}
|
||||
|
||||
func NewDescriptorReference(desc ocispecs.Descriptor, release func(context.Context) error) exporter.DescriptorReference {
|
||||
return &descriptorReference{
|
||||
desc: desc,
|
||||
|
||||
@@ -51,6 +51,7 @@ var (
|
||||
OptKeyOCITypes ImageExporterOptKey = "oci-mediatypes"
|
||||
|
||||
// Use OCI artifact format for the attestation manifest.
|
||||
// Value: bool <true|false>
|
||||
OptKeyOCIArtifact ImageExporterOptKey = "oci-artifact"
|
||||
|
||||
// Force attestation to be attached.
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
cacheconfig "github.com/moby/buildkit/cache/config"
|
||||
"github.com/moby/buildkit/exporter/containerimage/exptypes"
|
||||
"github.com/moby/buildkit/exporter/util/epoch"
|
||||
"github.com/moby/buildkit/util/bklog"
|
||||
"github.com/moby/buildkit/util/compression"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@@ -15,7 +14,7 @@ import (
|
||||
type ImageCommitOpts struct {
|
||||
ImageName string
|
||||
RefCfg cacheconfig.RefConfig
|
||||
OCITypes bool
|
||||
OCITypes *bool
|
||||
OCIArtifact bool
|
||||
Annotations AnnotationsGroup
|
||||
Epoch *epoch.Epoch
|
||||
@@ -48,7 +47,9 @@ func (c *ImageCommitOpts) Load(ctx context.Context, opt map[string]string) (map[
|
||||
case exptypes.OptKeyName:
|
||||
c.ImageName = v
|
||||
case exptypes.OptKeyOCITypes:
|
||||
err = parseBoolWithDefault(&c.OCITypes, k, v, true)
|
||||
var b bool
|
||||
err = parseBool(&b, k, v)
|
||||
c.OCITypes = &b
|
||||
case exptypes.OptKeyOCIArtifact:
|
||||
err = parseBool(&c.OCIArtifact, k, v)
|
||||
case exptypes.OptKeyForceInlineAttestations:
|
||||
@@ -66,11 +67,8 @@ func (c *ImageCommitOpts) Load(ctx context.Context, opt map[string]string) (map[
|
||||
}
|
||||
}
|
||||
|
||||
if c.RefCfg.Compression.Type.OnlySupportOCITypes() {
|
||||
c.EnableOCITypes(ctx, c.RefCfg.Compression.Type.String())
|
||||
}
|
||||
if c.OCIArtifact && !c.OCITypes {
|
||||
c.EnableOCITypes(ctx, "oci-artifact")
|
||||
if err := c.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.Annotations = c.Annotations.Merge(as)
|
||||
@@ -78,28 +76,27 @@ func (c *ImageCommitOpts) Load(ctx context.Context, opt map[string]string) (map[
|
||||
return rest, nil
|
||||
}
|
||||
|
||||
func (c *ImageCommitOpts) EnableOCITypes(ctx context.Context, reason string) {
|
||||
if !c.OCITypes {
|
||||
message := "forcibly turning on oci-mediatype mode"
|
||||
if reason != "" {
|
||||
message += " for " + reason
|
||||
}
|
||||
bklog.G(ctx).Warn(message)
|
||||
func (c *ImageCommitOpts) Validate() error {
|
||||
if c.OCITypes == nil {
|
||||
return nil
|
||||
}
|
||||
if c.RefCfg.Compression.Type.OnlySupportOCITypes() && !c.OCITypesEnabled() {
|
||||
return errors.Errorf("exporter option \"compression=%s\" conflicts with \"oci-mediatypes=false\"", c.RefCfg.Compression.Type)
|
||||
}
|
||||
if c.OCIArtifact && !c.OCITypesEnabled() {
|
||||
return errors.New("exporter option \"oci-artifact=true\" conflicts with \"oci-mediatypes=false\"")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
c.OCITypes = true
|
||||
func (c *ImageCommitOpts) SetOCITypesDefault(v bool) {
|
||||
if c.OCITypes == nil {
|
||||
c.OCITypes = &v
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ImageCommitOpts) EnableForceCompression(ctx context.Context, reason string) {
|
||||
if !c.RefCfg.Compression.Force {
|
||||
message := "forcibly turning on force-compression mode"
|
||||
if reason != "" {
|
||||
message += " for " + reason
|
||||
}
|
||||
bklog.G(ctx).Warn(message)
|
||||
|
||||
c.RefCfg.Compression.Force = true
|
||||
}
|
||||
func (c *ImageCommitOpts) OCITypesEnabled() bool {
|
||||
return c.OCITypes != nil && *c.OCITypes
|
||||
}
|
||||
|
||||
func parseBool(dest *bool, key string, value string) error {
|
||||
@@ -111,14 +108,6 @@ func parseBool(dest *bool, key string, value string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseBoolWithDefault(dest *bool, key string, value string, defaultValue bool) error {
|
||||
if value == "" {
|
||||
*dest = defaultValue
|
||||
return nil
|
||||
}
|
||||
return parseBool(dest, key, value)
|
||||
}
|
||||
|
||||
func toBytesMap(m map[string]string) map[string][]byte {
|
||||
result := make(map[string][]byte)
|
||||
for k, v := range m {
|
||||
|
||||
@@ -12,6 +12,6 @@ import (
|
||||
)
|
||||
|
||||
func patchImageLayers(ctx context.Context, remote *solver.Remote, history []ocispecs.History, ref cache.ImmutableRef, opts *ImageCommitOpts, _ session.Group) (*solver.Remote, []ocispecs.History, error) {
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypes)
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypesEnabled())
|
||||
return remote, history, nil
|
||||
}
|
||||
@@ -19,7 +19,7 @@ import (
|
||||
// metadata of filesystem view for the entire image.
|
||||
func patchImageLayers(ctx context.Context, remote *solver.Remote, history []ocispecs.History, ref cache.ImmutableRef, opts *ImageCommitOpts, sg session.Group) (*solver.Remote, []ocispecs.History, error) {
|
||||
if opts.RefCfg.Compression.Type != compression.Nydus {
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypes)
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypesEnabled())
|
||||
return remote, history, nil
|
||||
}
|
||||
|
||||
@@ -29,6 +29,6 @@ func patchImageLayers(ctx context.Context, remote *solver.Remote, history []ocis
|
||||
}
|
||||
remote.Descriptors = append(remote.Descriptors, *desc)
|
||||
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypes)
|
||||
remote, history = normalizeLayersAndHistory(ctx, remote, history, ref, opts.OCITypesEnabled())
|
||||
return remote, history, nil
|
||||
}
|
||||
@@ -69,6 +69,9 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session
|
||||
if _, ok := inp.Metadata[exptypes.ExporterPlatformsKey]; len(inp.Refs) > 0 && !ok {
|
||||
return nil, errors.Errorf("unable to export multiple refs, missing platforms mapping")
|
||||
}
|
||||
if err := opts.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if compatibilityVersion == compat.CompatibilityVersion013 && opts.RefCfg.Compression.Type == compression.Zstd {
|
||||
feature := fmt.Sprintf("%s exporter compression=%s", exporterType, opts.RefCfg.Compression.Type.String())
|
||||
return nil, solvererrdefs.NewUnsupportedCompatibilityFeatureError(compatibilityVersion, feature)
|
||||
@@ -113,14 +116,14 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session
|
||||
return nil, errors.Errorf("invalid annotation: no platform %s found in source", pk)
|
||||
}
|
||||
}
|
||||
if len(a.Index)+len(a.IndexDescriptor)+len(a.ManifestDescriptor) > 0 {
|
||||
opts.EnableOCITypes(ctx, "annotations")
|
||||
if !opts.OCITypesEnabled() && len(a.Index)+len(a.IndexDescriptor)+len(a.ManifestDescriptor) > 0 {
|
||||
return nil, errors.New("cannot export annotations with \"oci-mediatypes=false\"")
|
||||
}
|
||||
}
|
||||
|
||||
if !isMap {
|
||||
if len(ps.Platforms) > 1 {
|
||||
return nil, errors.Errorf("cannot export multiple platforms without multi-platform enabled")
|
||||
return nil, errors.New("cannot export multiple platforms without multi-platform enabled")
|
||||
}
|
||||
|
||||
var ref cache.ImmutableRef
|
||||
@@ -201,8 +204,8 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session
|
||||
return mfstDesc, nil
|
||||
}
|
||||
|
||||
if len(inp.Attestations) > 0 {
|
||||
opts.EnableOCITypes(ctx, "attestations")
|
||||
if !opts.OCITypesEnabled() && len(inp.Attestations) > 0 {
|
||||
return nil, errors.New("cannot export attestations with \"oci-mediatypes=false\"")
|
||||
}
|
||||
|
||||
refs := make([]cache.ImmutableRef, 0, len(inp.Refs))
|
||||
@@ -237,7 +240,7 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session
|
||||
},
|
||||
}
|
||||
|
||||
if !opts.OCITypes {
|
||||
if !opts.OCITypesEnabled() {
|
||||
idx.MediaType = images.MediaTypeDockerSchema2ManifestList
|
||||
}
|
||||
|
||||
@@ -514,7 +517,7 @@ func (ic *ImageWriter) commitDistributionManifest(ctx context.Context, opts *Ima
|
||||
)
|
||||
|
||||
// Use docker media types for older Docker versions and registries
|
||||
if !opts.OCITypes {
|
||||
if !opts.OCITypesEnabled() {
|
||||
manifestType = images.MediaTypeDockerSchema2Manifest
|
||||
configType = images.MediaTypeDockerSchema2Config
|
||||
}
|
||||
@@ -537,7 +540,7 @@ func (ic *ImageWriter) commitDistributionManifest(ctx context.Context, opts *Ima
|
||||
}
|
||||
|
||||
for i, desc := range remote.Descriptors {
|
||||
desc.Annotations = RemoveInternalLayerAnnotations(desc.Annotations, opts.OCITypes)
|
||||
desc.Annotations = RemoveInternalLayerAnnotations(desc.Annotations, opts.OCITypesEnabled())
|
||||
mfst.Layers = append(mfst.Layers, desc)
|
||||
labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i+1)] = desc.Digest.String()
|
||||
}
|
||||
@@ -584,7 +587,7 @@ func (ic *ImageWriter) commitAttestationsManifest(ctx context.Context, opts *Ima
|
||||
manifestType = ocispecs.MediaTypeImageManifest
|
||||
configType = ocispecs.MediaTypeImageConfig
|
||||
)
|
||||
if !opts.OCITypes {
|
||||
if !opts.OCITypesEnabled() {
|
||||
manifestType = images.MediaTypeDockerSchema2Manifest
|
||||
configType = images.MediaTypeDockerSchema2Config
|
||||
}
|
||||
@@ -650,7 +653,7 @@ func (ic *ImageWriter) commitAttestationsManifest(ctx context.Context, opts *Ima
|
||||
"containerd.io/gc.ref.content.0": configDesc.Digest.String(),
|
||||
}
|
||||
for i, desc := range layers {
|
||||
desc.Annotations = RemoveInternalLayerAnnotations(desc.Annotations, opts.OCITypes)
|
||||
desc.Annotations = RemoveInternalLayerAnnotations(desc.Annotations, opts.OCITypesEnabled())
|
||||
mfst.Layers = append(mfst.Layers, desc)
|
||||
labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i+1)] = desc.Digest.String()
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ func New(opt Opt) (exporter.Exporter, error) {
|
||||
}
|
||||
|
||||
func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) {
|
||||
ociTypes := e.opt.Variant == VariantOCI
|
||||
i := &imageExporterInstance{
|
||||
imageExporter: e,
|
||||
id: id,
|
||||
@@ -70,7 +71,7 @@ func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]stri
|
||||
RefCfg: cacheconfig.RefConfig{
|
||||
Compression: compression.New(compression.Default),
|
||||
},
|
||||
OCITypes: e.opt.Variant == VariantOCI,
|
||||
OCITypes: &ociTypes,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,8 @@ import (
|
||||
const (
|
||||
CompatibilityVersion013 = 10
|
||||
CompatibilityVersion015 = 20
|
||||
CompatibilityVersionCurrent = CompatibilityVersion015
|
||||
CompatibilityVersion031 = 30
|
||||
CompatibilityVersionCurrent = CompatibilityVersion031
|
||||
)
|
||||
|
||||
// JobValueKey is the key used to store the compatibility version on a solver
|
||||
@@ -19,6 +20,7 @@ const JobValueKey = "llb.compatibilityversion"
|
||||
var supportedCompatibilityVersions = []int{
|
||||
CompatibilityVersion013,
|
||||
CompatibilityVersion015,
|
||||
CompatibilityVersion031,
|
||||
}
|
||||
|
||||
func SupportedCompatibilityVersions() []int {
|
||||
|
||||
@@ -7,13 +7,13 @@ import (
|
||||
)
|
||||
|
||||
func TestSupportedCompatibilityVersions(t *testing.T) {
|
||||
require.Equal(t, []int{10, 20}, SupportedCompatibilityVersions())
|
||||
require.Equal(t, 20, CompatibilityVersionCurrent)
|
||||
require.Equal(t, []int{10, 20, 30}, SupportedCompatibilityVersions())
|
||||
require.Equal(t, 30, CompatibilityVersionCurrent)
|
||||
}
|
||||
|
||||
func TestValidateCompatibilityVersion(t *testing.T) {
|
||||
require.NoError(t, ValidateCompatibilityVersion(CompatibilityVersion013))
|
||||
require.NoError(t, ValidateCompatibilityVersion(CompatibilityVersionCurrent))
|
||||
require.ErrorContains(t, ValidateCompatibilityVersion(11), "unsupported compatibility-version 11")
|
||||
require.ErrorContains(t, ValidateCompatibilityVersion(30), "upgrade buildkit")
|
||||
require.ErrorContains(t, ValidateCompatibilityVersion(40), "upgrade buildkit")
|
||||
}
|
||||
@@ -75,10 +75,6 @@ func (c Config) SetLevel(l int) Config {
|
||||
return c
|
||||
}
|
||||
|
||||
const (
|
||||
mediaTypeDockerSchema2LayerZstd = images.MediaTypeDockerSchema2Layer + ".zstd"
|
||||
)
|
||||
|
||||
var Default = Gzip
|
||||
|
||||
func parse(t string) (Type, error) {
|
||||
@@ -191,8 +187,8 @@ var toDockerLayerType = map[string]string{
|
||||
images.MediaTypeDockerSchema2LayerForeignGzip: images.MediaTypeDockerSchema2LayerForeignGzip,
|
||||
ocispecs.MediaTypeImageLayerNonDistributable: images.MediaTypeDockerSchema2LayerForeign, //nolint:staticcheck // ignore SA1019: Non-distributable layers are deprecated, and not recommended for future use.
|
||||
ocispecs.MediaTypeImageLayerNonDistributableGzip: images.MediaTypeDockerSchema2LayerForeignGzip, //nolint:staticcheck // ignore SA1019: Non-distributable layers are deprecated, and not recommended for future use.
|
||||
ocispecs.MediaTypeImageLayerZstd: mediaTypeDockerSchema2LayerZstd,
|
||||
mediaTypeDockerSchema2LayerZstd: mediaTypeDockerSchema2LayerZstd,
|
||||
ocispecs.MediaTypeImageLayerZstd: images.MediaTypeDockerSchema2LayerZstd,
|
||||
images.MediaTypeDockerSchema2LayerZstd: images.MediaTypeDockerSchema2LayerZstd,
|
||||
}
|
||||
|
||||
var toOCILayerType = map[string]string{
|
||||
@@ -206,7 +202,7 @@ var toOCILayerType = map[string]string{
|
||||
images.MediaTypeDockerSchema2LayerForeign: ocispecs.MediaTypeImageLayerNonDistributable, //nolint:staticcheck // ignore SA1019: Non-distributable layers are deprecated, and not recommended for future use.
|
||||
images.MediaTypeDockerSchema2LayerForeignGzip: ocispecs.MediaTypeImageLayerNonDistributableGzip, //nolint:staticcheck // ignore SA1019: Non-distributable layers are deprecated, and not recommended for future use.
|
||||
ocispecs.MediaTypeImageLayerZstd: ocispecs.MediaTypeImageLayerZstd,
|
||||
mediaTypeDockerSchema2LayerZstd: ocispecs.MediaTypeImageLayerZstd,
|
||||
images.MediaTypeDockerSchema2LayerZstd: ocispecs.MediaTypeImageLayerZstd,
|
||||
}
|
||||
|
||||
func convertLayerMediaType(ctx context.Context, mediaType string, oci bool) string {
|
||||
|
||||
@@ -39,7 +39,7 @@ type winApplier struct {
|
||||
func (s *winApplier) Apply(ctx context.Context, desc ocispecs.Descriptor, mounts []mount.Mount, opts ...diff.ApplyOpt) (d ocispecs.Descriptor, err error) {
|
||||
// HACK:, containerd doesn't know about vnd.docker.image.rootfs.diff.tar.zstd, but that
|
||||
// media type is compatible w/ the oci type, so just lie and say it's the oci type
|
||||
if desc.MediaType == images.MediaTypeDockerSchema2Layer+".zstd" {
|
||||
if desc.MediaType == images.MediaTypeDockerSchema2LayerZstd {
|
||||
desc.MediaType = ocispecs.MediaTypeImageLayerZstd
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user