Skip to content

Commit ab92e64

Browse files
committed
remove experimental features.
1 parent 367479d commit ab92e64

10 files changed

Lines changed: 28 additions & 127 deletions

File tree

docs/apko_file.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ layer-annotations:
100100
layering:
101101
strategy: origin
102102
budget: 10
103-
auto-annotate: true
104103
```
105104

106105
Details of each field can be found below.
@@ -275,9 +274,5 @@ It contains the following children:
275274

276275
- `strategy`: The strategy to employ (currently, only "origin" is valid).
277276
- `budget`: The number of additional layers apko will use for layering.
278-
- `auto-annotate`: When set to `true`, automatically generates per-layer annotations with package
279-
metadata using the `dev.chainguard.layer.packages` key. Each layer's annotation lists the
280-
`name=version` pairs of all packages in that layer. Only meaningful when a layering strategy is
281-
configured. This is opt-in because it changes the manifest digest.
282277

283278
See [layering.md](layering.md) for more information.

internal/cli/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ func buildImageComponents(ctx context.Context, workDir string, archs []types.Arc
274274
if err != nil {
275275
return fmt.Errorf("new build for arch %s: %w", arch, err)
276276
}
277-
layers, perLayerAnnotations, err := bc.BuildLayers(ctx)
277+
layers, err := bc.BuildLayers(ctx)
278278
if err != nil {
279279
return fmt.Errorf("building %q layer: %w", arch, err)
280280
}
@@ -291,7 +291,7 @@ func buildImageComponents(ctx context.Context, workDir string, archs []types.Arc
291291
return fmt.Errorf("failed to determine build date epoch: %w", err)
292292
}
293293

294-
img, err := oci.BuildImageFromLayers(ctx, bc.BaseImage(), layers, perLayerAnnotations, bc.ImageConfiguration(), bde, bc.Arch())
294+
img, err := oci.BuildImageFromLayers(ctx, bc.BaseImage(), layers, bc.ImageConfiguration(), bde, bc.Arch())
295295
if err != nil {
296296
return fmt.Errorf("failed to build OCI image for %q: %w", arch, err)
297297
}

pkg/build/build.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ func (bc *Context) BuildLayer(ctx context.Context) (string, v1.Layer, error) {
141141
}
142142

143143
// BuildLayers is like BuildLayer but has the potential to return multiple layers.
144-
// The second return value contains per-layer annotations (may be nil).
145-
func (bc *Context) BuildLayers(ctx context.Context) ([]v1.Layer, []map[string]string, error) {
144+
func (bc *Context) BuildLayers(ctx context.Context) ([]v1.Layer, error) {
146145
ctx, span := otel.Tracer("apko").Start(ctx, "BuildLayers")
147146
defer span.End()
148147

@@ -152,10 +151,10 @@ func (bc *Context) BuildLayers(ctx context.Context) ([]v1.Layer, []map[string]st
152151
if bc.ic.Layering == nil || (bc.ic.Layering.Strategy == "" && bc.ic.Layering.Budget == 0) {
153152
_, layer, err := bc.BuildLayer(ctx)
154153
if err != nil {
155-
return nil, nil, err
154+
return nil, err
156155
}
157156

158-
return []v1.Layer{layer}, nil, nil
157+
return []v1.Layer{layer}, nil
159158
}
160159

161160
return bc.buildLayers(ctx)

pkg/build/build_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestBuildLayers(t *testing.T) {
4242
t.Fatal(err)
4343
}
4444

45-
layers, _, err := bc.BuildLayers(ctx)
45+
layers, err := bc.BuildLayers(ctx)
4646
if err != nil {
4747
t.Fatal(err)
4848
}
@@ -64,7 +64,7 @@ func TestBuildLayersWithEmptyLayering(t *testing.T) {
6464
}
6565

6666
// Should build successfully and return a single layer
67-
layers, _, err := bc.BuildLayers(ctx)
67+
layers, err := bc.BuildLayers(ctx)
6868
if err != nil {
6969
t.Fatal(err)
7070
}

pkg/build/layers.go

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"os"
2626
"path"
2727
"slices"
28-
"strings"
2928

3029
"chainguard.dev/apko/pkg/apk/apk"
3130
apkfs "chainguard.dev/apko/pkg/apk/fs"
@@ -34,21 +33,21 @@ import (
3433
v1 "github.com/google/go-containerregistry/pkg/v1"
3534
)
3635

37-
func (bc *Context) buildLayers(ctx context.Context) ([]v1.Layer, []map[string]string, error) {
36+
func (bc *Context) buildLayers(ctx context.Context) ([]v1.Layer, error) {
3837
log := clog.FromContext(ctx)
3938

4039
if strategy := bc.ic.Layering.Strategy; strategy != "origin" {
41-
return nil, nil, fmt.Errorf("unrecognized layering strategy %q", strategy)
40+
return nil, fmt.Errorf("unrecognized layering strategy %q", strategy)
4241
}
4342

4443
if bc.ic.Contents.BaseImage != nil {
45-
return nil, nil, fmt.Errorf("layering with %q is unsupported", "baseimage")
44+
return nil, fmt.Errorf("layering with %q is unsupported", "baseimage")
4645
}
4746

4847
// Build a single fs.FS, the normal way (this writes to bc.fs).
4948
diffs, err := bc.buildImage(ctx)
5049
if err != nil {
51-
return nil, nil, fmt.Errorf("building filesystem: %w", err)
50+
return nil, fmt.Errorf("building filesystem: %w", err)
5251
}
5352

5453
pkgs := make([]*apk.Package, 0, len(diffs))
@@ -67,13 +66,13 @@ func (bc *Context) buildLayers(ctx context.Context) ([]v1.Layer, []map[string]st
6766
//
6867
// TODO: Clean this up when time permits.
6968
if err := bc.postBuildSetApk(ctx); err != nil {
70-
return nil, nil, err
69+
return nil, err
7170
}
7271

7372
// Use our layering strategy to partition packages into a set of Budget groups.
7473
groups, err := groupByOriginAndSize(pkgs, bc.ic.Layering.Budget)
7574
if err != nil {
76-
return nil, nil, fmt.Errorf("grouping packages: %w", err)
75+
return nil, fmt.Errorf("grouping packages: %w", err)
7776
}
7877
log.Infof("Building %d layers with budget %d", len(groups), bc.ic.Layering.Budget)
7978

@@ -88,34 +87,10 @@ func (bc *Context) buildLayers(ctx context.Context) ([]v1.Layer, []map[string]st
8887
// Then partition that single fs.FS into multiple layers based on our layering strategy.
8988
layers, err := splitLayers(ctx, bc.fs, groups, pkgToDiff, bc.o.TempDir())
9089
if err != nil {
91-
return nil, nil, err
92-
}
93-
94-
// Generate per-layer annotations when auto-annotate is enabled.
95-
var perLayerAnnotations []map[string]string
96-
if bc.ic.Layering.AutoAnnotate {
97-
perLayerAnnotations = autoAnnotateLayers(groups)
90+
return nil, err
9891
}
9992

100-
return layers, perLayerAnnotations, nil
101-
}
102-
103-
// autoAnnotateLayers generates per-layer annotation maps from package groups.
104-
// The returned slice has one entry per group (package layer); the top layer
105-
// (appended by splitLayers) is not included and gets no auto-annotations.
106-
func autoAnnotateLayers(groups []*group) []map[string]string {
107-
annotations := make([]map[string]string, len(groups))
108-
for i, g := range groups {
109-
names := make([]string, 0, len(g.pkgs))
110-
for _, pkg := range g.pkgs {
111-
names = append(names, pkg.Name+"="+pkg.Version)
112-
}
113-
slices.Sort(names)
114-
annotations[i] = map[string]string{
115-
"dev.chainguard.layer.packages": strings.Join(names, ","),
116-
}
117-
}
118-
return annotations
93+
return layers, nil
11994
}
12095

12196
func replacesGroup(rep string, g *group) (bool, error) {

pkg/build/layers_test.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -215,32 +215,6 @@ func TestAlignStacks(t *testing.T) {
215215
}
216216
}
217217

218-
func TestAutoAnnotateLayers(t *testing.T) {
219-
pkg1 := &apk.Package{Name: "glibc", Version: "2.38-r14"}
220-
pkg2 := &apk.Package{Name: "glibc-locale-posix", Version: "2.38-r14"}
221-
pkg3 := &apk.Package{Name: "crane", Version: "0.19.0-r1"}
222-
223-
groups := []*group{
224-
{pkgs: []*apk.Package{pkg1, pkg2}},
225-
{pkgs: []*apk.Package{pkg3}},
226-
}
227-
228-
got := autoAnnotateLayers(groups)
229-
if len(got) != 2 {
230-
t.Fatalf("expected 2 annotation maps, got %d", len(got))
231-
}
232-
233-
want0 := "glibc-locale-posix=2.38-r14,glibc=2.38-r14"
234-
if got[0]["dev.chainguard.layer.packages"] != want0 {
235-
t.Errorf("layer 0 packages: got %q, want %q", got[0]["dev.chainguard.layer.packages"], want0)
236-
}
237-
238-
want1 := "crane=0.19.0-r1"
239-
if got[1]["dev.chainguard.layer.packages"] != want1 {
240-
t.Errorf("layer 1 packages: got %q, want %q", got[1]["dev.chainguard.layer.packages"], want1)
241-
}
242-
}
243-
244218
// NB: this only cares about path
245219
func compareStacks(a, b []*file) error {
246220
if len(a) != len(b) {

pkg/build/oci/image.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ import (
3838
)
3939

4040
func BuildImageFromLayer(ctx context.Context, baseImage v1.Image, layer v1.Layer, oic types.ImageConfiguration, created time.Time, arch types.Architecture) (v1.Image, error) {
41-
return BuildImageFromLayers(ctx, baseImage, []v1.Layer{layer}, nil, oic, created, arch)
41+
return BuildImageFromLayers(ctx, baseImage, []v1.Layer{layer}, oic, created, arch)
4242
}
4343

44-
func BuildImageFromLayers(ctx context.Context, baseImage v1.Image, layers []v1.Layer, perLayerAnnotations []map[string]string, oic types.ImageConfiguration, created time.Time, arch types.Architecture) (v1.Image, error) {
44+
func BuildImageFromLayers(ctx context.Context, baseImage v1.Image, layers []v1.Layer, oic types.ImageConfiguration, created time.Time, arch types.Architecture) (v1.Image, error) {
4545
log := clog.FromContext(ctx)
4646

4747
// Create a copy to avoid modifying the original ImageConfiguration.
@@ -62,7 +62,7 @@ func BuildImageFromLayers(ctx context.Context, baseImage v1.Image, layers []v1.L
6262
}
6363

6464
adds := make([]mutate.Addendum, 0, len(layers))
65-
for i, layer := range layers {
65+
for _, layer := range layers {
6666
digest, err := layer.Digest()
6767
if err != nil {
6868
return nil, fmt.Errorf("could not calculate layer digest: %w", err)
@@ -76,16 +76,10 @@ func BuildImageFromLayers(ctx context.Context, baseImage v1.Image, layers []v1.L
7676
log.Infof("layer digest: %v", digest)
7777
log.Infof("layer diffID: %v", diffid)
7878

79-
// Build layer descriptor annotations from uniform + per-layer sources.
79+
// Apply uniform layer annotations if configured.
8080
var layerAnns map[string]string
81-
if len(ic.LayerAnnotations) > 0 || (i < len(perLayerAnnotations) && len(perLayerAnnotations[i]) > 0) {
82-
layerAnns = make(map[string]string)
83-
maps.Copy(layerAnns, ic.LayerAnnotations)
84-
if i < len(perLayerAnnotations) {
85-
maps.Copy(layerAnns, perLayerAnnotations[i])
86-
// Include layer digest only when auto-annotate is active (per-layer annotations present).
87-
layerAnns["dev.chainguard.layer.digest"] = digest.String()
88-
}
81+
if len(ic.LayerAnnotations) > 0 {
82+
layerAnns = maps.Clone(ic.LayerAnnotations)
8983
}
9084

9185
adds = append(adds, mutate.Addendum{

pkg/build/oci/image_test.go

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -174,21 +174,15 @@ func TestBuildImageFromLayersWithAnnotations(t *testing.T) {
174174
layer1 := static.NewLayer([]byte("layer1"), ggcrtypes.OCILayer)
175175
layer2 := static.NewLayer([]byte("layer2"), ggcrtypes.OCILayer)
176176

177-
digest1, err := layer1.Digest()
178-
require.NoError(t, err)
179-
digest2, err := layer2.Digest()
180-
require.NoError(t, err)
181-
182177
now := time.Now()
183178
ctx := context.Background()
184179

185180
for _, tc := range []struct {
186-
desc string
187-
cfg types.ImageConfiguration
188-
perLayerAnnotations []map[string]string
189-
wantLayerAnns []map[string]string
181+
desc string
182+
cfg types.ImageConfiguration
183+
wantLayerAnns []map[string]string
190184
}{{
191-
desc: "uniform layer annotations only",
185+
desc: "uniform layer annotations",
192186
cfg: types.ImageConfiguration{
193187
LayerAnnotations: map[string]string{
194188
"dev.chainguard.layer.source": "apko",
@@ -198,40 +192,14 @@ func TestBuildImageFromLayersWithAnnotations(t *testing.T) {
198192
{"dev.chainguard.layer.source": "apko"},
199193
{"dev.chainguard.layer.source": "apko"},
200194
},
201-
}, {
202-
desc: "per-layer annotations only",
203-
cfg: types.ImageConfiguration{},
204-
perLayerAnnotations: []map[string]string{
205-
{"dev.chainguard.layer.packages": "glibc"},
206-
{"dev.chainguard.layer.packages": "crane"},
207-
},
208-
wantLayerAnns: []map[string]string{
209-
{"dev.chainguard.layer.packages": "glibc", "dev.chainguard.layer.digest": digest1.String()},
210-
{"dev.chainguard.layer.packages": "crane", "dev.chainguard.layer.digest": digest2.String()},
211-
},
212-
}, {
213-
desc: "uniform and per-layer merged",
214-
cfg: types.ImageConfiguration{
215-
LayerAnnotations: map[string]string{
216-
"dev.chainguard.layer.source": "apko",
217-
},
218-
},
219-
perLayerAnnotations: []map[string]string{
220-
{"dev.chainguard.layer.packages": "glibc"},
221-
{"dev.chainguard.layer.packages": "crane"},
222-
},
223-
wantLayerAnns: []map[string]string{
224-
{"dev.chainguard.layer.source": "apko", "dev.chainguard.layer.packages": "glibc", "dev.chainguard.layer.digest": digest1.String()},
225-
{"dev.chainguard.layer.source": "apko", "dev.chainguard.layer.packages": "crane", "dev.chainguard.layer.digest": digest2.String()},
226-
},
227195
}, {
228196
desc: "no annotations",
229197
cfg: types.ImageConfiguration{},
230198
wantLayerAnns: []map[string]string{nil, nil},
231199
}} {
232200
t.Run(tc.desc, func(t *testing.T) {
233201
layers := []v1.Layer{layer1, layer2}
234-
img, err := BuildImageFromLayers(ctx, empty.Image, layers, tc.perLayerAnnotations, tc.cfg, now, types.ParseArchitecture(""))
202+
img, err := BuildImageFromLayers(ctx, empty.Image, layers, tc.cfg, now, types.ParseArchitecture(""))
235203
require.NoError(t, err)
236204

237205
manifest, err := img.Manifest()

pkg/build/types/schema.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,6 @@
253253
},
254254
"budget": {
255255
"type": "integer"
256-
},
257-
"auto-annotate": {
258-
"type": "boolean"
259256
}
260257
},
261258
"additionalProperties": false,

pkg/build/types/types.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,8 @@ type SBOM struct {
439439
}
440440

441441
type Layering struct {
442-
Strategy string `json:"strategy,omitempty" yaml:"strategy,omitempty"`
443-
Budget int `json:"budget,omitempty" yaml:"budget,omitempty"`
444-
AutoAnnotate bool `json:"auto-annotate,omitempty" yaml:"auto-annotate,omitempty"`
442+
Strategy string `json:"strategy,omitempty" yaml:"strategy,omitempty"`
443+
Budget int `json:"budget,omitempty" yaml:"budget,omitempty"`
445444
}
446445

447446
type AdditionalCertificateEntry struct {

0 commit comments

Comments
 (0)