...

Source file src/edge-infra.dev/pkg/f8n/warehouse/release/index.go

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

     1  package release
     2  
     3  import (
     4  	"fmt"
     5  
     6  	v1 "github.com/google/go-containerregistry/pkg/v1"
     7  	"github.com/google/go-containerregistry/pkg/v1/types"
     8  
     9  	"edge-infra.dev/pkg/f8n/warehouse/oci"
    10  	"edge-infra.dev/pkg/f8n/warehouse/pallet"
    11  )
    12  
    13  func ImageIndex(a oci.Artifact) (EdgeRelease, error) {
    14  	idx, isIdx := a.(v1.ImageIndex)
    15  	if !isIdx {
    16  		return EdgeRelease{}, fmt.Errorf("artifact could not be coerced into Image Index")
    17  	}
    18  
    19  	idxMan, err := idx.IndexManifest()
    20  	if err != nil {
    21  		return EdgeRelease{}, err
    22  	}
    23  
    24  	meta, err := metadataFromAnnotations(idxMan.Annotations)
    25  	if err != nil {
    26  		return EdgeRelease{}, err
    27  	}
    28  
    29  	pallets, err := palletsFromManifests(idx, idxMan.Manifests)
    30  	if err != nil {
    31  		return EdgeRelease{}, err
    32  	}
    33  	if len(pallets) == 0 {
    34  		dig, _ := a.Digest()
    35  		return EdgeRelease{}, fmt.Errorf("no pallets found for artifact %s", dig.Hex)
    36  	}
    37  	return New(meta, pallets), nil
    38  }
    39  
    40  func palletsFromManifests(idx v1.ImageIndex, descrs []v1.Descriptor) ([]pallet.Pallet, error) {
    41  	pallets := []pallet.Pallet{}
    42  
    43  	for _, descr := range descrs {
    44  		switch descr.MediaType {
    45  		case types.OCIImageIndex:
    46  			palletIdx, err := idx.ImageIndex(descr.Digest)
    47  			if err != nil {
    48  				return nil, err
    49  			}
    50  
    51  			p, err := pallet.New(palletIdx)
    52  			if err != nil {
    53  				return nil, err
    54  			}
    55  
    56  			pallets = append(pallets, p)
    57  		case types.OCIManifestSchema1:
    58  			palletImg, err := idx.Image(descr.Digest)
    59  			if err != nil {
    60  				return nil, err
    61  			}
    62  
    63  			p, err := pallet.New(palletImg)
    64  			if err != nil {
    65  				return nil, err
    66  			}
    67  
    68  			pallets = append(pallets, p)
    69  		default:
    70  			return nil, fmt.Errorf("unknown MediaType from remote Artifact")
    71  		}
    72  	}
    73  	return pallets, nil
    74  }
    75  

View as plain text