Skip to content

Commit bcc1482

Browse files
committed
enable OCI artifact for attestation manifest by default
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
1 parent 78fc6dd commit bcc1482

File tree

6 files changed

+94
-17
lines changed

6 files changed

+94
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ Keys supported by image output:
284284
* `push-by-digest=true`: push unnamed image
285285
* `registry.insecure=true`: push to insecure HTTP registry
286286
* `oci-mediatypes=true`: use OCI mediatypes in configuration JSON instead of Docker's
287-
* `oci-artifact=false`: use OCI artifact format for attestations
287+
* `oci-artifact=true`: use OCI artifact format for attestations
288288
* `unpack=true`: unpack image after creation (for use with containerd)
289289
* `dangling-name-prefix=<value>`: name image with `prefix@<digest>`, used for anonymous images
290290
* `name-canonical=true`: add additional canonical name `name@<digest>`

client/client_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,7 +1300,7 @@ func testPushByDigest(t *testing.T, sb integration.Sandbox) {
13001300
require.NoError(t, err)
13011301

13021302
require.Equal(t, resp.ExporterResponse[exptypes.ExporterImageDigestKey], desc.Digest.String())
1303-
require.Equal(t, images.MediaTypeDockerSchema2Manifest, desc.MediaType)
1303+
require.Equal(t, ocispecs.MediaTypeImageManifest, desc.MediaType)
13041304
require.Greater(t, desc.Size, int64(0))
13051305
}
13061306

@@ -3848,7 +3848,7 @@ func testMultipleExporters(t *testing.T, sb integration.Sandbox) {
38483848
} else {
38493849
require.Len(t, ev.Record.Result.Results, 2)
38503850
require.Len(t, ev.Record.Exporters, 6)
3851-
require.Equal(t, images.MediaTypeDockerSchema2Manifest, ev.Record.Result.Results[0].MediaType)
3851+
require.Equal(t, ocispecs.MediaTypeImageManifest, ev.Record.Result.Results[0].MediaType)
38523852
require.Equal(t, ocispecs.MediaTypeImageManifest, ev.Record.Result.Results[1].MediaType)
38533853
}
38543854
require.Equal(t, ev.Record.Result.Results[0], ev.Record.Result.ResultDeprecated)
@@ -4874,9 +4874,9 @@ func testBuildExportWithForeignLayer(t *testing.T, sb integration.Sandbox) {
48744874
require.NoError(t, err)
48754875

48764876
require.Equal(t, 2, len(mfst.Layers))
4877-
require.Equal(t, images.MediaTypeDockerSchema2LayerForeign, mfst.Layers[0].MediaType)
4877+
require.Equal(t, ocispecs.MediaTypeImageLayerNonDistributableGzip, mfst.Layers[0].MediaType)
48784878
require.Len(t, mfst.Layers[0].URLs, 1)
4879-
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[1].MediaType)
4879+
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[1].MediaType)
48804880

48814881
rc, err := fetcher.Fetch(ctx, ocispecs.Descriptor{Digest: mfst.Layers[0].Digest, Size: mfst.Layers[0].Size})
48824882
require.NoError(t, err)
@@ -4921,9 +4921,9 @@ func testBuildExportWithForeignLayer(t *testing.T, sb integration.Sandbox) {
49214921
require.NoError(t, err)
49224922

49234923
require.Equal(t, 2, len(mfst.Layers))
4924-
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[0].MediaType)
4924+
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[0].MediaType)
49254925
require.Len(t, mfst.Layers[0].URLs, 0)
4926-
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[1].MediaType)
4926+
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[1].MediaType)
49274927

49284928
rc, err := fetcher.Fetch(ctx, ocispecs.Descriptor{Digest: mfst.Layers[0].Digest, Size: mfst.Layers[0].Size})
49294929
require.NoError(t, err)
@@ -4988,7 +4988,7 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
49884988
mfst, err := images.Manifest(ctx, client.ContentStore(), img.Target(), nil)
49894989
require.NoError(t, err)
49904990
require.Equal(t, 1, len(mfst.Layers))
4991-
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[0].MediaType)
4991+
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[0].MediaType)
49924992
}
49934993

49944994
// new layer with gzip compression
@@ -5057,8 +5057,8 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
50575057
err = json.Unmarshal(dt, &mfst)
50585058
require.NoError(t, err)
50595059
require.Equal(t, 2, len(mfst.Layers))
5060-
require.Equal(t, images.MediaTypeDockerSchema2Layer, mfst.Layers[0].MediaType)
5061-
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
5060+
require.Equal(t, ocispecs.MediaTypeImageLayer, mfst.Layers[0].MediaType)
5061+
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
50625062

50635063
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
50645064
require.NoError(t, err)
@@ -5102,8 +5102,8 @@ func testBuildExportWithUncompressed(t *testing.T, sb integration.Sandbox) {
51025102
err = json.Unmarshal(dt, &mfst)
51035103
require.NoError(t, err)
51045104
require.Equal(t, 2, len(mfst.Layers))
5105-
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[0].MediaType)
5106-
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
5105+
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[0].MediaType)
5106+
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
51075107

