Skip to content

experiments: remove deprecated support for estargz#2288

Merged
Subserial merged 1 commit into
google:mainfrom
thaJeztah:rm_estargz
May 5, 2026
Merged

experiments: remove deprecated support for estargz#2288
Subserial merged 1 commit into
google:mainfrom
thaJeztah:rm_estargz

Conversation

@thaJeztah

Copy link
Copy Markdown
Contributor

support for estargz was deprecated in 217318c (2023); most projects using this code already removed their uses, and it was an experimental feature.

This patch removes the functionality, but keeps the functions (for now) as no-op.

support for estargz was deprecated in 217318c (2023);
most projects using this code already removed their uses, and it was an experimental
feature.

This patch removes the functionality, but keeps the functions (for now) as no-op.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Comment thread pkg/v1/tarball/layer.go
Comment on lines +160 to +162
// Deprecated: WithEstargz is deprecated; it is a no-op.
func WithEstargzOptions(...any) LayerOption {
return func(*layer) {}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately thee LayerOption signature doesn't have an error-return, otherwise I could've made it return an error (using panic felt like possibly too aggressive).

@thaJeztah thaJeztah marked this pull request as ready for review May 5, 2026 15:17
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 56.70%. Comparing base (f1eecab) to head (c80c31f).

Files with missing lines Patch % Lines
pkg/v1/tarball/layer.go 0.00% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2288      +/-   ##
==========================================
- Coverage   56.85%   56.70%   -0.16%     
==========================================
  Files         166      165       -1     
  Lines       11279    11239      -40     
==========================================
- Hits         6413     6373      -40     
- Misses       4100     4106       +6     
+ Partials      766      760       -6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Subserial Subserial merged commit 7ab219a into google:main May 5, 2026
18 of 19 checks passed
@thaJeztah thaJeztah deleted the rm_estargz branch May 5, 2026 22:16
Subserial pushed a commit to Subserial/go-containerregistry that referenced this pull request May 15, 2026
support for estargz was deprecated in 217318c (2023);
most projects using this code already removed their uses, and it was an experimental
feature.

This patch removes the functionality, but keeps the functions (for now) as no-op.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
jimmidyson added a commit to mesosphere/mindthegap that referenced this pull request May 19, 2026
…223) (#1046)

## Summary

- Bump `github.com/google/go-containerregistry` v0.21.5 → v0.21.6 to
pick up
[google/go-containerregistry#2302](google/go-containerregistry#2302)
— transport: allow bearer realm at same host:port as registry.
- Fixes [NCN-114223](https://jira.nutanix.com/browse/NCN-114223):
`mindthegap push bundle` (and downstream `nkp push bundle`) regression
against on-prem registries that colocate the registry and bearer-token
endpoint on the same private IP. e.g. for an internal Harbor at
`https://10.162.182.23:5000/library` the push aborted with `invalid
realm in www-authenticate: realm host "10.162.182.23" is a private or
link-local address`.
- Add regression test
`TestPushDockerArchive_BearerAuthSameHostLoopbackRealm` in
`cmd/mindthegap/push/imagearchive/push_test.go` that reproduces the
exact NCN-114223 error against v0.21.5 and passes against v0.21.6.

## Background

The realm-URL validation introduced in
[go-containerregistry#2243](google/go-containerregistry#2243)
(shipped in v0.21.5) rejects realms whose host resolves to a private,
loopback, or link-local IP. This is the right default for the cross-host
SSRF case (a malicious registry pointing the token endpoint at
`169.254.169.254` or a sister internal service), but it broke legitimate
on-prem deployments that serve their own token endpoint at the same
host:port as the registry.
[#2258](google/go-containerregistry#2258)
tracked the discussion;
[#2302](google/go-containerregistry#2302)
implements the agreed fix: keep the cross-host SSRF block, but skip the
private-IP check when the realm URL host AND port match the registry
host:port.

## Transitive dependency changes

Pulled in by `go-containerregistry` v0.21.6's `go.mod` via MVS
resolution:

- `docker/cli` v29.4.0 → v29.4.3
- `moby/moby/api` v1.54.1 → v1.54.2
- `moby/moby/client` v0.4.0 → v0.4.1
- `docker/go-connections` v0.6.0 → v0.7.0
- `klauspost/compress` v1.18.5 → v1.18.6
- `golang.org/x/{crypto,mod,net,sys,term,text,tools}` — minor bumps

Dropped (v0.21.6 removed estargz support in
[go-containerregistry#2288](google/go-containerregistry#2288)):

- `containerd/stargz-snapshotter/estargz` (indirect)
- `vbatts/tar-split` (indirect)

## Test fixture update

`images/manifest_test.go` is updated for the unrelated OCI-spec
compliance change in
[go-containerregistry#2269](google/go-containerregistry#2269):
`mutate.AppendManifests` now sets the index entry `ArtifactType` to the
image's `Config.MediaType` when the image manifest does not itself set
`artifactType`. For the Docker schema2 fixture in
`TestManifestListForImage_RemoteImage` this becomes
`"application/vnd.docker.container.image.v1+json"`
(`types.DockerConfigJSON`).

## Test plan

- [x] `go test -count=1 ./...` passes (155 tests).
- [x] New `TestPushDockerArchive_BearerAuthSameHostLoopbackRealm` fails
on v0.21.5 with the exact NCN-114223 error (`invalid realm in
www-authenticate: realm host "127.0.0.1" is a private or link-local
address`) and passes on v0.21.6 — bisected to confirm it is not a
tautology.
- [x] `go build ./...` passes.
- [x] `golangci-lint run ./...` clean.
- [ ] Manual verification against an on-prem Harbor with realm host ==
registry host on an RFC1918 IP (e.g. the reproducer environment in
NCN-114223).

## Out of scope

The two pre-existing govulncheck stdlib findings (`GO-2026-4982`,
`GO-2026-4980`, `GO-2026-4971`, `GO-2026-4918` — all `go1.25.x` fixed in
`go1.25.10`) are unrelated to this change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants