// Package name implements functionality for parsing package names from OCI // artifacts and working with them. package name import ( "fmt" "github.com/google/go-containerregistry/pkg/name" v1 "github.com/google/go-containerregistry/pkg/v1" wh "edge-infra.dev/pkg/f8n/warehouse" "edge-infra.dev/pkg/f8n/warehouse/lift" "edge-infra.dev/pkg/f8n/warehouse/oci" ) // Type aliases from ggcr type Reference = name.Reference // TODO(aw185176): FromIndex, tests // FromImage reads the Warehouse package name from the input image func FromImage(img v1.Image) (string, error) { return FromArtifact(img) } // FromArtifact reads the Warehouse package name from the input Artifact func FromArtifact(a oci.Artifact) (string, error) { annos, err := oci.Annotations(a) switch { case err != nil: return "", err case annos[wh.AnnotationName] == "": return "", fmt.Errorf("%w", oci.ErrInvalidArtifact) default: return annos[wh.AnnotationName], nil } } // Tag creates a tag with weak validation, defaulting to the local // registry alias for Warehouse packages if not set. Default options can be // overridden by passing name.Options func Tag(t string, opts ...name.Option) (name.Tag, error) { return name.NewTag(t, append([]name.Option{ name.WeakValidation, name.WithDefaultRegistry(lift.LocalRegistryAlias), name.WithDefaultTag("latest"), }, opts..., )..., ) } // Digest creates a digest with weak validation, defaulting to the local // registry alias for Warehouse packages if not set. Default options can be // overridden by passing name.Options func Digest(d string, opts ...name.Option) (name.Digest, error) { return name.NewDigest(d, append([]name.Option{ name.WeakValidation, name.WithDefaultRegistry(lift.LocalRegistryAlias), }, opts..., )..., ) } // TruncatedDigest truncates the result of digest.String() to omit "sha256" and // capture 13 characters of the actual digest value. func TruncatedDigest(d string) string { return d[7:20] }