51085108
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
51095109
require.NoError(t, err)
@@ -5464,10 +5464,10 @@ func testBuildPushAndValidate(t *testing.T, sb integration.Sandbox) {
54645464
err = json.Unmarshal(dt, &mfst)
54655465
require.NoError(t, err)
54665466

5467-
require.Equal(t, images.MediaTypeDockerSchema2Manifest, mfst.MediaType)
5467+
require.Equal(t, ocispecs.MediaTypeImageManifest, mfst.MediaType)
54685468
require.Equal(t, 3, len(mfst.Layers))
5469-
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[0].MediaType)
5470-
require.Equal(t, images.MediaTypeDockerSchema2LayerGzip, mfst.Layers[1].MediaType)
5469+
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[0].MediaType)
5470+
require.Equal(t, ocispecs.MediaTypeImageLayerGzip, mfst.Layers[1].MediaType)
54715471

54725472
dt, err = content.ReadBlob(ctx, img.ContentStore(), ocispecs.Descriptor{Digest: mfst.Layers[0].Digest})
54735473
require.NoError(t, err)
@@ -9838,7 +9838,7 @@ func testExportAnnotationsMediaTypes(t *testing.T, sb integration.Sandbox) {
98389838
require.Equal(t, "b", imgs.Images[0].Manifest.Annotations["a"])
98399839
require.Equal(t, "d", imgs2.Index.Annotations["c"])
98409840

9841-
require.Equal(t, images.MediaTypeDockerSchema2ManifestList, imgs.Index.MediaType)
9841+
require.Equal(t, ocispecs.MediaTypeImageIndex, imgs.Index.MediaType)
98429842
require.Equal(t, ocispecs.MediaTypeImageIndex, imgs2.Index.MediaType)
98439843
}
98449844

exporter/containerimage/export.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]stri
7777
RefCfg: cacheconfig.RefConfig{
7878
Compression: compression.New(compression.Default),
7979
},
80+
OCIArtifact: true,
8081
ForceInlineAttestations: true,
8182
},
8283
store: true,
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package containerimage
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/moby/buildkit/exporter/containerimage/exptypes"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestResolveDefaultsOCIArtifactEnabled(t *testing.T) {
12+
exp, err := New(Opt{})
13+
require.NoError(t, err)
14+
15+
instAny, err := exp.Resolve(context.Background(), 0, map[string]string{})
16+
require.NoError(t, err)
17+
18+
inst, ok := instAny.(*imageExporterInstance)
19+
require.True(t, ok)
20+
require.True(t, inst.opts.OCIArtifact)
21+
require.True(t, inst.opts.ForceInlineAttestations)
22+
}
23+
24+
func TestResolveAllowsDisablingOCIArtifact(t *testing.T) {
25+
exp, err := New(Opt{})
26+
require.NoError(t, err)
27+
28+
instAny, err := exp.Resolve(context.Background(), 0, map[string]string{
29+
string(exptypes.OptKeyOCIArtifact): "false",
30+
})
31+
require.NoError(t, err)
32+
33+
inst, ok := instAny.(*imageExporterInstance)
34+
require.True(t, ok)
35+
require.False(t, inst.opts.OCIArtifact)
36+
}
37+

exporter/oci/export.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]stri
7070
RefCfg: cacheconfig.RefConfig{
7171
Compression: compression.New(compression.Default),
7272
},
73-
OCITypes: e.opt.Variant == VariantOCI,
73+
OCIArtifact: true,
74+
OCITypes: e.opt.Variant == VariantOCI,
7475
},
7576
}
7677

exporter/oci/export_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package oci
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/moby/buildkit/exporter/containerimage/exptypes"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestResolveDefaultsOCIArtifactEnabled(t *testing.T) {
12+
for _, variant := range []ExporterVariant{VariantOCI, VariantDocker} {
13+
exp, err := New(Opt{Variant: variant})
14+
require.NoError(t, err)
15+
16+
instAny, err := exp.Resolve(context.Background(), 0, map[string]string{})
17+
require.NoError(t, err)
18+
19+
inst, ok := instAny.(*imageExporterInstance)
20+
require.True(t, ok)
21+
require.True(t, inst.opts.OCIArtifact)
22+
}
23+
}
24+
25+
func TestResolveAllowsDisablingOCIArtifact(t *testing.T) {
26+
exp, err := New(Opt{Variant: VariantDocker})
27+
require.NoError(t, err)
28+
29+
instAny, err := exp.Resolve(context.Background(), 0, map[string]string{
30+
string(exptypes.OptKeyOCIArtifact): "false",
31+
})
32+
require.NoError(t, err)
33+
34+
inst, ok := instAny.(*imageExporterInstance)
35+
require.True(t, ok)
36+
require.False(t, inst.opts.OCIArtifact)
37+
}
38+

0 commit comments

Comments
 (0)