Skip to content

Remove docker/docker as a dependency#2298

Open
rh-roman wants to merge 9 commits into
openshift:mainfrom
rh-roman:drop-docker-exp
Open

Remove docker/docker as a dependency#2298
rh-roman wants to merge 9 commits into
openshift:mainfrom
rh-roman:drop-docker-exp

Conversation

@rh-roman

@rh-roman rh-roman commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Per moby/moby#52404

Starting with Docker v29, the Go module github.com/docker/docker is deprecated and will no longer be updated.

Although oc doesn't use a lot of functionality from docker/docker, it will get flagged any time CVEs are found in docker (like https://www.cve.org/CVERecord?id=CVE-2026-42306).

Updating oc to not depend on docker/docker.

Summary by CodeRabbit

  • Bug Fixes

    • Improved image archive extraction and decompression across supported platforms.
    • Enhanced handling of file ownership, timestamps, extended attributes, and overlay filesystem metadata.
    • Improved compatibility when extracting archives on systems with limited filesystem feature support.
    • Updated container registry credential handling for more reliable image authentication.
  • Compatibility

    • Updated archive and container image components to newer underlying implementations.

@openshift-ci
openshift-ci Bot requested review from atiratree and ingvagabund July 6, 2026 13:09
@openshift-ci

openshift-ci Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: rh-roman
Once this PR has been reviewed and has the lgtm label, please assign atiratree for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 964d8202-840e-4b38-b81e-6764bb3e814f

📥 Commits

Reviewing files that changed from the base of the PR and between f42f376 and 768976b.

📒 Files selected for processing (2)
  • pkg/cli/image/archive/archive.go
  • pkg/cli/image/archive/archive_linux.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • pkg/cli/image/archive/archive_linux.go
  • pkg/cli/image/archive/archive.go

Walkthrough

The 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.

Changes

Archive and credential migration

Layer / File(s) Summary
Archive contracts and module requirements
go.mod, pkg/cli/image/archive/archive.go, pkg/cli/image/archive/archive_other.go
Module requirements and archive types now use Moby packages, local identity definitions, and platform-specific archive contracts.
Platform filesystem helpers
pkg/cli/image/archive/archive_linux.go, pkg/cli/image/archive/archive_other.go
Local xattr and timestamp helpers implement Linux behavior and unsupported-platform stubs, including errno-specific handling.
Archive extraction flow
pkg/cli/image/archive/archive.go, pkg/cli/admin/release/new.go, pkg/cli/image/extract/extract.go
Extraction uses Moby decompression, direct tar reads, local filesystem operations, deferred directory timestamps, and updated xattr and symlink timestamp handling.
Credential type migration
pkg/cli/image/manifest/dockercredentials/credential_store_factory.go
Credential resolution and dynamic credential storage now use Podman’s DockerAuthConfig type.

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
Loading

