...
1 package clients
2
3 import (
4 "fmt"
5 "strings"
6
7 "github.com/google/go-containerregistry/pkg/name"
8
9 "edge-infra.dev/pkg/f8n/warehouse/oci"
10 "edge-infra.dev/pkg/f8n/warehouse/oci/remote"
11 )
12
13
14 type ArtifactRegistryClient interface {
15 Get(project, artifactName, artifactVersion string) (oci.Artifact, error)
16 }
17
18 type artifactRegistryClient struct {
19 registry string
20 }
21
22 func (a *artifactRegistryClient) Get(project, artifactName, artifactVersion string) (oci.Artifact, error) {
23 ref, err := name.ParseReference(
24 fmt.Sprintf("%s/%s/warehouse/%s", a.registry, project, imageString(artifactName, artifactVersion)),
25 name.StrictValidation,
26 )
27 if err != nil {
28 return nil, err
29 }
30 return remote.Get(ref)
31 }
32
33 func NewArtifactRegistryClient(registry string) *artifactRegistryClient {
34 return &artifactRegistryClient{registry: registry}
35 }
36
37
38
39
40
41 func imageString(name, version string) string {
42 if strings.Contains(version, ":") {
43
44 return fmt.Sprintf("%s@%s", name, version)
45 }
46
47 return fmt.Sprintf("%s:%s", name, version)
48 }
49
View as plain text