...

Source file src/edge-infra.dev/pkg/edge/api/clients/artifact_registry_client.go

Documentation: edge-infra.dev/pkg/edge/api/clients

     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  //go:generate mockgen -destination=../mocks/mock_artifact_registry_client.go -package=mocks edge-infra.dev/pkg/edge/api/clients ArtifactRegistryClient
    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 { //nolint: revive
    34  	return &artifactRegistryClient{registry: registry}
    35  }
    36  
    37  // imageString takes an artifact name and version, which may represent either a tag or a digest.
    38  // E.g., `sha256:dd7b3d1a41e45f867441a27bd20f88980aee2a7d7bee3a5b7e0e925aeeea1474` is a digest and
    39  // `latest` or `0.12` are tags
    40  // Returns a properly formatted image string suitable for use in a registry reference
    41  func imageString(name, version string) string {
    42  	if strings.Contains(version, ":") {
    43  		// is a digest
    44  		return fmt.Sprintf("%s@%s", name, version)
    45  	}
    46  	// is a tag
    47  	return fmt.Sprintf("%s:%s", name, version)
    48  }
    49  

View as plain text