Suggested reviewers: atiratree, ingvagabund

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (14 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: removing github.com/docker/docker as a dependency.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed HEAD changes only pkg/cli/image/archive/archive.go and archive_linux.go; no _test.go files or Ginkgo titles appear in the diff.
Test Structure And Quality ✅ Passed No Ginkgo or other test files were changed in this PR; only archive.go and archive_linux.go were modified.
Microshift Test Compatibility ✅ Passed PASS: The PR only changes archive/decompression code; no Ginkgo e2e tests or MicroShift-relevant OpenShift APIs were added.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new _test.go files or Ginkgo constructs were added; the PR only changes dependency and archive/credential code.
Topology-Aware Scheduling Compatibility ✅ Passed PASS: The only modified files are image archive helpers; the diff adds no manifests/controllers or topology/scheduling fields (nodeSelector, affinity, PDB, replicas).
Ote Binary Stdout Contract ✅ Passed No changed main/init/TestMain/setup code writes to stdout; added prints use explicit Out/ErrOut writers, and the only init() added is pure.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed PASS: The diff only touches archive/CLI/vendor code; no new Ginkgo e2e tests or IPv4/public-network assumptions were added.
No-Weak-Crypto ✅ Passed Touched files add archive/credential plumbing only; searches found no MD5/SHA1/DES/RC4/ECB or custom crypto, and no insecure secret comparisons.
Container-Privileges ✅ Passed PR only changes Go archive code; it touches no K8s/container manifests and adds no privileged or securityContext settings.
No-Sensitive-Data-In-Logs ✅ Passed No new logging was added in the patch; the only changed files add xattr/timestamp helpers and comments, not sensitive-data log output.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
pkg/cli/image/manifest/dockercredentials/credential_store_factory.go (1)

37-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Simplify the credential copy. findAuthentication returns containertypes.DockerAuthConfig, so this field-by-field literal is redundant; pass &authCfg directly to NewDynamicCredentialStore instead.

🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between a7ad572 and 08fa3b8.

⛔ Files ignored due to path filters (139)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/docker/docker/AUTHORS is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/NOTICE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/blkiodev/blkio.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/common/id_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/change_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/change_types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/commit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/create_request.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/disk_usage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/exec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/filesystem_change.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/health.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/network_settings.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/options.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/port.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/state.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/stats.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/top_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/update_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/wait_exit_error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/wait_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/waitcondition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/parse.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/mount/mount.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/endpoint.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/ipam.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/authconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/authenticate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/registry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/storage/driver_data.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/strslice/strslice.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/common.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/runtime.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/secret.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service_create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service_update_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/swarm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/task.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/versions/compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/archive_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/changes_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/copy_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/diff_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/path_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/utils.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/whiteouts_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/wrap_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir_others.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/idtools/idtools.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/idtools/idtools_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/readers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/writers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/pools/pools.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/args_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes_nowindows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/init_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/utimes_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/nat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/parse.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/sort.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/.golangci.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container_stats.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container_update.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/distribution.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/event.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/exec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/image.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/misc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/plugin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_configs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_secrets.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_service.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_task.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/tar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/volume.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/docker-image-spec/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/go-archive/archive.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/go-archive/xattr_supported_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/pkg/stdcopy/stdcopy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/json_error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/message.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/progress.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/auth_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/authconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/registry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/search.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/client/pkg/jsonmessage/jsonmessage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/patternmatcher/patternmatcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/sys/atomicwriter/atomicwriter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/aec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/ansi.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/builder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/sample.gif is excluded by !**/*.gif, !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/sgr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (7)
  • go.mod
  • pkg/cli/admin/release/new.go
  • pkg/cli/image/archive/archive.go
  • pkg/cli/image/archive/archive_linux.go
  • pkg/cli/image/archive/archive_other.go
  • pkg/cli/image/extract/extract.go
  • pkg/cli/image/manifest/dockercredentials/credential_store_factory.go

Comment thread pkg/cli/image/archive/archive.go
@rh-roman

rh-roman commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/retest

@rh-roman

rh-roman commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/hold

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 7, 2026
Comment thread pkg/cli/image/archive/archive.go Outdated

@ardaguclu ardaguclu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Comment thread pkg/cli/image/archive/archive.go Outdated
trBuf := pools.BufioReader32KPool.Get(tr)
defer pools.BufioReader32KPool.Put(trBuf)
trBuf := bufioReader32KPool.Get().(*bufio.Reader)
trBuf.Reset(tr)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Isn't this a functional change?. I think if we keep this PR only with mechanical changes, we can push forward.

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.

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.

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.

I have a commit to remove this dependency, will see how it does in CI

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It might make sense running /payload 5.0 nightly blocking and /payload 5.0 nightly informing to get better signal

Comment thread pkg/cli/image/archive/archive.go Outdated
unixMaxTime = time.Unix(0, 1<<63-1)
)

// chtimes clamps atime/mtime to a valid Unix range before calling os.Chtimes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Document about where do we copy this from

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.

Done, added attribution to all the functions that were copied over and a NOTICE file.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@efussi if those replacings work, that would be simpler and less regression prone.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

My testing wasn't very comprehensive, but I successfully used oc image mirror which I think touches the main code paths here.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Feel free to open a PR, if you have worked on it already.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@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

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.

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.

Comment thread pkg/cli/image/archive/archive_linux.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 win

Preserve Windows creation times.
chtimes only updates access and modification times; add the Windows-specific setCTime step after os.Chtimes so 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 win

Derive the os.Chtimes upper bound from the target arch. oc.spec still builds GOARCH=386, so time.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 win

Document the new exported Identity type.

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 win

Wrap timestamp errors with path context.

Return fmt.Errorf("set times for %q: %w", name, err) instead of exposing the raw os.Chtimes error. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 08fa3b8 and 680405a.

📒 Files selected for processing (1)
  • pkg/cli/image/archive/archive.go

rh-roman and others added 6 commits July 13, 2026 08:29
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>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 680405a and e6b58d8.

⛔ Files ignored due to path filters (139)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/docker/docker/AUTHORS is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/NOTICE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/blkiodev/blkio.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/common/id_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/change_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/change_types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/commit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/create_request.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/disk_usage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/exec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/filesystem_change.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/health.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/network_settings.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/options.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/port.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/state.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/stats.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/top_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/update_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/wait_exit_error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/wait_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/container/waitcondition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/filters/parse.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/mount/mount.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/endpoint.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/ipam.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/network/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/authconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/authenticate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/registry/registry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/storage/driver_data.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/strslice/strslice.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/common.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/runtime.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/secret.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service_create_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/service_update_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/swarm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/swarm/task.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/api/types/versions/compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/archive_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/changes_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/copy_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/diff_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/path_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/utils.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/whiteouts_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/archive/wrap_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/homedir/homedir_others.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/idtools/idtools.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/idtools/idtools_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/readers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/ioutils/writers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/pools/pools.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/args_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes_nowindows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/chtimes_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/filesys_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/init_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/utimes_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/nat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/parse.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/docker/go-connections/nat/sort.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/.golangci.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container_stats.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/container_update.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/distribution.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/event.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/exec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/image.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/misc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/plugin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_configs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_secrets.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_service.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/swarm_task.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/tar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/fsouza/go-dockerclient/volume.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/docker-image-spec/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/go-archive/archive.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/go-archive/xattr_supported_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/pkg/stdcopy/stdcopy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/json_error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/message.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/jsonstream/progress.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/auth_response.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/authconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/registry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/api/types/registry/search.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/moby/client/pkg/jsonmessage/jsonmessage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/patternmatcher/patternmatcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/moby/sys/atomicwriter/atomicwriter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/aec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/ansi.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/builder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/sample.gif is excluded by !**/*.gif, !vendor/**, !**/vendor/**
  • vendor/github.com/morikuni/aec/sgr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (7)
  • go.mod
  • pkg/cli/admin/release/new.go
  • pkg/cli/image/archive/archive.go
  • pkg/cli/image/archive/archive_linux.go
  • pkg/cli/image/archive/archive_other.go
  • pkg/cli/image/extract/extract.go
  • pkg/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

Comment thread go.mod
Some functions need to be copied over from Docker/Moby before dropping
the dependency entirely.
Alter(*tar.Header) (bool, error)
}

// Identity holds a UID and GID pair.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Could we use idtools.IDPair from go.podman.io/storage/pkg/idtools here?

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.

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.

@rh-roman

Copy link
Copy Markdown
Contributor Author

/retest

@openshift-ci

openshift-ci Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

@rh-roman: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/okd-scos-images 62d0b32 link true /test okd-scos-images

Full PR test history. Your PR dashboard.

Details

Instructions 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.

@rh-roman

Copy link
Copy Markdown
Contributor Author

/payload 5.0 nightly blocking

@openshift-ci

openshift-ci Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@rh-roman: trigger 14 job(s) of type blocking for the nightly release of OCP 5.0

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-upgrade-ovn-single-node
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-upgrade-fips
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-5.0-upgrade-from-stable-4.22-e2e-gcp-ovn-rt-upgrade
  • periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-azure-aks-ovn-conformance
  • periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-aws-ovn-conformance
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-serial-1of2
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-serial-2of2
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview-serial-1of3
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview-serial-2of3
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview-serial-3of3
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-ipv4
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-ipv6

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/a9b10a00-80f9-11f1-83f0-3d458e49a18d-0

@rh-roman

Copy link
Copy Markdown
Contributor Author

/payload 5.0 nightly informing

@openshift-ci

openshift-ci Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@rh-roman: trigger 67 job(s) of type informing for the nightly release of OCP 5.0

  • periodic-ci-openshift-release-main-nightly-5.0-console-aws
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-5.0-periodics-e2e-aws
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-csi
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-cgroupsv2
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-fips
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-csi
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-serial
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview-serial
  • periodic-ci-openshift-release-main-nightly-5.0-upgrade-from-stable-4.22-e2e-aws-upgrade-ovn-single-node
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-upgrade-fips-no-nat-instance
  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-upgrade-out-of-change
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-upi
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-5.0-periodics-e2e-azure
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-azure-csi
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-serial
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-techpreview-serial-1of2
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-techpreview-serial-2of2
  • periodic-ci-openshift-release-main-ci-5.0-e2e-azure-ovn-upgrade-out-of-change
  • periodic-ci-openshift-release-main-cnv-nightly-5.0-deploy-azure-kubevirt-ovn
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-5.0-periodics-e2e-gcp
  • periodic-ci-openshift-release-main-ci-5.0-e2e-gcp-ovn
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-gcp-ovn-csi
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-gcp-ovn-rt
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-gcp-ovn-serial
  • periodic-ci-openshift-release-main-ci-5.0-e2e-gcp-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-5.0-e2e-gcp-ovn-techpreview-serial-1of2
  • periodic-ci-openshift-release-main-ci-5.0-e2e-gcp-ovn-techpreview-serial-2of2
  • periodic-ci-openshift-release-main-ci-5.0-upgrade-from-stable-4.22-e2e-gcp-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-5.0-e2e-gcp-ovn-upgrade
  • periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-azure-kubevirt-ovn
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-dualstack
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-dualstack-techpreview
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-ipv6-techpreview
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-serial-ipv4
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-serial-virtualmedia-1of2
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-serial-virtualmedia-2of2
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-techpreview
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-5.0-upgrade-from-stable-4.22-e2e-metal-ipi-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-serial-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-serial-ovn-dualstack
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ipi-upgrade-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-5.0-upgrade-from-stable-4.22-e2e-metal-ipi-upgrade-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-5.0-metal-ovn-single-node-recert-cluster-rename
  • periodic-ci-openshift-microshift-release-5.0-periodics-e2e-aws-ovn-ocp-conformance
  • periodic-ci-openshift-microshift-release-5.0-periodics-e2e-aws-ovn-ocp-conformance-serial
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-osd-ccs-gcp
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-proxy
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-single-node-live-iso
  • periodic-ci-openshift-eng-ocp-qe-perfscale-ci-main-aws-5.0-nightly-x86-payload-control-plane-6nodes
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-telco5g
  • periodic-ci-openshift-release-main-nightly-5.0-tls-scan
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-csi
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-serial
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-techpreview
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-techpreview-serial
  • periodic-ci-openshift-release-main-ci-5.0-upgrade-from-stable-4.22-e2e-vsphere-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-5.0-e2e-vsphere-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-upi
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-ovn-upi-serial
  • periodic-ci-openshift-release-main-nightly-5.0-e2e-vsphere-static-ovn

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/b5d8c390-80f9-11f1-92d8-397131414b03-0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants