Files
zot/pkg/test/oci-utils/repo.go
T
Luca Muscariello 2402296e9a fix: migrate to Go module v2 for proper semantic versioning (#3462)
* fix: migrate to Go module v2 for proper semantic versioning

This change updates the module path from 'zotregistry.dev/zot' to
'zotregistry.dev/zot/v2' to comply with Go's semantic versioning rules.

According to Go's module versioning requirements, major version v2+
must include the major version in the module path. The current
module path 'zotregistry.dev/zot' only supports v0.x.x and v1.x.x
versions, making existing v2.x.x tags (like v2.1.8) unusable.

Changes:
- Updated go.mod module path to zotregistry.dev/zot/v2
- Updated all internal import paths across 280+ Go source files
- Updated configuration files (golangcilint.yaml, gqlgen.yml)
- Updated README.md Go reference badge

This fix enables proper use of existing v2.x.x Git tags and allows
external packages to import zot v2+ versions without compatibility
errors.

Resolves: Go module import compatibility for v2+ versions
Fixes: #3071
Signed-off-by: Luca Muscariello <muscariello@ieee.org>

* fix: regenerate GraphQL files with updated v2 import paths

The gqlgen tool needs to regenerate the GraphQL schema files after
the module path change to use the new v2 imports.

Signed-off-by: Luca Muscariello <muscariello@ieee.org>

---------

Signed-off-by: Luca Muscariello <muscariello@ieee.org>
2025-10-16 22:43:47 -07:00

143 lines
3.3 KiB
Go

package ociutils
import (
"context"
"fmt"
zerr "zotregistry.dev/zot/v2/errors"
mTypes "zotregistry.dev/zot/v2/pkg/meta/types"
reqCtx "zotregistry.dev/zot/v2/pkg/requestcontext"
imageUtil "zotregistry.dev/zot/v2/pkg/test/image-utils"
)
type RepoImage struct {
imageUtil.Image
Reference string
Statistics mTypes.DescriptorStatistics
}
type RepoMultiArchImage struct {
imageUtil.MultiarchImage
ImageStatistics map[mTypes.ImageDigest]mTypes.DescriptorStatistics
Reference string
}
type Repo struct {
Name string
Images []RepoImage
MultiArchImages []RepoMultiArchImage
Signatures map[string]mTypes.ManifestSignatures
Stars int
IsBookmarked bool
IsStarred bool
}
func InitializeTestMetaDB(ctx context.Context, metaDB mTypes.MetaDB, repos ...Repo) (context.Context, error) {
uac := reqCtx.NewUserAccessControl()
uac.SetUsername("test")
uacContext := context.WithValue(ctx, reqCtx.GetContextKey(), *uac)
err := validateRepos(repos)
if err != nil {
return uacContext, err
}
for _, repo := range repos {
statistics := map[string]mTypes.DescriptorStatistics{"": {}}
for _, image := range repo.Images {
err := metaDB.SetRepoReference(ctx, repo.Name, image.Reference, image.AsImageMeta())
if err != nil {
return uacContext, err
}
statistics[image.DigestStr()] = image.Statistics
}
for _, multiArch := range repo.MultiArchImages {
for _, image := range multiArch.Images {
err := metaDB.SetRepoReference(ctx, repo.Name, image.DigestStr(), image.AsImageMeta())
if err != nil {
return uacContext, err
}
statistics[image.DigestStr()] = multiArch.ImageStatistics[image.DigestStr()]
}
err := metaDB.SetRepoReference(ctx, repo.Name, multiArch.Reference, multiArch.AsImageMeta())
if err != nil {
return uacContext, err
}
statistics[multiArch.DigestStr()] = multiArch.ImageStatistics[multiArch.DigestStr()]
}
// Update repo metadata
repoMeta, err := metaDB.GetRepoMeta(ctx, repo.Name)
if err != nil {
return uacContext, err
}
repoMeta.StarCount = repo.Stars
repoMeta.IsStarred = repo.IsStarred
repoMeta.IsBookmarked = repo.IsBookmarked
// updateStatistics
for key, value := range statistics {
repoMeta.Statistics[key] = value
}
// update signatures?
for key, value := range repo.Signatures {
repoMeta.Signatures[key] = value
}
err = metaDB.SetRepoMeta(repo.Name, repoMeta)
if err != nil {
return uacContext, err
}
// User data is set after we create the repo
if repo.IsBookmarked {
_, err := metaDB.ToggleBookmarkRepo(uacContext, repo.Name)
if err != nil {
return uacContext, err
}
}
if repo.IsStarred {
_, err := metaDB.ToggleStarRepo(uacContext, repo.Name)
if err != nil {
return uacContext, err
}
}
}
return uacContext, nil
}
func validateRepos(repos []Repo) error {
repoNames := map[string]struct{}{}
for _, repo := range repos {
if _, found := repoNames[repo.Name]; found {
return fmt.Errorf("%w '%s'", zerr.ErrMultipleReposSameName, repo.Name)
}
repoNames[repo.Name] = struct{}{}
}
return nil
}
func GetFakeSignatureInfo(signatureDigest string) map[string][]mTypes.SignatureInfo {
return map[string][]mTypes.SignatureInfo{
"fake-signature": {
{
SignatureManifestDigest: signatureDigest,
LayersInfo: []mTypes.LayerInfo{},
},
},
}
}