...
1 package release
2
3 import (
4 v1 "github.com/google/go-containerregistry/pkg/v1"
5
6 "github.com/google/go-containerregistry/pkg/v1/empty"
7 gmutate "github.com/google/go-containerregistry/pkg/v1/mutate"
8 "github.com/google/go-containerregistry/pkg/v1/types"
9
10 wh "edge-infra.dev/pkg/f8n/warehouse"
11 "edge-infra.dev/pkg/f8n/warehouse/oci"
12 "edge-infra.dev/pkg/f8n/warehouse/pallet"
13 )
14
15 const (
16 ReleaseImageName = "edge-release"
17 )
18
19 var _ oci.Artifact = (*EdgeRelease)(nil)
20
21
22
23
24
25
26 type EdgeRelease struct {
27
28 oci.Artifact
29
30
31 Metadata Metadata
32
33
34 Pallets []pallet.Pallet
35 }
36
37 func New(meta Metadata, pallets []pallet.Pallet) EdgeRelease {
38 rel := &EdgeRelease{Metadata: meta, Pallets: pallets}
39 palletAddendums := buildAddendums(meta.Version, pallets)
40
41 idx := gmutate.AppendManifests(empty.Index, palletAddendums...)
42
43 rel.Artifact = gmutate.IndexMediaType(
44 oci.Annotate(idx, rel.Metadata.OCIAnnotations()).(v1.ImageIndex), types.OCIImageIndex,
45 ).(oci.Artifact)
46
47 return *rel
48 }
49
50
51
52 func buildAddendums(version string, pallets []pallet.Pallet) []gmutate.IndexAddendum {
53 palletAddendums := []gmutate.IndexAddendum{}
54 for _, pall := range pallets {
55 descrAnnos := pall.Metadata().OCIAnnotations()
56 descrAnnos[AnnotationReleaseVersion] = version
57 descrAnnos[wh.AnnotationClusterProviders] = pall.Providers().String()
58 descrAnnos[wh.AnnotationCapabilities] = pall.Capabilities().String()
59 add := gmutate.IndexAddendum{Add: pall.Unwrap(), Descriptor: v1.Descriptor{Annotations: descrAnnos}}
60 palletAddendums = append(palletAddendums, add)
61 }
62
63 return palletAddendums
64 }
65
View as plain text