Ramkumar Chinchani
55b68228da
feat(storage): redirect blob pulls to backend URLs ( #4092 )
...
* feat(storage): redirect blob pulls to backend URLs
* fix: rebase conflicts
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* refactor: rename redirect field
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* test: relax brittle TestPeriodicGC substore log assertion
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* feat(storage): improve blob redirect config handling and validation
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix(storage): address PR review feedback for blob redirect
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* feat(storage): apply latest PR review fixes for blob redirect
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* test: fix blob redirect and verify test regressions
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix(storage): enforce redirectBlobURL validation and add redirect tests
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix(storage): fix err113/noctx lint errors in storage driver tests
- Replace httptest.NewRequest with httptest.NewRequestWithContext in
s3, gcs, and imagestore driver tests (noctx)
- Replace dynamic errors.New in s3 driver test with a package-level
static sentinel error (err113)
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* test(storage): use temp dirs in imagestore redirect tests
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix: handle ranged blob redirects and add regression tests
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix: validate blob digest consistently in GetBlob
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* test: fix GetBlobPartialFn mock return values for range requests
The test 'does not redirect ranged blob requests' was failing because the mock
was returning incorrect length values. For a range request 'bytes=0-0' (1 byte),
it was returning 4 bytes, which caused a length mismatch check in GetBlob to
return HTTP 500.
Fix the mock to dynamically calculate the correct length: to - from + 1
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix(storage): preserve signed URL bytes in normalizeBlobRedirectURL
Preserve the original URL bytes from backend storage drivers (important
for signed/presigned URLs) while only lowercasing the scheme prefix.
URL re-serialization via net/url can invalidate signatures through path
escaping or canonicalization.
Add regression tests covering signed URL query parameters and mixed-case
scheme handling.
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix(storage): address PR review comments for blob redirect
- Return signed redirect URLs unchanged; validate scheme/CRLF/host only,
no URL normalization that would corrupt signed URL bytes
- Add inline comments for all non-obvious decisions: range bypass, soft
fallback on invalid URL, local driver empty return, subpath resolution,
redirectBlobURL config constraint on local/empty driver
- Expand TestNormalizeBlobRedirectURL to cover allowed schemes (http/https),
parse failure, missing host, and CRLF injection cases
- Add TestIsBlobRedirectEnabled covering subpath-only enablement with
default store disabled
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* test(storage): address remaining blob redirect review comments
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
* fix: gofumpt formatting in routes_test.go
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
---------
Signed-off-by: Ramkumar Chinchani <rchincha.dev@gmail.com >
Co-authored-by: Akash Kumar <meakash7902@gmail.com >
2026-06-15 14:36:07 -07:00
Andrei Aaron
9991821295
fix: Updating a repository should not result in a corrupted index.json file if disk is full ( #3963 )
...
See https://github.com/project-zot/zot/issues/3924
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
2026-04-14 08:59:25 +03:00
Andrei Aaron
da426850e7
chore: update golangci-lint and fix all issues ( #3575 )
...
* chore: Update golangci-lint
Signed-off-by: Lars Francke <git@lars-francke.de >
* chore: fix all golangci-lint issues
- Remove deprecated `// +build` tags
- Fix godoclint, modernize, wsl_v5, govet, lll, gci, noctx issues
- Update linter configuration
- Modernize code to use Go 1.22+ features (for range N, slices.Contains, etc.)
- Update make check lint the privileged tests
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
---------
Signed-off-by: Lars Francke <git@lars-francke.de >
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
Co-authored-by: Lars Francke <git@lars-francke.de >
2025-11-22 23:36:48 +02:00
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
Andrei Aaron
14736b8a53
ci: more sync/local driver tests to stabilize/increase coverage ( #3425 )
...
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
2025-10-02 09:19:43 -07:00
Andrei Aaron
5309e7f5cf
chore: increase/stabilize go test coverage ( #3411 )
...
* chore: increase/stabilize coverage for the local storage driver
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
* chore: add/stabilize coverage for soring ImageSummary objects
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
* chore: stabilize coverage in sync tests
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
---------
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com >
2025-10-01 15:24:38 -07:00
Jan-Otto Kröpke
fa4b69954d
build(deps): bump all dependencies ( #2532 )
...
* build(deps): bump all dependencies
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
* build(deps): bump all dependencies
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): bump all dependencies
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): bump all dependencies
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
---------
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
2024-08-02 14:23:53 -07:00
Jan-Otto Kröpke
f618b1d4ef
ci(deps): upgrade golangci-lint ( #2556 )
...
* ci(deps): upgrade golangci-lint
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
* build(deps): removed disabled linters
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
* build(deps): go run github.com/daixiang0/gci@latest write .
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): go run golang.org/x/tools/cmd/goimports@latest -l -w .
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): go run github.com/bombsimon/wsl/v4/cmd...@latest -strict-append -test=true -fix ./...
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): go run github.com/catenacyber/perfsprint@latest -fix ./...
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): replace gomnd by mnd
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): make gqlgen
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build: Revert "build(deps): go run github.com/daixiang0/gci@latest write ."
This reverts commit 5bf8c42e1f .
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): go run github.com/daixiang0/gci@latest write -s 'standard' -s default -s 'prefix(zotregistry.dev/zot)' .
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* build(deps): make gqlgen
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: wsl issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: check-log issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: gci issues
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
* fix: tests
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
---------
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de >
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de >
2024-07-29 10:32:51 -07:00
Andrei Aaron
2d2e005449
fix(npe): handle case where os.Stat returns different error types in DirExists ( #2253 )
...
See https://github.com/project-zot/zot/actions/runs/7905369535/job/21577848110
Also add tests to fix some of the coverage fluctuations.
Signed-off-by: Andrei Aaron <aaaron@luxoft.com >
2024-02-18 08:00:00 +02:00
Andrei Aaron
ce4924f841
refactor: rename go module from zotregistry.io/zot to zotregistry.dev/zot ( #2187 )
...
Signed-off-by: Andrei Aaron <aaaron@luxoft.com >
2024-01-31 20:34:07 -08:00
peusebiu
9074f8483b
feat(retention): added image retention policies ( #1866 )
...
feat(metaDB): add more image statistics info
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com >
2023-11-01 09:16:18 -07:00
Ramkumar Chinchani
1675f30d4a
ci: update golangci-lint version ( #1834 )
...
Signed-off-by: Ramkumar Chinchani <rchincha@cisco.com >
2023-10-20 17:27:04 +03:00
peusebiu
1df743f173
fix(gc): sync repodb when gc'ing manifests ( #1819 )
...
fix(gc): fix cleaning deduped blobs because they have the modTime of
the original blobs, fixed by updating the modTime when hard linking
the blobs.
fix(gc): failing to parse rootDir at zot startup when using s3 storage
because there are no files under rootDir and we can not create empty dirs
on s3, fixed by creating an empty file under rootDir.
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com >
2023-09-22 11:51:20 -07:00
peusebiu
b80deb9927
refactor(storage): refactor storage into a single ImageStore ( #1656 )
...
unified both local and s3 ImageStore logic into a single ImageStore
added a new driver interface for common file/dirs manipulations
to be implemented by different storage types
refactor(gc): drop umoci dependency, implemented internal gc
added retentionDelay config option that specifies
the garbage collect delay for images without tags
this will also clean manifests which are part of an index image
(multiarch) that no longer exist.
fix(dedupe): skip blobs under .sync/ directory
if startup dedupe is running while also syncing is running
ignore blobs under sync's temporary storage
fix(storage): do not allow image indexes modifications
when deleting a manifest verify that it is not part of a multiarch image
and throw a MethodNotAllowed error to the client if it is.
we don't want to modify multiarch images
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com >
2023-09-01 10:54:39 -07:00