From b03b00869391cd70ef1e40561f72dffbd2f47b29 Mon Sep 17 00:00:00 2001 From: Colin Wilk Date: Fri, 30 Oct 2026 10:04:02 +0100 Subject: Initial Commit --- registry/models.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 registry/models.go (limited to 'registry/models.go') diff --git a/registry/models.go b/registry/models.go new file mode 100644 index 0000000..11e1db8 --- /dev/null +++ b/registry/models.go @@ -0,0 +1,75 @@ +// Package registry is responsible for fetching data from the backend registry +// and providing the data for the UI components. +package registry + +import ( + "context" + "errors" + "time" +) + +// ErrNotFound should be returned for missing repositories/manifests. +var ErrNotFound = errors.New("registry resource not found") + +type Provider interface { + Repositories(ctx context.Context) ([]Repository, error) + Repository(ctx context.Context, name string) (Repository, error) + Manifest(ctx context.Context, repository, digest string) (Manifest, error) +} + +type Repository struct { + Name string `json:"name"` + UpdatedAt time.Time `json:"updated_at"` + Age string `json:"age,omitempty"` + Tags []Tag `json:"tags"` +} + +type Tag struct { + Name string `json:"name"` + Aliases []string `json:"aliases,omitempty"` + UpdatedAt time.Time `json:"updated_at"` + Age string `json:"age,omitempty"` + Platforms string `json:"platforms,omitempty"` + SizeBytes int64 `json:"size_bytes,omitempty"` + ManifestDigest string `json:"manifest_digest"` +} + +type Manifest struct { + Repository string `json:"repository"` + Digest string `json:"digest"` + Kind string `json:"kind"` // "index" for a list; "image" for layers. + SizeBytes int64 `json:"size_bytes,omitempty"` // Registry-reported image total, when available. + Tags []TagReference `json:"tags"` + Platforms []PlatformManifest `json:"platforms,omitempty"` + Layers []Layer `json:"layers,omitempty"` +} + +func (m Manifest) TotalSizeBytes() int64 { + if m.SizeBytes > 0 { + return m.SizeBytes + } + var total int64 + for _, layer := range m.Layers { + total += layer.SizeBytes + } + return total +} + +type TagReference struct { + Name string `json:"name"` + UpdatedAt time.Time `json:"updated_at"` + Age string `json:"age,omitempty"` + ManifestDigest string `json:"manifest_digest"` +} + +type PlatformManifest struct { + Platform string `json:"platform"` + Variant string `json:"variant,omitempty"` + SizeBytes int64 `json:"size_bytes"` + Digest string `json:"digest"` +} + +type Layer struct { + Digest string `json:"digest"` + SizeBytes int64 `json:"size_bytes"` +} -- cgit v1.2.3