...
1 package pallet
2
3 import (
4 "fmt"
5
6 v1 "github.com/google/go-containerregistry/pkg/v1"
7 "github.com/google/go-containerregistry/pkg/v1/empty"
8 "github.com/google/go-containerregistry/pkg/v1/mutate"
9 "github.com/google/go-containerregistry/pkg/v1/types"
10
11 "edge-infra.dev/pkg/f8n/warehouse/oci"
12 "edge-infra.dev/pkg/f8n/warehouse/oci/layer"
13 )
14
15
16 func Image(o Options, layers ...layer.Layer) (Pallet, error) {
17 if len(layers) == 0 {
18 return nil, fmt.Errorf("pallet.Image: no layers provided")
19 }
20
21 p, err := fromOpts(o)
22 if err != nil {
23 return nil, err
24 }
25
26
27 adds := make([]mutate.Addendum, len(layers))
28 for i, l := range layers {
29 adds[i] = mutate.Addendum{Layer: l}
30 }
31
32 img, err := mutate.Append(empty.Image, adds...)
33 if err != nil {
34 return nil, err
35 }
36
37 p.Artifact = mutate.MediaType(
38 oci.Annotate(img, o.annos()...).(v1.Image), types.OCIManifestSchema1,
39 ).(oci.Artifact)
40
41 return p, nil
42 }
43
View as plain text