Remove docker/docker as a dependency#2298
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: rh-roman The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository YAML (base), Central YAML (inherited) Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
WalkthroughThe change replaces Docker archive and credential types with Moby, local filesystem, and Podman equivalents. Archive extraction updates decompression, tar reading, metadata handling, xattrs, timestamps, and platform-specific behavior. ChangesArchive and credential migration
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant ApplyLayer
participant DecompressStream
participant tar.Reader
participant FilesystemHelpers
ApplyLayer->>DecompressStream: decompress layer stream
DecompressStream->>tar.Reader: provide tar stream
tar.Reader->>FilesystemHelpers: apply files, xattrs, and timestamps
Suggested reviewers: 🚥 Pre-merge checks | ✅ 14 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (14 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
pkg/cli/image/manifest/dockercredentials/credential_store_factory.go (1)
37-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSimplify the credential copy.
findAuthenticationreturnscontainertypes.DockerAuthConfig, so this field-by-field literal is redundant; pass&authCfgdirectly toNewDynamicCredentialStoreinstead.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/cli/image/manifest/dockercredentials/credential_store_factory.go` around lines 37 - 46, The credential creation in CredentialStoreFactory is doing a redundant field-by-field copy after findAuthentication already returns a containertypes.DockerAuthConfig. Update the return in CredentialStoreFactory to pass the authCfg value directly into NewDynamicCredentialStore, keeping the existing error handling and the nocreds fallback unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/cli/image/archive/archive.go`:
- Around line 81-89: The RemapIDs type currently cannot be safely created
outside its package because mappings is unexported, and Alter will panic if
mappings is nil. Add a constructor or exported setter for RemapIDs so callers
can provide the moby_user.IdentityMapping, and update Alter to guard against a
nil mappings value before calling ToHost. Use the RemapIDs and Alter symbols to
locate and fix the construction and nil-handling path.
---
Nitpick comments:
In `@pkg/cli/image/manifest/dockercredentials/credential_store_factory.go`:
- Around line 37-46: The credential creation in CredentialStoreFactory is doing
a redundant field-by-field copy after findAuthentication already returns a
containertypes.DockerAuthConfig. Update the return in CredentialStoreFactory to
pass the authCfg value directly into NewDynamicCredentialStore, keeping the
existing error handling and the nocreds fallback unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 753fb51d-28d5-48e2-8898-8789271e9a99
⛔ Files ignored due to path filters (139)
go.sumis excluded by!**/*.sumvendor/github.com/docker/docker/AUTHORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/NOTICEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/blkiodev/blkio.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/common/id_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/change_type.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/change_types.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/commit.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/create_request.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/disk_usage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/exec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/filesystem_change.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/health.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/network_settings.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/options.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/port.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/state.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/stats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/top_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/update_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/wait_exit_error.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/wait_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/waitcondition.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/filters_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/mount/mount.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/endpoint.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/ipam.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/authconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/authenticate.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/registry.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/storage/driver_data.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/strslice/strslice.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/common.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/secret.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service_create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service_update_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/swarm.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/task.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/versions/compare.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/archive_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/changes_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/copy_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/diff_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/path_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/utils.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/whiteouts_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/wrap_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir_others.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/idtools/idtools.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/idtools/idtools_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/readers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/writeflusher.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/writers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/pools/pools.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/args_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes_nowindows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/init_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/utimes_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/utimes_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/nat.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/sort.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/.golangci.yamlis excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/client.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container_stats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container_update.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/distribution.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/event.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/exec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/image.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/misc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/plugin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_configs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_secrets.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_service.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_task.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/tar.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/volume.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/docker-image-spec/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/docker-image-spec/specs-go/v1/image.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/go-archive/archive.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/go-archive/xattr_supported_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/pkg/stdcopy/stdcopy.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/json_error.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/message.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/progress.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/auth_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/authconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/registry.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/search.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/client/pkg/jsonmessage/jsonmessage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/patternmatcher/patternmatcher.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/sys/atomicwriter/atomicwriter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/aec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/ansi.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/builder.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/sample.gifis excluded by!**/*.gif,!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/sgr.gois excluded by!vendor/**,!**/vendor/**vendor/modules.txtis excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (7)
go.modpkg/cli/admin/release/new.gopkg/cli/image/archive/archive.gopkg/cli/image/archive/archive_linux.gopkg/cli/image/archive/archive_other.gopkg/cli/image/extract/extract.gopkg/cli/image/manifest/dockercredentials/credential_store_factory.go
|
/retest |
|
/hold |
ardaguclu
left a comment
There was a problem hiding this comment.
Thank you for this PR. I am very supportive of dropping this dependency from the repository.
I have dropped a few comments. Let me know your thoughts about them. Basically we need documentations about what we copy, from where we copy, etc. Lastly, we definitely need to extensively test those changes.
| trBuf := pools.BufioReader32KPool.Get(tr) | ||
| defer pools.BufioReader32KPool.Put(trBuf) | ||
| trBuf := bufioReader32KPool.Get().(*bufio.Reader) | ||
| trBuf.Reset(tr) |
There was a problem hiding this comment.
Isn't this a functional change?. I think if we keep this PR only with mechanical changes, we can push forward.
There was a problem hiding this comment.
Kind of. Moby pools create a reader pool in the same way (source). Previously this would have been a shared pool with other components, but without the docker dependency archive gets its own pool.
Interestingly, two years ago they stopped using pools here moby/moby@a93a079cb. We could follow their lead and remove this entirely.
There was a problem hiding this comment.
I have a commit to remove this dependency, will see how it does in CI
There was a problem hiding this comment.
It might make sense running /payload 5.0 nightly blocking and /payload 5.0 nightly informing to get better signal
| unixMaxTime = time.Unix(0, 1<<63-1) | ||
| ) | ||
|
|
||
| // chtimes clamps atime/mtime to a valid Unix range before calling os.Chtimes. |
There was a problem hiding this comment.
Document about where do we copy this from
There was a problem hiding this comment.
Done, added attribution to all the functions that were copied over and a NOTICE file.
There was a problem hiding this comment.
fwiw, I was working on a similar patch for oc and ended up replacing packages as follows (didn't need to copy any functions):
- "github.com/docker/docker/pkg/archive" -> "github.com/moby/go-archive"
- "github.com/docker/docker/pkg/idtools -> "go.podman.io/storage/pkg/idtools"
- "github.com/docker/docker/pkg/pools" -> "github.com/moby/moby/v2/pkg/pools"
- "github.com/docker/docker/pkg/system-> "go.podman.io/storage/pkg/system"
I had to change idtools.Identity to idtools.IDPair, but that was about the only "real" code change.
There was a problem hiding this comment.
@efussi if those replacings work, that would be simpler and less regression prone.
There was a problem hiding this comment.
My testing wasn't very comprehensive, but I successfully used oc image mirror which I think touches the main code paths here.
There was a problem hiding this comment.
Feel free to open a PR, if you have worked on it already.
There was a problem hiding this comment.
@ardaguclu I am afraid I am currently too tied up in the work for my employer to babysit a PR like this. But here are the automated patches that we use for our private build of oc from the release-4.20 branch (this includes some unrelated CVE fixes):
# see https://github.com/moby/moby#go-modules
git grep -l '"github.com/docker/docker/api/types' -- pkg/ | xargs -r sed -i -e 's@"github.com/docker/docker/api/types@"github.com/moby/moby/api/types@'
# TODO: should be able to remove the following 3 patches once https://github.com/openshift/oc/pull/2277 is available
# see https://github.com/containers/image/blob/main/README.md
git grep -l '"github.com/containers/image/v5' -- pkg/ | xargs -r sed -i -e 's@"github.com/containers/image/v5@"go.podman.io/image/v5@'
# see https://github.com/containers/storage/blob/main/README.md
sed -i -e 's@"github.com/docker/docker/pkg/system@"go.podman.io/storage/pkg/system@' pkg/cli/image/archive/archive*.go
# see https://github.com/docker/docker/blob/v28.5.2/pkg/system/filesys.go#L25
sed -i -e 's/system.MkdirAll/os.MkdirAll/' pkg/cli/image/archive/archive.go
# replace docker/docker/pkg/idtools by go.podman.io/storage/pkg/idtools
sed -i -e 's/"github.com\/docker\/docker\/pkg\/idtools"/"go.podman.io\/storage\/pkg\/idtools"/' pkg/cli/image/archive/archive.go
sed -i -e 's/idtools.Identity/idtools.IDPair/' -e 's/idtools.IDPairMapping/idtools.IDMappings/' pkg/cli/image/archive/archive.go
# replace docker/docker/pkg/archive by moby/go-archive
sed -i -e 's/.*\s"github.com\/docker\/docker\/pkg\/archive"/\'$'\t"github.com\/moby\/go-archive\/compression"/' pkg/cli/image/extract/extract.go pkg/cli/admin/release/new.go
git grep -l '"github.com/docker/docker/pkg/archive' -- pkg/ | xargs -r sed -i -e 's@"github.com/docker/docker/pkg/archive@"github.com/moby/go-archive@'
sed -i -e '/moby\/go-archive/a\'$'\t"github.com/moby/go-archive/compression"' pkg/cli/image/archive/archive.go
sed -i -e 's/= .*DecompressStream(/= compression.DecompressStream(/' pkg/cli/image/archive/archive.go pkg/cli/image/extract/extract.go pkg/cli/admin/release/new.go
# replace docker/docker/pkg/pools by moby/moby/v2/pkg/pools
sed -i -e 's/"github.com\/docker\/docker\/pkg\/pools"/"github.com\/moby\/moby\/v2\/pkg\/pools"/' pkg/cli/image/archive/archive.go
go get \
github.com/Azure/go-ntlmssp@v0.1.1 \
github.com/fsouza/go-dockerclient@v1.13.1 \
github.com/go-git/go-billy/v5@v5.9.0 \
github.com/go-git/go-git/v5@v5.19.1 \
github.com/go-ldap/ldap/v3@v3.4.13 \
github.com/google/go-containerregistry@v0.21.6 \
github.com/moby/moby/api@v1.54.2 \
github.com/moby/moby/v2@v2.0.0-beta.15 \
github.com/opencontainers/runc@v1.3.6 \
github.com/sigstore/fulcio@v1.8.6 \
go.podman.io/image/v5@v5.40.0 \
go.podman.io/storage@v1.63.0 \
golang.org/x/crypto@v0.54.0 \
k8s.io/kubectl@v0.33.13
go mod tidy
go mod vendor
There was a problem hiding this comment.
Docker took pools out entirely (for the paths that we use), we can follow their lead on that. That way we don't need to depend on github.com/moby/moby/v2/pkg/pools. Per their docs /v2/ isn't meant to be consumed directly anyway (per the readme).
idtools mostly moved to moby/sys/user, except for the one struct I defined.
Good call on go.podman.io/storage, looks like it can replace methods I copied over. I pushed a new version to see how it holds up in CI.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
pkg/cli/image/archive/archive.go (2)
454-469: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winPreserve Windows creation times.
chtimesonly updates access and modification times; add the Windows-specificsetCTimestep afteros.Chtimesso extracted files keep their creation-time metadata.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/cli/image/archive/archive.go` around lines 454 - 469, Update chtimes to call the Windows-specific setCTime step after os.Chtimes succeeds, passing the extracted file name and appropriate creation-time metadata so file creation times are preserved while retaining the existing timestamp clamping behavior.
454-457: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDerive the
os.Chtimesupper bound from the target arch.oc.specstill buildsGOARCH=386, sotime.Unix(0, 1<<63-1)is not a safe universal max here; keep the 32-bit-specific clamp or compute the bound per target.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/cli/image/archive/archive.go` around lines 454 - 457, Update the unixMaxTime definition used by archive timestamp handling and os.Chtimes to derive its upper bound from the target architecture, preserving the 32-bit-specific clamp required for GOARCH=386. Keep unixEpoch unchanged and ensure the resulting bound is safe for each supported target rather than universally using time.Unix(0, 1<<63-1).
🧹 Nitpick comments (2)
pkg/cli/image/archive/archive.go (2)
69-76: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDocument the new exported
Identitytype.Add a Go doc comment describing the UID/GID semantics and its use as
TarOptions.ChownOpts.As per coding guidelines, “all exported and unexported Go types, functions, and methods” require descriptive comments.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/cli/image/archive/archive.go` around lines 69 - 76, Document the exported Identity type with a Go doc comment beginning with “Identity” that describes its UID/GID semantics and explains its use as TarOptions.ChownOpts. Leave RemapIDs unchanged.Source: Coding guidelines
462-469: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winWrap timestamp errors with path context.
Return
fmt.Errorf("set times for %q: %w", name, err)instead of exposing the rawos.Chtimeserror. Also add tests for before-epoch, after-max, directory, hardlink, symlink, and unsupported-platform cases.As per coding guidelines, errors must be wrapped with meaningful context, and all changes should include unit test additions or changes.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/cli/image/archive/archive.go` around lines 462 - 469, Update chtimes to capture errors from os.Chtimes and wrap them with the file path using the requested “set times for %q” context while preserving the existing timestamp normalization. Add or update tests covering before-epoch, after-max, directory, hardlink, symlink, and unsupported-platform behavior.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@pkg/cli/image/archive/archive.go`:
- Around line 454-469: Update chtimes to call the Windows-specific setCTime step
after os.Chtimes succeeds, passing the extracted file name and appropriate
creation-time metadata so file creation times are preserved while retaining the
existing timestamp clamping behavior.
- Around line 454-457: Update the unixMaxTime definition used by archive
timestamp handling and os.Chtimes to derive its upper bound from the target
architecture, preserving the 32-bit-specific clamp required for GOARCH=386. Keep
unixEpoch unchanged and ensure the resulting bound is safe for each supported
target rather than universally using time.Unix(0, 1<<63-1).
---
Nitpick comments:
In `@pkg/cli/image/archive/archive.go`:
- Around line 69-76: Document the exported Identity type with a Go doc comment
beginning with “Identity” that describes its UID/GID semantics and explains its
use as TarOptions.ChownOpts. Leave RemapIDs unchanged.
- Around line 462-469: Update chtimes to capture errors from os.Chtimes and wrap
them with the file path using the requested “set times for %q” context while
preserving the existing timestamp normalization. Add or update tests covering
before-epoch, after-max, directory, hardlink, symlink, and unsupported-platform
behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 1aa2854b-a917-4651-96db-d6674a01dbe3
📒 Files selected for processing (1)
pkg/cli/image/archive/archive.go
moby/go-archive is the standalone archive module extracted from docker/docker; use it directly rather than going through docker/docker's re-export shim.
pkg/pools, pkg/system, and pkg/idtools have no stable API outside docker/docker. Replace with stdlib (bufio sync.Pool, os.MkdirAll/Chtimes), direct unix syscalls (lgetxattr/lsetxattr/UtimesNanoAt), and moby/sys/user for identity mapping. Replace api/types/registry.AuthConfig with the podman-equivalent DockerAuthConfig already used elsewhere in this package.
v1.13.2 drops docker/docker in favour of moby/moby, removing the last transitive dependency on github.com/docker/docker.
The bufioReader32KPool (a sync.Pool of 32KB bufio.Reader instances) wrapping the tar.Reader in unpackLayer provided no real benefit: - io.Copy already allocates its own internal 32KB buffer, making the bufio.Reader's buffer a second redundant copy buffer. - tar.Reader.Read() limits reads to the current entry's size, so a buffered reader cannot pre-fetch data across entry boundaries. - The AUFS hardlink path in the same function already passed tr directly (without buffering), with no ill effects. Moby reached the same conclusion and removed this pattern in moby/moby@a93a079cb ("Remove use of pools in archive"). Follow suit by passing tr directly to createTarFile and dropping the pool, bufio, and sync imports. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
680405a to
e6b58d8
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@go.mod`:
- Around line 26-36: Update the github.com/moby/buildkit dependency in go.mod
from v0.12.5 to v0.28.1 or newer, ensuring the module resolution files reflect
the upgraded version and its transitive dependencies.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 26a2c94d-0564-40a5-ae08-238440bc5103
⛔ Files ignored due to path filters (139)
go.sumis excluded by!**/*.sumvendor/github.com/docker/docker/AUTHORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/NOTICEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/blkiodev/blkio.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/common/id_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/change_type.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/change_types.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/commit.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/create_request.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/disk_usage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/exec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/filesystem_change.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/health.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/hostconfig_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/network_settings.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/options.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/port.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/state.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/stats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/top_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/update_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/wait_exit_error.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/wait_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/container/waitcondition.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/filters_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/filters/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/mount/mount.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/endpoint.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/ipam.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/network/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/authconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/authenticate.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/registry/registry.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/storage/driver_data.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/strslice/strslice.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/common.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/secret.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service_create_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/service_update_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/swarm.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/swarm/task.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/api/types/versions/compare.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/archive_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/changes_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/copy_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/diff_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/path_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/utils.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/whiteouts_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/archive/wrap_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/homedir/homedir_others.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/idtools/idtools.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/idtools/idtools_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/readers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/writeflusher.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/ioutils/writers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/pools/pools.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/args_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes_nowindows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/chtimes_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/filesys_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/init_windows.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/utimes_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/utimes_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/nat.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/docker/go-connections/nat/sort.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/.golangci.yamlis excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/client.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container_stats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/container_update.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/distribution.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/event.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/exec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/image.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/misc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/network.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/plugin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_configs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_secrets.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_service.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/swarm_task.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/tar.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/fsouza/go-dockerclient/volume.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/docker-image-spec/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/docker-image-spec/specs-go/v1/image.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/go-archive/archive.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/go-archive/xattr_supported_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/pkg/stdcopy/stdcopy.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/json_error.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/message.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/jsonstream/progress.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/auth_response.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/authconfig.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/registry.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/api/types/registry/search.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/moby/client/pkg/jsonmessage/jsonmessage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/patternmatcher/patternmatcher.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/moby/sys/atomicwriter/atomicwriter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/aec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/ansi.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/builder.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/sample.gifis excluded by!**/*.gif,!vendor/**,!**/vendor/**vendor/github.com/morikuni/aec/sgr.gois excluded by!vendor/**,!**/vendor/**vendor/modules.txtis excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (7)
go.modpkg/cli/admin/release/new.gopkg/cli/image/archive/archive.gopkg/cli/image/archive/archive_linux.gopkg/cli/image/archive/archive_other.gopkg/cli/image/extract/extract.gopkg/cli/image/manifest/dockercredentials/credential_store_factory.go
🚧 Files skipped from review as they are similar to previous changes (6)
- pkg/cli/image/extract/extract.go
- pkg/cli/image/manifest/dockercredentials/credential_store_factory.go
- pkg/cli/image/archive/archive_linux.go
- pkg/cli/admin/release/new.go
- pkg/cli/image/archive/archive_other.go
- pkg/cli/image/archive/archive.go
Some functions need to be copied over from Docker/Moby before dropping the dependency entirely.
f42f376 to
768976b
Compare
| Alter(*tar.Header) (bool, error) | ||
| } | ||
|
|
||
| // Identity holds a UID and GID pair. |
There was a problem hiding this comment.
Could we use idtools.IDPair from go.podman.io/storage/pkg/idtools here?
There was a problem hiding this comment.
Structurally they are the same so we could. Only reason I have to argue against it is that TarOptions is exported, so Identity is also exported. Exporting someone else's struct as our API is a little weird, but not the end of the world. We were doing that previously with Docker's struct, and ran into this problem when they made it internal.
|
/retest |
|
@rh-roman: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
|
/payload 5.0 nightly blocking |
|
@rh-roman: trigger 14 job(s) of type blocking for the nightly release of OCP 5.0
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/a9b10a00-80f9-11f1-83f0-3d458e49a18d-0 |
|
/payload 5.0 nightly informing |
|
@rh-roman: trigger 67 job(s) of type informing for the nightly release of OCP 5.0
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/b5d8c390-80f9-11f1-92d8-397131414b03-0 |
Per moby/moby#52404
Although
ocdoesn't use a lot of functionality fromdocker/docker, it will get flagged any time CVEs are found in docker (like https://www.cve.org/CVERecord?id=CVE-2026-42306).Updating
octo not depend on docker/docker.Summary by CodeRabbit
Bug Fixes
Compatibility