mutate: let Time and Canonical take tarball.LayerOption - #2403
Merged
Merged
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
mzihlmann
force-pushed
the
mutate-layer-options
branch
from
August 10, 2026 23:05
c26b088 to
67a976b
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2403 +/- ##
=======================================
Coverage 57.42% 57.42%
=======================================
Files 166 166
Lines 11558 11558
=======================================
Hits 6637 6637
Misses 4142 4142
Partials 779 779 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Subserial
approved these changes
Aug 11, 2026
Subserial
pushed a commit
to Subserial/go-containerregistry
that referenced
this pull request
Aug 18, 2026
Subserial
pushed a commit
to Subserial/go-containerregistry
that referenced
this pull request
Aug 18, 2026
1 task
social4hyq
pushed a commit
to social4hyq/homebrew-core
that referenced
this pull request
Sep 20, 2026
crane 0.22.0 Created-by: HarmonybrewBot Commit-by: HarmonybrewBot Merged-by: HarmonybrewBot Description: Created by `brew bump` --- Created with `brew bump-formula-pr`.<details> <summary>release notes</summary> <pre>## What's Changed * mutate: let Time and Canonical take tarball.LayerOption by @mzihlmann in google/go-containerregistry#2403 * build: add multi-architecture Cloud Build configurations for crane, gcrane, and krane by @tprussak in google/go-containerregistry#2412 * remote: resolve push-check credentials against the repository by @mzihlmann in google/go-containerregistry#2411 * Allow single-character repository paths by @semx in google/go-containerregistry#2407 * fix: add missing substitutions and workspace cleanup to new build files by @tprussak in google/go-containerregistry#2413 * remote: retry failed Puller and Pusher initialization by @iahsanGill in google/go-containerregistry#2406 * build(deps): bump the actions group across 1 directory with 8 updates by @dependabot[bot] in google/go-containerregistry#2405 * build(deps): bump the go-deps group across 1 directory with 3 updates by @dependabot[bot] in google/go-containerregistry#2415 * go.mod: bump Go version + add toolchain directive to replace .go-version file by @Subserial in google/go-containerregistry#2416 * fix: Fix new build options and provenance by @tprussak in google/go-containerregistry#2417 * fix(build): unify new build flow into cloudbuild_v2.yaml by @tprussak in google/go-containerregistry#2419 ## New Contributors * @mzihlmann made their first contribution in google/go-containerregistry#2403 * @tprussak made their first contribution in google/go-containerregistry#2412 * @semx made their first contribution in google/go-containerregistry#2407 **Full Changelog**: https://github.com/google/go-containerregistry/compare/v0.21.9...v0.21.10</pre> <p>View the full release notes at <a href="https://github.com/google/go-containerregistry/releases/tag/v0.22.0">https://github.com/google/go-containerregistry/releases/tag/v0.22.0</a>.</p> </details> <hr> See merge request: Harmonybrew/homebrew-core!17674
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Timerebuilds the image ontoempty.Imageand re-tars every layer, so every layer gets compressed again.layerTimealways gzips and callstarball.LayerFromOpenerwith no options, so a rebuilt layer is always atypes.DockerLayer. An OCI image comes back as docker schema2 and a zstd layer is silently downgraded to gzip.Canonicalinherits both.This threads
tarball.LayerOptionthrough toLayerFromOpenerand hands the opener the uncompressed tar instead of pre-gzipping it. The layer is then compressed once, in the codec the caller asked for. Pair it with the existingmutate.MediaTypeandmutate.ConfigMediaTypeto bring the manifest and config along.The options are variadic so existing call sites are unaffected, and with none passed the output is byte identical to before. I checked that across docker and oci, gzip and zstd, uncompressed, foreign and multi layer images. One incompatibility remains,
TimeandCanonicalcan no longer be assigned to afunc(v1.Image) (v1.Image, error)variable.