package pallet import ( "fmt" v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/empty" "github.com/google/go-containerregistry/pkg/v1/mutate" "github.com/google/go-containerregistry/pkg/v1/types" "edge-infra.dev/pkg/f8n/warehouse/oci" "edge-infra.dev/pkg/f8n/warehouse/oci/layer" ) // Image creates a new Pallet that is an OCI v1.Image func Image(o Options, layers ...layer.Layer) (Pallet, error) { if len(layers) == 0 { return nil, fmt.Errorf("pallet.Image: no layers provided") } p, err := fromOpts(o) if err != nil { return nil, err } // TODO: use AppendLayers instead... adds := make([]mutate.Addendum, len(layers)) for i, l := range layers { adds[i] = mutate.Addendum{Layer: l} } img, err := mutate.Append(empty.Image, adds...) if err != nil { return nil, err } p.Artifact = mutate.MediaType( oci.Annotate(img, o.annos()...).(v1.Image), types.OCIManifestSchema1, ).(oci.Artifact) return p, nil }