ecrpublic

package
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2026 License: MIT Imports: 24 Imported by: 0

README

Ecrpublic

Parity grade: A · SDK aws-sdk-go-v2/service/ecrpublic@v1.47.1 · last audited 2026-10-05 (5bb0d02ee)

Coverage

Metric Value
PARITY entries audited 23 (23 ok)
Feature families 6 (6 ok)
Known gaps none
Structural gaps (can't be emulated) 3
Deferred items 0
Resource leaks clean
Structural gaps

These do not block an A grade — no implementation could produce real data here because the underlying data source cannot exist in an emulator.

  • No Docker Registry v2 data plane: a docker push/pull addresses the repositoryUri host (public.ecr.aws//), which needs public DNS and TLS the emulator cannot own, and /v2/ on the emulator port is already claimed by services/ecr, whose embedded distribution registry is itself not coupled to its control-plane state. The layer/image control-plane ops are real (bytes buffered and SHA256-verified, manifests validated, tags tracked) but nothing serves blobs over /v2.
  • GetAuthorizationToken returns a stable AWS:password credential: with no registry to authenticate against there is nothing for a docker login to be checked by (same convention as services/ecr).
  • verified / marketplaceCertified badges are always false: they are set by the AWS Marketplace vendor-verification workflow, a human process no emulator can drive.

More

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrRepositoryNotFound       = awserr.New("RepositoryNotFoundException", awserr.ErrNotFound)
	ErrRepositoryAlreadyExists  = awserr.New("RepositoryAlreadyExistsException", awserr.ErrAlreadyExists)
	ErrRepositoryNotEmpty       = awserr.New("RepositoryNotEmptyException", awserr.ErrConflict)
	ErrRepositoryPolicyNotFound = awserr.New("RepositoryPolicyNotFoundException", awserr.ErrNotFound)
	ErrRegistryNotFound         = awserr.New("RegistryNotFoundException", awserr.ErrNotFound)
	ErrInvalidParameter         = awserr.New("InvalidParameterException", awserr.ErrInvalidParameter)
	ErrTooManyTags              = awserr.New("TooManyTagsException", awserr.ErrInvalidParameter)
	ErrInvalidTagParameter      = awserr.New("InvalidTagParameterException", awserr.ErrInvalidParameter)

	ErrUploadNotFound     = awserr.New("UploadNotFoundException", awserr.ErrNotFound)
	ErrEmptyUpload        = awserr.New("EmptyUploadException", awserr.ErrInvalidParameter)
	ErrLayerPartTooSmall  = awserr.New("LayerPartTooSmallException", awserr.ErrInvalidParameter)
	ErrInvalidLayerPart   = awserr.New("InvalidLayerPartException", awserr.ErrInvalidParameter)
	ErrLayerAlreadyExists = awserr.New("LayerAlreadyExistsException", awserr.ErrAlreadyExists)
	ErrLayersNotFound     = awserr.New("LayersNotFoundException", awserr.ErrInvalidParameter)
	ErrInvalidLayer       = awserr.New("InvalidLayerException", awserr.ErrInvalidParameter)

	ErrImageNotFound           = awserr.New("ImageNotFoundException", awserr.ErrNotFound)
	ErrImageAlreadyExists      = awserr.New("ImageAlreadyExistsException", awserr.ErrAlreadyExists)
	ErrImageDigestDoesNotMatch = awserr.New("ImageDigestDoesNotMatchException", awserr.ErrInvalidParameter)
	ErrImageTagAlreadyExists   = awserr.New("ImageTagAlreadyExistsException", awserr.ErrConflict)
	ErrReferencedImagesMissing = awserr.New("ReferencedImagesNotFoundException", awserr.ErrNotFound)
)

Sentinel errors, wrapped so callers can match with errors.Is while the message carries the real AWS exception name for classifyError.

View Source
var ErrNoSnapshot = errors.New("backend does not support restore")

ErrNoSnapshot is returned when a backend does not support snapshot/restore.

Functions

This section is empty.

Types

type AuthorizationDataWire

type AuthorizationDataWire struct {
	AuthorizationToken string  `json:"authorizationToken,omitempty"`
	ExpiresAt          float64 `json:"expiresAt,omitempty"`
}

AuthorizationDataWire mirrors types.AuthorizationData.

type Backend

type Backend interface {
	AccountID() string

	CreateRepository(name string, catalogData *CatalogData, tags map[string]string) (*Repository, error)
	DescribeRepositories(registryID string, names []string) ([]*Repository, error)
	DeleteRepository(registryID, name string, force bool) (*Repository, error)

	GetRepositoryCatalogData(registryID, name string) (*CatalogData, error)
	PutRepositoryCatalogData(registryID, name string, catalogData *CatalogData) (*CatalogData, error)

	GetRepositoryPolicy(registryID, name string) (string, error)
	SetRepositoryPolicy(registryID, name, policyText string) (string, error)
	DeleteRepositoryPolicy(registryID, name string) (string, error)

	TagResource(resourceARN string, tags map[string]string) error
	UntagResource(resourceARN string, tagKeys []string) error
	ListTagsForResource(resourceARN string) (map[string]string, error)

	DescribeRegistries() ([]RegistryInfo, error)
	GetRegistryCatalogData() (RegistryCatalogData, error)
	PutRegistryCatalogData(displayName string) (RegistryCatalogData, error)
	GetAuthorizationToken(ctx context.Context) (string, int64, error)

	DescribeImages(registryID, repositoryName string, imageIDs []ImageIdentifier) ([]ImageDetail, error)
	DescribeImageTags(registryID, repositoryName string) ([]ImageTagDetail, error)
	PutImage(registryID, repositoryName string, req PutImageRequest) (*Image, error)
	BatchDeleteImage(
		registryID, repositoryName string, imageIDs []ImageIdentifier,
	) ([]ImageIdentifier, []ImageFailure, error)

	BatchCheckLayerAvailability(
		registryID, repositoryName string, layerDigests []string,
	) ([]LayerInfo, []LayerFailure, error)
	InitiateLayerUpload(registryID, repositoryName string) (uploadID string, partSize int64, err error)
	UploadLayerPart(
		registryID, repositoryName, uploadID string, firstByte, lastByte int64, blob []byte,
	) (lastByteReceived int64, err error)
	CompleteLayerUpload(
		registryID, repositoryName, uploadID string, layerDigests []string,
	) (digest string, err error)

	Reset()
}

Backend is the interface for the Amazon ECR Public backend.

type CatalogData

type CatalogData struct {
	AboutText            string
	Description          string
	UsageText            string
	LogoImageBlob        []byte
	Architectures        []string
	OperatingSystems     []string
	MarketplaceCertified bool
}

CatalogData is the publicly-visible Gallery metadata for a repository.

type CatalogDataInputWire

type CatalogDataInputWire struct {
	AboutText        *string  `json:"aboutText,omitempty"`
	Description      *string  `json:"description,omitempty"`
	UsageText        *string  `json:"usageText,omitempty"`
	LogoImageBlob    []byte   `json:"logoImageBlob,omitempty"`
	Architectures    []string `json:"architectures,omitempty"`
	OperatingSystems []string `json:"operatingSystems,omitempty"`
}

CatalogDataInputWire mirrors types.RepositoryCatalogDataInput.

type CatalogDataWire

type CatalogDataWire struct {
	AboutText            string   `json:"aboutText,omitempty"`
	Description          string   `json:"description,omitempty"`
	LogoURL              string   `json:"logoUrl,omitempty"`
	UsageText            string   `json:"usageText,omitempty"`
	Architectures        []string `json:"architectures,omitempty"`
	OperatingSystems     []string `json:"operatingSystems,omitempty"`
	MarketplaceCertified bool     `json:"marketplaceCertified,omitempty"`
}

CatalogDataWire mirrors types.RepositoryCatalogData.

type Handler

type Handler struct {
	Backend Backend

	AccountID     string
	DefaultRegion string
	// contains filtered or unexported fields
}

Handler is the HTTP handler for the Amazon ECR Public control-plane API.

func NewHandler

func NewHandler(backend Backend) *Handler

NewHandler creates a new Amazon ECR Public handler.

func (*Handler) ChaosOperations

func (h *Handler) ChaosOperations() []string

ChaosOperations returns all operations that can be fault-injected.

func (*Handler) ChaosRegions

func (h *Handler) ChaosRegions() []string

ChaosRegions returns all regions this handler handles. Amazon ECR Public is us-east-1-only, matching the real service.

func (*Handler) ChaosServiceName

func (h *Handler) ChaosServiceName() string

ChaosServiceName returns the lowercase AWS service name for fault rule matching.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

ExtractOperation extracts the action name from the X-Amz-Target header.

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(c *echo.Context) string

ExtractResource extracts the repository name from the request body, when present.

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

GetSupportedOperations returns the list of supported operations, matching aws-sdk-go-v2/service/ecrpublic@v1.47.1's client method set exactly.

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

Handler returns the Echo handler function for Amazon ECR Public requests.

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

MatchPriority returns the routing priority for header-exact matching.

func (*Handler) Name

func (h *Handler) Name() string

Name returns the service name.

func (*Handler) Reset

func (h *Handler) Reset()

Reset clears backend state.

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence by delegating to the backend if it supports it.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

RouteMatcher matches requests carrying the SpencerFrontendService X-Amz-Target prefix.

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence by delegating to the backend if it supports it.

type Image

type Image struct {
	ImagePushedAt          time.Time
	RepositoryName         string
	ImageDigest            string
	ImageManifest          string
	ImageManifestMediaType string
	ArtifactMediaType      string
	RegistryID             string
	ImageSizeInBytes       int64
}

Image is the domain model for a pushed image manifest, keyed by (repository, digest) via imageTableKey.

type ImageDetail

type ImageDetail struct {
	ImagePushedAt          time.Time
	ArtifactMediaType      string
	ImageDigest            string
	ImageManifestMediaType string
	RegistryID             string
	RepositoryName         string
	ImageTags              []string
	ImageSizeInBytes       int64
}

ImageDetail is a computed, request-time view of an Image annotated with its current tags; it is not itself persisted state.

type ImageDetailWire

type ImageDetailWire struct {
	ArtifactMediaType      string   `json:"artifactMediaType,omitempty"`
	ImageDigest            string   `json:"imageDigest,omitempty"`
	ImageManifestMediaType string   `json:"imageManifestMediaType,omitempty"`
	RegistryID             string   `json:"registryId,omitempty"`
	RepositoryName         string   `json:"repositoryName,omitempty"`
	ImageTags              []string `json:"imageTags,omitempty"`
	ImagePushedAt          float64  `json:"imagePushedAt,omitempty"`
	ImageSizeInBytes       int64    `json:"imageSizeInBytes,omitempty"`
}

ImageDetailWire mirrors types.ImageDetail.

type ImageFailure

type ImageFailure struct {
	ImageID       ImageIdentifier
	FailureCode   string
	FailureReason string
}

ImageFailure describes an image that BatchDeleteImage could not process.

type ImageFailureWire

type ImageFailureWire struct {
	FailureCode   string              `json:"failureCode,omitempty"`
	FailureReason string              `json:"failureReason,omitempty"`
	ImageID       ImageIdentifierWire `json:"imageId"`
}

ImageFailureWire mirrors types.ImageFailure.

type ImageIdentifier

type ImageIdentifier struct {
	ImageDigest string
	ImageTag    string
}

ImageIdentifier identifies an image by digest, tag, or both.

type ImageIdentifierWire

type ImageIdentifierWire struct {
	ImageDigest string `json:"imageDigest,omitempty"`
	ImageTag    string `json:"imageTag,omitempty"`
}

ImageIdentifierWire mirrors types.ImageIdentifier.

type ImageTagDetail

type ImageTagDetail struct {
	CreatedAt              time.Time
	ImagePushedAt          time.Time
	ImageTag               string
	ArtifactMediaType      string
	ImageDigest            string
	ImageManifestMediaType string
	ImageSizeInBytes       int64
}

ImageTagDetail is a computed, request-time view of a single tag binding.

type ImageTagDetailWire

type ImageTagDetailWire struct {
	ImageDetail *ReferencedImageDetailWire `json:"imageDetail,omitempty"`
	ImageTag    string                     `json:"imageTag,omitempty"`
	CreatedAt   float64                    `json:"createdAt,omitempty"`
}

ImageTagDetailWire mirrors types.ImageTagDetail.

type ImageWire

type ImageWire struct {
	ImageID                ImageIdentifierWire `json:"imageId"`
	ImageManifest          string              `json:"imageManifest,omitempty"`
	ImageManifestMediaType string              `json:"imageManifestMediaType,omitempty"`
	RegistryID             string              `json:"registryId,omitempty"`
	RepositoryName         string              `json:"repositoryName,omitempty"`
}

ImageWire mirrors types.Image.

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is the in-memory implementation of Backend. Amazon ECR Public is a single-region (us-east-1), single-registry-per-account service: there is no per-region partitioning of repositories, matching the real API.

func NewInMemoryBackend

func NewInMemoryBackend(accountID, region string) *InMemoryBackend

NewInMemoryBackend creates a new Amazon ECR Public backend for accountID.

func (*InMemoryBackend) AccountID

func (b *InMemoryBackend) AccountID() string

AccountID returns the AWS account ID this backend is configured for.

func (*InMemoryBackend) BatchCheckLayerAvailability

func (b *InMemoryBackend) BatchCheckLayerAvailability(
	registryID, repositoryName string, layerDigests []string,
) ([]LayerInfo, []LayerFailure, error)

BatchCheckLayerAvailability reports which of the given layer digests have already been uploaded (via a completed InitiateLayerUpload session) to repositoryName.

func (*InMemoryBackend) BatchDeleteImage

func (b *InMemoryBackend) BatchDeleteImage(
	registryID, repositoryName string, imageIDs []ImageIdentifier,
) ([]ImageIdentifier, []ImageFailure, error)

BatchDeleteImage deletes images by digest (removing every tag bound to it) or by tag (removing only that binding; the image survives if another tag still references it).

func (*InMemoryBackend) CompleteLayerUpload

func (b *InMemoryBackend) CompleteLayerUpload(
	registryID, repositoryName, uploadID string, layerDigests []string,
) (string, error)

CompleteLayerUpload finalizes an upload session, computing (and, if the caller supplied one, verifying) the layer's SHA256 digest.

func (*InMemoryBackend) CreateRepository

func (b *InMemoryBackend) CreateRepository(
	name string, catalogData *CatalogData, tags map[string]string,
) (*Repository, error)

CreateRepository creates a new public repository under the caller's account.

func (*InMemoryBackend) DeleteRepository

func (b *InMemoryBackend) DeleteRepository(registryID, name string, force bool) (*Repository, error)

DeleteRepository deletes a repository. Non-empty repositories are rejected unless force is set, matching AWS.

func (*InMemoryBackend) DeleteRepositoryPolicy

func (b *InMemoryBackend) DeleteRepositoryPolicy(registryID, name string) (string, error)

DeleteRepositoryPolicy deletes the repository's resource policy, returning the deleted policy text.

func (*InMemoryBackend) DescribeImageTags

func (b *InMemoryBackend) DescribeImageTags(registryID, repositoryName string) ([]ImageTagDetail, error)

DescribeImageTags returns one ImageTagDetail per tag currently bound in the repository.

func (*InMemoryBackend) DescribeImages

func (b *InMemoryBackend) DescribeImages(
	registryID, repositoryName string, imageIDs []ImageIdentifier,
) ([]ImageDetail, error)

DescribeImages returns image details for a repository, optionally filtered by digest or tag.

func (*InMemoryBackend) DescribeRegistries

func (b *InMemoryBackend) DescribeRegistries() ([]RegistryInfo, error)

DescribeRegistries returns the public registries visible to the caller. This is a single-tenant emulator: it always returns exactly the caller's own registry, never other accounts' registries (there is no cross-account Gallery directory modeled here -- see PARITY.md).

func (*InMemoryBackend) DescribeRepositories

func (b *InMemoryBackend) DescribeRepositories(registryID string, names []string) ([]*Repository, error)

DescribeRepositories returns repositories in the given registry, optionally filtered by name. An unknown name in a non-empty filter is a hard error, matching AWS.

func (*InMemoryBackend) GetAuthorizationToken

func (b *InMemoryBackend) GetAuthorizationToken(_ context.Context) (string, int64, error)

GetAuthorizationToken returns a base64(user:password) authorization token and its expiry. The emulator does not model per-principal credentials -- every caller gets the same stable token, honestly reflecting that this is not a real authentication backend (see PARITY.md).

func (*InMemoryBackend) GetRegistryCatalogData

func (b *InMemoryBackend) GetRegistryCatalogData() (RegistryCatalogData, error)

GetRegistryCatalogData returns the account-wide Gallery display metadata.

func (*InMemoryBackend) GetRepositoryCatalogData

func (b *InMemoryBackend) GetRepositoryCatalogData(registryID, name string) (*CatalogData, error)

GetRepositoryCatalogData returns the Gallery-visible catalog metadata for a repository.

func (*InMemoryBackend) GetRepositoryPolicy

func (b *InMemoryBackend) GetRepositoryPolicy(registryID, name string) (string, error)

GetRepositoryPolicy returns the repository's resource policy text.

func (*InMemoryBackend) InitiateLayerUpload

func (b *InMemoryBackend) InitiateLayerUpload(registryID, repositoryName string) (string, int64, error)

InitiateLayerUpload starts a new layer upload session for repositoryName.

func (*InMemoryBackend) ListTagsForResource

func (b *InMemoryBackend) ListTagsForResource(resourceARN string) (map[string]string, error)

ListTagsForResource returns all tags on a repository.

func (*InMemoryBackend) PutImage

func (b *InMemoryBackend) PutImage(registryID, repositoryName string, req PutImageRequest) (*Image, error)

PutImage creates or replaces an image manifest, verifying that every layer (and config blob) it references was already uploaded via BatchCheckLayerAvailability/CompleteLayerUpload.

func (*InMemoryBackend) PutRegistryCatalogData

func (b *InMemoryBackend) PutRegistryCatalogData(displayName string) (RegistryCatalogData, error)

PutRegistryCatalogData replaces the account-wide Gallery display metadata.

func (*InMemoryBackend) PutRepositoryCatalogData

func (b *InMemoryBackend) PutRepositoryCatalogData(
	registryID, name string, catalogData *CatalogData,
) (*CatalogData, error)

PutRepositoryCatalogData replaces the Gallery-visible catalog metadata for a repository.

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

Reset clears all backend state.

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore deserializes backend state from a JSON snapshot.

func (*InMemoryBackend) SetRepositoryPolicy

func (b *InMemoryBackend) SetRepositoryPolicy(registryID, name, policyText string) (string, error)

SetRepositoryPolicy sets or replaces the repository's resource policy text.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serializes backend state to JSON.

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(resourceARN string, tags map[string]string) error

TagResource adds or replaces tags on a repository.

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(resourceARN string, tagKeys []string) error

UntagResource removes tags from a repository by key.

func (*InMemoryBackend) UploadLayerPart

func (b *InMemoryBackend) UploadLayerPart(
	registryID, repositoryName, uploadID string, firstByte, lastByte int64, blob []byte,
) (int64, error)

UploadLayerPart appends a chunk of layer bytes to a live upload session. AWS requires each part's first byte to be consecutive to the bytes already received; a gap or overlap is rejected with InvalidLayerPartException.

type LayerFailure

type LayerFailure struct {
	LayerDigest   string
	FailureCode   string
	FailureReason string
}

LayerFailure describes a layer digest BatchCheckLayerAvailability could not find.

type LayerFailureWire

type LayerFailureWire struct {
	FailureCode   string `json:"failureCode,omitempty"`
	FailureReason string `json:"failureReason,omitempty"`
	LayerDigest   string `json:"layerDigest,omitempty"`
}

LayerFailureWire mirrors types.LayerFailure.

type LayerInfo

type LayerInfo struct {
	LayerDigest       string
	LayerAvailability string
	MediaType         string
	LayerSize         int64
}

LayerInfo describes an available image layer.

type LayerWire

type LayerWire struct {
	LayerAvailability string `json:"layerAvailability,omitempty"`
	LayerDigest       string `json:"layerDigest,omitempty"`
	MediaType         string `json:"mediaType,omitempty"`
	LayerSize         int64  `json:"layerSize,omitempty"`
}

LayerWire mirrors types.Layer.

type Provider

type Provider struct{}

Provider implements service.Provider for Amazon ECR Public.

func (*Provider) Init

Init initializes the Amazon ECR Public service backend and handler. Public repositories are a us-east-1-only service in real AWS, so the backend is always constructed for that region regardless of the configured default.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name.

type PutImageRequest

type PutImageRequest struct {
	ImageDigest            string
	ImageManifest          string
	ImageManifestMediaType string
	ImageTag               string
}

PutImageRequest carries the fields PutImage needs from the wire request.

type ReferencedImageDetailWire

type ReferencedImageDetailWire struct {
	ArtifactMediaType      string  `json:"artifactMediaType,omitempty"`
	ImageDigest            string  `json:"imageDigest,omitempty"`
	ImageManifestMediaType string  `json:"imageManifestMediaType,omitempty"`
	ImagePushedAt          float64 `json:"imagePushedAt,omitempty"`
	ImageSizeInBytes       int64   `json:"imageSizeInBytes,omitempty"`
}

ReferencedImageDetailWire mirrors types.ReferencedImageDetail.

type RegistryAliasInfo

type RegistryAliasInfo struct {
	Name                 string
	Status               string
	DefaultRegistryAlias bool
	PrimaryRegistryAlias bool
}

RegistryAliasInfo describes one alias of a public registry.

type RegistryAliasWire

type RegistryAliasWire struct {
	Name                 string `json:"name"`
	Status               string `json:"status"`
	DefaultRegistryAlias bool   `json:"defaultRegistryAlias"`
	PrimaryRegistryAlias bool   `json:"primaryRegistryAlias"`
}

RegistryAliasWire mirrors types.RegistryAlias.

type RegistryCatalogData

type RegistryCatalogData struct {
	DisplayName string
}

RegistryCatalogData is the account-wide Gallery display metadata.

type RegistryCatalogDataWire

type RegistryCatalogDataWire struct {
	DisplayName string `json:"displayName,omitempty"`
}

RegistryCatalogDataWire mirrors types.RegistryCatalogData.

type RegistryInfo

type RegistryInfo struct {
	RegistryArn string
	RegistryID  string
	RegistryURI string
	Aliases     []RegistryAliasInfo
	Verified    bool
}

RegistryInfo describes a public registry, computed from backend state.

type RegistryWire

type RegistryWire struct {
	RegistryArn string              `json:"registryArn"`
	RegistryID  string              `json:"registryId"`
	RegistryURI string              `json:"registryUri"`
	Aliases     []RegistryAliasWire `json:"aliases"`
	Verified    bool                `json:"verified"`
}

RegistryWire mirrors types.Registry.

type Repository

type Repository struct {
	CreatedAt      time.Time
	Tags           map[string]string
	RepositoryName string
	RepositoryArn  string
	RegistryID     string
	RepositoryURI  string
	PolicyText     string
	CatalogData    CatalogData
	HasPolicy      bool
}

Repository is the domain model for a public ECR repository.

type RepositoryWire

type RepositoryWire struct {
	RegistryID     string  `json:"registryId,omitempty"`
	RepositoryArn  string  `json:"repositoryArn,omitempty"`
	RepositoryName string  `json:"repositoryName,omitempty"`
	RepositoryURI  string  `json:"repositoryUri,omitempty"`
	CreatedAt      float64 `json:"createdAt,omitempty"`
}

RepositoryWire mirrors types.Repository.

type Snapshottable

type Snapshottable interface {
	Snapshot(ctx context.Context) []byte
	Restore(context.Context, []byte) error
}

Snapshottable is an optional interface a Backend may implement to support snapshot/restore for persistence or test isolation.

type TagWire

type TagWire struct {
	Key   string `json:"Key"`
	Value string `json:"Value"`
}

TagWire mirrors types.Tag.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL