exporter: add compatibility version 30

Add compatibility-version 30 for the new OCI media type default while keeping
version 20 pinned to the historical image exporter behavior through v0.31.x.

Track omitted oci-mediatypes separately from explicit false, add v30
compatibility goldens, and document the supported compatibility versions.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi committed 2026-06-03 08:52:37 -07:00
1 parent c4ce866e0f
commit 6147354ae5
25 files changed
+428 -26

No files matched your search

@@ -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"]}}
@@ -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
View File
@@ -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`
+9 -1
View File
@@ -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"
@@ -77,7 +78,6 @@ func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]stri
RefCfg: cacheconfig.RefConfig{
Compression: compression.New(compression.Default),
},
OCITypes: true,
ForceInlineAttestations: true,
},
store: true,
@@ -233,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 {
@@ -578,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,
+29 -7
View File
@@ -14,7 +14,7 @@ import (
type ImageCommitOpts struct {
ImageName string
RefCfg cacheconfig.RefConfig
OCITypes bool
OCITypes *bool
OCIArtifact bool
Annotations AnnotationsGroup
Epoch *epoch.Epoch
@@ -47,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 = parseBool(&c.OCITypes, k, v)
var b bool
err = parseBool(&b, k, v)
c.OCITypes = &b
case exptypes.OptKeyOCIArtifact:
err = parseBool(&c.OCIArtifact, k, v)
case exptypes.OptKeyForceInlineAttestations:
@@ -65,11 +67,8 @@ func (c *ImageCommitOpts) Load(ctx context.Context, opt map[string]string) (map[
}
}
if c.RefCfg.Compression.Type.OnlySupportOCITypes() && !c.OCITypes {
return nil, errors.Errorf("exporter option \"compression=%s\" conflicts with \"oci-mediatypes=false\"", c.RefCfg.Compression.Type)
}
if c.OCIArtifact && !c.OCITypes {
return nil, errors.New("exporter option \"oci-artifact=true\" conflicts with \"oci-mediatypes=false\"")
if err := c.Validate(); err != nil {
return nil, err
}
c.Annotations = c.Annotations.Merge(as)
@@ -77,6 +76,29 @@ func (c *ImageCommitOpts) Load(ctx context.Context, opt map[string]string) (map[
return rest, nil
}
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
}
func (c *ImageCommitOpts) SetOCITypesDefault(v bool) {
if c.OCITypes == nil {
c.OCITypes = &v
}
}
func (c *ImageCommitOpts) OCITypesEnabled() bool {
return c.OCITypes != nil && *c.OCITypes
}
func parseBool(dest *bool, key string, value string) error {
b, err := strconv.ParseBool(value)
if err != nil {
+1 -1
View File
@@ -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
}
+2 -2
View File
@@ -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
}
+10 -7
View File
@@ -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,7 +116,7 @@ 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 !opts.OCITypes && len(a.Index)+len(a.IndexDescriptor)+len(a.ManifestDescriptor) > 0 {
if !opts.OCITypesEnabled() && len(a.Index)+len(a.IndexDescriptor)+len(a.ManifestDescriptor) > 0 {
return nil, errors.New("cannot export annotations with \"oci-mediatypes=false\"")
}
}
@@ -201,7 +204,7 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session
return mfstDesc, nil
}
if !opts.OCITypes && len(inp.Attestations) > 0 {
if !opts.OCITypesEnabled() && len(inp.Attestations) > 0 {
return nil, errors.New("cannot export attestations with \"oci-mediatypes=false\"")
}
@@ -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()
}
+2 -1
View File
@@ -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,
},
}
+3 -1
View File
@@ -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 {
+3 -3
View File
@@ -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")
}