...

Source file src/edge-infra.dev/pkg/f8n/warehouse/pallet/image.go

Documentation: edge-infra.dev/pkg/f8n/warehouse/pallet

     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  // Image creates a new Pallet that is an OCI v1.Image
    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  	// TODO: use AppendLayers instead...
    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