mirror of
https://github.com/project-zot/zot.git
synced 2024-12-23 22:27:35 -05:00
feb7328f50
- derivedImageList and baseImageList now use FilterTags to obtain results, each with its own filter function - images that have the exact same manifest as the one provided as a parameter are no longer considered base images or derived images - both calls can be made with specific pagination parameters, and the response will include PageInfo Signed-off-by: Alex Stan <alexandrustan96@yahoo.ro> fix(tests): fix one of the pagination tests The results were not reliable as the 2 returned tags were sorted by created date/time which was not set, resulting in an unpredictable order Signed-off-by: Andrei Aaron <andaaron@cisco.com> (cherry picked from commit be504200a1127371422aeb0e5c0219e2a1ead20a) (cherry picked from commit ed8d797e639f262a63840120afe92da7db9a7600) Signed-off-by: Andrei Aaron <aaaron@luxoft.com> Signed-off-by: Andrei Aaron <andaaron@cisco.com> Signed-off-by: Andrei Aaron <aaaron@luxoft.com> Co-authored-by: Alex Stan <alexandrustan96@yahoo.ro>
169 lines
4.8 KiB
Go
169 lines
4.8 KiB
Go
package repodb
|
|
|
|
import (
|
|
"context"
|
|
|
|
godigest "github.com/opencontainers/go-digest"
|
|
)
|
|
|
|
// MetadataDB.
|
|
const (
|
|
ManifestDataBucket = "ManifestData"
|
|
UserMetadataBucket = "UserMeta"
|
|
RepoMetadataBucket = "RepoMetadata"
|
|
VersionBucket = "Version"
|
|
)
|
|
|
|
const (
|
|
SignaturesDirPath = "/tmp/zot/signatures"
|
|
SigKey = "dev.cosignproject.cosign/signature"
|
|
NotationType = "notation"
|
|
CosignType = "cosign"
|
|
)
|
|
|
|
type FilterFunc func(repoMeta RepoMetadata, manifestMeta ManifestMetadata) bool
|
|
|
|
type RepoDB interface { //nolint:interfacebloat
|
|
// IncrementRepoStars adds 1 to the star count of an image
|
|
IncrementRepoStars(repo string) error
|
|
|
|
// IncrementRepoStars subtracts 1 from the star count of an image
|
|
DecrementRepoStars(repo string) error
|
|
|
|
// GetRepoStars returns the total number of stars a repo has
|
|
GetRepoStars(repo string) (int, error)
|
|
|
|
// SetRepoTag sets the tag of a manifest in the tag list of a repo
|
|
SetRepoTag(repo string, tag string, manifestDigest godigest.Digest, mediaType string) error
|
|
|
|
// DeleteRepoTag delets the tag from the tag list of a repo
|
|
DeleteRepoTag(repo string, tag string) error
|
|
|
|
// GetRepoMeta returns RepoMetadata of a repo from the database
|
|
GetRepoMeta(repo string) (RepoMetadata, error)
|
|
|
|
// GetMultipleRepoMeta returns information about all repositories as map[string]RepoMetadata filtered by the filter
|
|
// function
|
|
GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta RepoMetadata) bool, requestedPage PageInput) (
|
|
[]RepoMetadata, error)
|
|
|
|
// SetManifestData sets ManifestData for a given manifest in the database
|
|
SetManifestData(manifestDigest godigest.Digest, md ManifestData) error
|
|
|
|
// GetManifestData return the manifest and it's related config
|
|
GetManifestData(manifestDigest godigest.Digest) (ManifestData, error)
|
|
|
|
// GetManifestMeta returns ManifestMetadata for a given manifest from the database
|
|
GetManifestMeta(repo string, manifestDigest godigest.Digest) (ManifestMetadata, error)
|
|
|
|
// GetManifestMeta sets ManifestMetadata for a given manifest in the database
|
|
SetManifestMeta(repo string, manifestDigest godigest.Digest, mm ManifestMetadata) error
|
|
|
|
// IncrementManifestDownloads adds 1 to the download count of a manifest
|
|
IncrementImageDownloads(repo string, reference string) error
|
|
|
|
// AddManifestSignature adds signature metadata to a given manifest in the database
|
|
AddManifestSignature(repo string, signedManifestDigest godigest.Digest, sm SignatureMetadata) error
|
|
|
|
// DeleteSignature delets signature metadata to a given manifest from the database
|
|
DeleteSignature(repo string, signedManifestDigest godigest.Digest, sm SignatureMetadata) error
|
|
|
|
// SearchRepos searches for repos given a search string
|
|
SearchRepos(ctx context.Context, searchText string, filter Filter, requestedPage PageInput) (
|
|
[]RepoMetadata, map[string]ManifestMetadata, PageInfo, error)
|
|
|
|
// SearchTags searches for images(repo:tag) given a search string
|
|
SearchTags(ctx context.Context, searchText string, filter Filter, requestedPage PageInput) (
|
|
[]RepoMetadata, map[string]ManifestMetadata, PageInfo, error)
|
|
|
|
// FilterTags filters for images given a filter function
|
|
FilterTags(ctx context.Context, filter FilterFunc,
|
|
requestedPage PageInput) ([]RepoMetadata, map[string]ManifestMetadata, PageInfo, error)
|
|
|
|
PatchDB() error
|
|
}
|
|
|
|
type ManifestMetadata struct {
|
|
ManifestBlob []byte
|
|
ConfigBlob []byte
|
|
DownloadCount int
|
|
Signatures ManifestSignatures
|
|
}
|
|
|
|
type ManifestData struct {
|
|
ManifestBlob []byte
|
|
ConfigBlob []byte
|
|
}
|
|
|
|
// Descriptor represents an image. Multiple images might have the same digests but different tags.
|
|
type Descriptor struct {
|
|
Digest string
|
|
MediaType string
|
|
}
|
|
|
|
type DescriptorStatistics struct {
|
|
DownloadCount int
|
|
}
|
|
|
|
type ManifestSignatures map[string][]SignatureInfo
|
|
|
|
type RepoMetadata struct {
|
|
Name string
|
|
Tags map[string]Descriptor
|
|
|
|
Statistics map[string]DescriptorStatistics
|
|
Signatures map[string]ManifestSignatures
|
|
Stars int
|
|
}
|
|
|
|
type LayerInfo struct {
|
|
LayerDigest string
|
|
LayerContent []byte
|
|
SignatureKey string
|
|
Signer string
|
|
}
|
|
|
|
type SignatureInfo struct {
|
|
SignatureManifestDigest string
|
|
LayersInfo []LayerInfo
|
|
}
|
|
|
|
type SignatureMetadata struct {
|
|
SignatureType string
|
|
SignatureDigest string
|
|
LayersInfo []LayerInfo
|
|
}
|
|
|
|
type SortCriteria string
|
|
|
|
const (
|
|
Relevance = SortCriteria("RELEVANCE")
|
|
UpdateTime = SortCriteria("UPDATE_TIME")
|
|
AlphabeticAsc = SortCriteria("ALPHABETIC_ASC")
|
|
AlphabeticDsc = SortCriteria("ALPHABETIC_DSC")
|
|
Stars = SortCriteria("STARS")
|
|
Downloads = SortCriteria("DOWNLOADS")
|
|
)
|
|
|
|
type PageInput struct {
|
|
Limit int
|
|
Offset int
|
|
SortBy SortCriteria
|
|
}
|
|
|
|
type PageInfo struct {
|
|
TotalCount int
|
|
ItemCount int
|
|
}
|
|
|
|
type Filter struct {
|
|
Os []*string
|
|
Arch []*string
|
|
HasToBeSigned *bool
|
|
}
|
|
|
|
type FilterData struct {
|
|
OsList []string
|
|
ArchList []string
|
|
IsSigned bool
|
|
}
|