Compare commits

...
Author SHA1 Message Date
mickael emirkanian 1c3c00dd7f ci: update workflows to test action
test the tracebit action

Signed-off-by: mickael emirkanian <mickael.emirkanian@docker.com>
2026-09-24 14:19:55 -04:00
Sebastiaan van Stijn 7fc2dff9bc Merge pull request #7325 from docker/dependabot/github_actions/codecov/codecov-action-7.1.1
build(deps): bump codecov/codecov-action from 7.0.0 to 7.1.1
2026-09-23 11:45:10 +02:00
dependabot[bot] ca5a266c81 build(deps): bump codecov/codecov-action from 7.0.0 to 7.1.1
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 7.0.0 to 7.1.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/fb8b3582c8e4def4969c97caa2f19720cb33a72f...303a32d7a59b442fa8d48b6a1cc6825c09c847a5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: 7.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-23 08:47:11 +00:00
Sebastiaan van Stijn 39f182cbaa Merge pull request #7323 from docker/dependabot/github_actions/docker-actions-72067bac81
build(deps): bump the docker-actions group with 3 updates
2026-09-23 01:10:38 +02:00
Sebastiaan van Stijn 0684ae0cc1 Merge pull request #7311 from docker/dependabot/github_actions/codeql-actions-f545b4e0f6
build(deps): bump the codeql-actions group across 1 directory with 3 updates
2026-09-23 01:09:09 +02:00
dependabot[bot] b7dc94c65f build(deps): bump the codeql-actions group across 1 directory with 3 updates
Bumps the codeql-actions group with 3 updates in the / directory: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/autobuild](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.37.9 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/cdf488f595d80d6e07e03d4674febd5ab45fa938...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

Updates `github/codeql-action/autobuild` from 4.37.9 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/cdf488f595d80d6e07e03d4674febd5ab45fa938...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

Updates `github/codeql-action/analyze` from 4.37.9 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/cdf488f595d80d6e07e03d4674febd5ab45fa938...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

---
updated-dependencies:
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-actions
- dependency-name: github/codeql-action/autobuild
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-actions
- dependency-name: github/codeql-action/init
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-22 08:45:09 +00:00
dependabot[bot] 12566dd80d build(deps): bump the docker-actions group with 3 updates
Bumps the docker-actions group with 3 updates: [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action), [docker/bake-action](https://github.com/docker/bake-action) and [docker/docker-agent-action/.github/workflows/review-pr.yml](https://github.com/docker/docker-agent-action).


Updates `docker/setup-buildx-action` from 4.3.0 to 4.4.0
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/37fe631027851001ddb9b187196cc803df7f5f0e...594f3bf4285d9ea8dc53c9a0c9c4092420091003)

Updates `docker/bake-action` from 7.3.0 to 7.4.0
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b...018cb6412ab401ebaa809aa5f85966b74628600f)

Updates `docker/docker-agent-action/.github/workflows/review-pr.yml` from 2.0.8 to 2.0.9
- [Release notes](https://github.com/docker/docker-agent-action/releases)
- [Commits](https://github.com/docker/docker-agent-action/compare/c3d5c9b1517c670f468086c577b8339ce2344b5e...3654ec391b070e247de2e2e3c1ff2519b6378b3a)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: 4.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-actions
- dependency-name: docker/bake-action
  dependency-version: 7.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-actions
- dependency-name: docker/docker-agent-action/.github/workflows/review-pr.yml
  dependency-version: 2.0.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docker-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-22 08:43:27 +00:00
Sebastiaan van Stijn 4167943209 Merge pull request #7320 from docker/dependabot/github_actions/docker-actions-67f84ccd89
build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml from 2.0.7 to 2.0.8 in the docker-actions group
2026-09-21 19:04:50 +02:00
Paweł Gronowski 9dcf8afb5d Merge pull request #7322 from thaJeztah/bump_version
update version to 29.8.2
2026-09-21 19:00:39 +02:00
Sebastiaan van Stijn 6fdced88c5 update version to 29.8.2
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-21 18:22:19 +02:00
dependabot[bot] 0a563b177a build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml
Bumps the docker-actions group with 1 update: [docker/docker-agent-action/.github/workflows/review-pr.yml](https://github.com/docker/docker-agent-action).


Updates `docker/docker-agent-action/.github/workflows/review-pr.yml` from 2.0.7 to 2.0.8
- [Release notes](https://github.com/docker/docker-agent-action/releases)
- [Commits](https://github.com/docker/docker-agent-action/compare/bd672e0d95c61bb79e899f1ea71d44e19b12f91f...c3d5c9b1517c670f468086c577b8339ce2344b5e)

---
updated-dependencies:
- dependency-name: docker/docker-agent-action/.github/workflows/review-pr.yml
  dependency-version: 2.0.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docker-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-21 08:42:49 +00:00
Paweł Gronowski 4a63305d74 Merge pull request #7297 from docker/dependabot/github_actions/docker-actions-4dc0240351
build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml from 2.0.5 to 2.0.7 in the docker-actions group across 1 directory
2026-09-15 13:21:13 +02:00
Paweł Gronowski 87ff477cb6 Merge pull request #7307 from thaJeztah/ci_ubuntu_2604
ci: update to Ubuntu 26.04 runners
2026-09-15 11:25:06 +02:00
Sebastiaan van Stijn 101ffc09eb ci: update to Ubuntu 26.04 runners
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-15 10:53:44 +02:00
dependabot[bot] 32ff1e7281 build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml
Bumps the docker-actions group with 1 update in the / directory: [docker/docker-agent-action/.github/workflows/review-pr.yml](https://github.com/docker/docker-agent-action).


Updates `docker/docker-agent-action/.github/workflows/review-pr.yml` from 2.0.5 to 2.0.7
- [Release notes](https://github.com/docker/docker-agent-action/releases)
- [Commits](https://github.com/docker/docker-agent-action/compare/06e1767af06263c93d712449cbf859778d9392ee...bd672e0d95c61bb79e899f1ea71d44e19b12f91f)

---
updated-dependencies:
- dependency-name: docker/docker-agent-action/.github/workflows/review-pr.yml
  dependency-version: 2.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docker-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-15 08:42:59 +00:00
Sebastiaan van Stijn d146e672a6 Merge pull request #7290 from vvoland/port-template
github: Port Moby pull request template
2026-09-14 21:05:21 +02:00
Paweł Gronowski ac976d9edb Merge pull request #7296 from keeltrace/keeltrace/history-timezone-test
cli/image: make history test timezone-independent
2026-09-14 18:09:19 +02:00
Paweł Gronowski 48baf6c322 Merge pull request #7306 from thaJeztah/bump_x_deps
vendor: update golang.org/x/* deps
2026-09-14 18:05:00 +02:00
Paweł Gronowski 47a06aa077 Merge pull request #7293 from thaJeztah/bump_uax29
vendor: github.com/clipperhouse/uax29/v2 v2.7.0
2026-09-14 18:03:28 +02:00
Paweł Gronowski 1bf3eb68ce Merge pull request #7295 from thaJeztah/bump_userns
vendor: github.com/moby/sys/userns v0.2.1
2026-09-14 18:03:05 +02:00
Sebastiaan van Stijn 60dffc9412 vendor: golang.org/x/net v0.59.0
Notable changes:

- all: upgrade go directive to at least 1.26.0
- http2: deprecate Transport and Server
- http2: use IDNA Lookup profile, not raw Punycode translation
    - addresses https://github.com/golang/go/issues/81010
- internal/httpcommon: remove Host header from server request

full diff: https://github.com/golang/net/compare/v0.58.0...v0.59.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:31:14 +02:00
Sebastiaan van Stijn b0a6803f9b vendor: golang.org/x/term v0.46.0
- all: upgrade go directive to at least 1.26.0
- term: process bytes returned with a read error
    - fixes: x/term: ReadLine discards data returned with io.EOF

full diff: https://github.com/golang/term/compare/v0.45.0...v0.46.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:30:22 +02:00
Sebastiaan van Stijn f90c2894a8 vendor: golang.org/x/text v0.42.0
full diff: https://github.com/golang/text/compare/v0.41.0...v0.42.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:29:43 +02:00
Sebastiaan van Stijn ed4de7d484 vendor: golang.org/x/time v0.16.0
- all: upgrade go directive to at least 1.26.0

full diff: https://github.com/golang/time/compare/v0.15.0...v0.16.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:28:24 +02:00
Sebastiaan van Stijn 74b7f5cf27 vendor: golang.org/x/mod v0.41.0
- all: upgrade go directive to at least 1.26.0

full diff: https://github.com/golang/mod/compare/v0.40.0...v0.41.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:27:47 +02:00
Sebastiaan van Stijn 824b68911b vendor: golang.org/x/sys v0.48.0
- cpu: add ppc64le POWER10 detection
- cpu: add basic support for GOARCH=sparc64
- cpu: disable AVX+ on netbsd/amd64
  relates to "runtime: async preemption corrupts AVX (YMM) state on netbsd/amd64"
- internal/cpu: detect RISC-V VLENB when the vector extension is available
- unix: add missing HWTSTAMP_* constants
- unix: add pidfd constants and type
- unix: add IoctlPidfdInfo
- unix: add IPMI interface
- unix: align Ifreq so its union accessors cannot fault
- unix: stop generating sparc termbits from the generic header
- windows: add SO_SNDTIMEO constant for socket options

full diff: https://github.com/golang/sys/compare/v0.47.0...v0.48.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:27:10 +02:00
Sebastiaan van Stijn dbad17f16f vendor: golang.org/x/sync v0.23.0
- all: upgrade go directive to at least 1.26.0
- semaphore: panic on negative capacity

full diff: https://github.com/golang/sync/compare/v0.22.0...v0.23.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-14 17:26:27 +02:00
KeelTrace eb8fab8023 cli/image: make history test timezone-independent
Signed-off-by: KeelTrace <218190424+keeltrace@users.noreply.github.com>
2026-09-12 10:01:56 -07:00
Sebastiaan van Stijn 7b322e4dc2 vendor: github.com/moby/sys/userns v0.2.1
userns: fix user-namespace detection on OpenVZ, where namespace inode
numbers are virtualized.

full diff: https://github.com/moby/sys/userns/compare/v0.2.0...v0.2.1

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-08 20:27:04 +02:00
Sebastiaan van Stijn 676ca0067b vendor: github.com/clipperhouse/uax29/v2 v2.7.0
- Adds Unicode 17 support
- Fast paths for ASCII
- ANSI escape sequences as grapheme clusters
- Implement UTF-8 C1 control sequences
- Implement 8-bit ANSI

Breaking change

The returned iterator type from FromString() and FromBytes() is now a pointer.
This will not present a problem if you are just using it in the typical way,
which is assigning to a local variable and iterating.

If you are embedding this iterator into another object, and therefore declaring
its type, this change might break your compilation. You’ll need to change to a
pointer type. Apologies if so — this seems like a small enough change that a
v3 would be a bit much.

full diff: https://github.com/clipperhouse/uax29/compare/v2.2.0...v2.7.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-07 09:21:26 +02:00
Paweł Gronowski ab989d8316 github: Port Moby pull request template
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-04 14:42:18 +02:00
Paweł Gronowski d306b9d600 Merge pull request #7287 from thaJeztah/bump_runewidth
vendor: github.com/mattn/go-runewidth v0.0.29
2026-09-04 14:40:50 +02:00
Paweł Gronowski 0ffb4c4e0b Merge pull request #7289 from thaJeztah/bump_cdi
vendor: tags.cncf.io/container-device-interface v1.1.1
2026-09-04 14:40:31 +02:00
Sebastiaan van Stijn e914d34ac3 vendor: tags.cncf.io/container-device-interface v1.1.1
removes some transitive dependencies

full diff: https://github.com/cncf-tags/container-device-interface/compare/v1.1.0...v1.1.1

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-04 11:35:43 +02:00
Sebastiaan van Stijn a6538bea40 Merge pull request #7286 from thaJeztah/bump_version
update version to 29.8.1
2026-09-04 00:48:15 +02:00
Paweł Gronowski 88096ef005 Merge pull request #7288 from thaJeztah/bump_jose
vendor: github.com/go-jose/go-jose/v4 v4.1.5
2026-09-03 23:47:32 +02:00
Sebastiaan van Stijn c50ce17c19 vendor: github.com/go-jose/go-jose/v4 v4.1.5
Fixed security issues

- cipher/cbc_hmac: don't panic on empty ciphertext
- cipher/cbc_hmac: don't panic on invalid key
- json: limit stack depth
- jwt: reject out-of-range NumericDate values
- Check alg against pubkey curve during verify.
- Reject malformed Ed25519 JWKs
- jws: choose verification key per-signature

Changed

- Verify OpaqueSigner's Public() return is public
- jws: skip signature on ErrJWKSKidNotFound
- Handle JWE JSON without protected header
- jws: don't strip internal whitespace before parsing JSON
- jws: fewer calls to OpaqueSigner.Public()
- Return a specific error when parsing empty string
- Reject typed nil at Verify time

full diff: https://github.com/go-jose/go-jose/compare/v4.1.4...v4.1.5

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 23:40:55 +02:00
Sebastiaan van Stijn 441acb383d vendor: github.com/mattn/go-runewidth v0.0.29
- Wrap: do not panic when the width is zero
- CreateLUT: rebuild the table after a DefaultCondition flag change

full diff: https://github.com/mattn/go-runewidth/compare/v0.0.28...v0.0.29

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 23:35:43 +02:00
Sebastiaan van Stijn cec24c7b9a Merge pull request #7285 from vvoland/update-docker
vendor: github.com/moby/moby/api v1.56.0 & client v0.6.0
2026-09-03 23:11:32 +02:00
Sebastiaan van Stijn ed68c49095 update version to 29.8.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 23:09:28 +02:00
Paweł Gronowski d5ea3bdc8a vendor: github.com/moby/moby/client v0.6.0
full diff: https://github.com/moby/moby/compare/b9b109e4d341...client/v0.6.0

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 23:01:04 +02:00
Paweł Gronowski 7cf09ba485 vendor: github.com/moby/moby/api v1.56.0
full diff: https://github.com/moby/moby/compare/b9b109e4d341...api/v1.56.0

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 23:00:14 +02:00
Sebastiaan van Stijn 6239084af1 Merge pull request #7108 from zhangyoufu/umask
cli/command/container: add create/run --umask
2026-09-03 22:34:00 +02:00
Paweł Gronowski 45a3e0bc2a e2e/container: Skip umask test until engine support
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 22:12:34 +02:00
Paweł Gronowski 79dd1f4ad0 Merge pull request #7284 from thaJeztah/trust_bump
cmd/docker-trust: update dependencies and fix test
2026-09-03 21:56:58 +02:00
Sebastiaan van Stijn 32bfe54148 cmd/docker-trust: update dependencies
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 21:50:34 +02:00
Sebastiaan van Stijn d7036970e8 cmd/docker-trust: fix tests
Some test-files were missing.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 21:50:34 +02:00
Sebastiaan van Stijn ade907089f Merge pull request #7196 from locker95/docs/global-mode-constraints
docs(service create): note global mode still honors constraints
2026-09-03 21:31:46 +02:00
Sebastiaan van Stijn e92e07589b Merge pull request #7171 from locker95/locker95-docs-system-prune-build-cache
docs: mention build cache in docker system prune description
2026-09-03 21:30:52 +02:00
Youfu Zhang 09d30a34bf cli/command/container: add create/run --umask
Signed-off-by: Youfu Zhang <zhangyoufu@gmail.com>
2026-09-04 03:23:44 +08:00
Sebastiaan van Stijn 51780c0691 Merge pull request #7281 from vvoland/update-docker
vendor: github.com/moby/moby/api v1.56.0-dev (b9b109e4d341)
2026-09-03 21:18:54 +02:00
Paweł Gronowski fee40c1660 Merge pull request #7218 from locker95/docs/history-platform-example
docs(history): use the pulled platform in the --platform example
2026-09-03 21:12:40 +02:00
Paweł Gronowski 91fc8ad4a2 vendor: github.com/moby/moby/client v0.5.2-dev (b9b109e4d341)
full diff: https://github.com/moby/moby/compare/client/v0.5.1...b9b109e4d341

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 20:52:14 +02:00
Paweł Gronowski cb6c7bc03f vendor: github.com/moby/moby/api v1.56.0-dev (b9b109e4d341)
full diff: https://github.com/moby/moby/compare/api/v1.55.0...b9b109e4d341

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 20:40:38 +02:00
Sebastiaan van Stijn b1b8a602f6 Merge pull request #7269 from thaJeztah/slice_and_dice_step2
update naturalsort sorting with slice
2026-09-03 15:28:39 +02:00
Sebastiaan van Stijn 36e01adcfa cmd/docker-trust: update naturalsort sorting with slices
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 15:02:50 +02:00
Sebastiaan van Stijn e54eb133cb update naturalsort sorting with slices
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-03 15:02:45 +02:00
Paweł Gronowski f01f978aca Merge pull request #7267 from thaJeztah/fix_aliases
cmd/docker: fix stringSliceReplaceAt with overlapping matches
2026-09-03 15:00:28 +02:00
Paweł Gronowski d078f15f2b Merge pull request #7254 from locker95/fix/login-client-side-basic-401
registry: treat basic-auth 401 as unauthorized
2026-09-03 14:30:05 +02:00
Paweł Gronowski 13e32611b5 Merge pull request #7271 from thaJeztah/bump_sortorder
vendor: github.com/fvbommel/sortorder v1.2.0
2026-09-03 14:22:45 +02:00
Sebastiaan van Stijn 7c883814b8 Merge pull request #7280 from vvoland/work-panic
cli/command: Avoid panics after client initialization errors
2026-09-03 13:03:29 +02:00
Paweł Gronowski b07de47694 cli/command: Avoid panics after client initialization errors
When client.New rejects an invalid Docker host or other client option,
it returns a nil concrete client with an error.

Returning that pointer directly as client.APIClient stores a typed-nil
interface, so lazy version checks dereference it.

Return an error instead.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-03 10:59:11 +02:00
Sebastiaan van Stijn 9878ff214b Merge pull request #7274 from vvoland/update-go
Update to go1.26.8
2026-09-02 16:43:01 +02:00
Paweł Gronowski c24195d63f Update to go1.26.8
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-02 14:48:59 +02:00
Sebastiaan van Stijn d7ad1d7268 Merge pull request #7272 from docker/dependabot/github_actions/codeql-actions-9de84475bd
build(deps): bump the codeql-actions group with 3 updates
2026-09-02 12:48:04 +02:00
Paweł Gronowski e6ee8bee34 Merge pull request #7268 from thaJeztah/slice_and_dice
modernize code with slices and maps packages
2026-09-02 12:11:22 +02:00
dependabot[bot] c096bd1261 build(deps): bump the codeql-actions group with 3 updates
Bumps the codeql-actions group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/autobuild](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

Updates `github/codeql-action/autobuild` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

Updates `github/codeql-action/analyze` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-actions
- dependency-name: github/codeql-action/autobuild
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-actions
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 08:46:18 +00:00
Sebastiaan van Stijn 3014a55736 cmd/docker-trust: update github.com/fvbommel/sortorder v1.2.0
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 09:43:02 +02:00
Sebastiaan van Stijn 3cb9f1cb86 vendor: github.com/fvbommel/sortorder v1.2.0
full diff: https://github.com/fvbommel/sortorder/compare/v1.1.0...v1.2.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 09:41:54 +02:00
Sebastiaan van Stijn fd25e9699e Merge pull request #7260 from docker/dependabot/github_actions/docker-actions-cc537b3931
build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml from 2.0.4 to 2.0.5 in the docker-actions group across 1 directory
2026-09-02 09:32:08 +02:00
Sebastiaan van Stijn e480e6c6fc volume create: simplify cluster volume options
Extract construction of the cluster volume spec from runCreate, and use
struct literals for the individual cluster volume options.

Also simplify topology parsing by reusing ConvertKVStringsToMap, use
slices.SortFunc for deterministic secret ordering, and use max to clamp
negative capacity values to zero.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:28 +02:00
Sebastiaan van Stijn 977d999382 cli/config: use filepath.IsLocal to validate config paths
Use filepath.Rel and filepath.IsLocal instead of comparing path prefixes
as strings when checking that a path stays within the config directory.

Also avoid calling Dir multiple times when constructing and validating
the path.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:28 +02:00
Sebastiaan van Stijn 64484430f4 cli-plugins: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:28 +02:00
Sebastiaan van Stijn 7631c67208 e2e: modernize
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:28 +02:00
Sebastiaan van Stijn b1780e06a0 opts: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:27 +02:00
Sebastiaan van Stijn 6ea81b3e2e templates: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:27 +02:00
Sebastiaan van Stijn 33d586d81f cli/compose: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:27 +02:00
Sebastiaan van Stijn ed406be52e cli/command: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 02:50:27 +02:00
Sebastiaan van Stijn be607d1163 Merge pull request #7227 from kawmy/7226-preserve-mount-order
cli/command/service: preserve mount order on force update
2026-09-02 02:40:47 +02:00
Sebastiaan van Stijn f838c7c84b cmd/docker-trust: modernize with slices and maps packages
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-02 01:28:55 +02:00
Sebastiaan van Stijn bcc4be9f8b cmd/docker: fix stringSliceReplaceAt with overlapping matches
Inline the sub-slice lookup into stringSliceReplaceAt and use
slices.Equal to compare candidate ranges. When a specific index is
required, check that position directly instead of searching the full
slice.

This also fixes overlapping matches and uses slices.Concat to construct
the replacement result.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-01 21:30:59 +02:00
Sebastiaan van Stijn f0f38d5cb9 cmd/docker: rewrite TestStringSliceReplaceAt to table test
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-01 21:30:58 +02:00
Dean Chen b4189c2f7f registry: map login HTTP status through errhttp.ToNative
translateV2AuthError only unwraps a url.Error from Do(); a 401
status never went through it. Use errhttp.ToNative so Auth()
treats that 401 as unauthorized and stops.

Signed-off-by: Dean Chen <862469039@qq.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-09-01 17:24:38 +02:00
Sebastiaan van Stijn 4a9a0ab3aa Merge pull request #7265 from vvoland/docs-dockerd
dockerd: Document new options
2026-09-01 17:10:11 +02:00
Paweł Gronowski 7b7eb0ef6b dockerd: Document custom AppArmor profiles
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-01 16:53:25 +02:00
Paweł Gronowski a458c3871c dockerd: Document default-stop-timeout
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2026-09-01 16:30:31 +02:00
Sebastiaan van Stijn dc67811426 Merge pull request #6976 from olabie2/6973-print-error-before-plugin-hooks
cmd/docker: print command error before running plugin hooks
2026-09-01 13:42:53 +02:00
dependabot[bot] 1164af3e60 build(deps): bump docker/docker-agent-action/.github/workflows/review-pr.yml
Bumps the docker-actions group with 1 update in the / directory: [docker/docker-agent-action/.github/workflows/review-pr.yml](https://github.com/docker/docker-agent-action).


Updates `docker/docker-agent-action/.github/workflows/review-pr.yml` from 2.0.4 to 2.0.5
- [Release notes](https://github.com/docker/docker-agent-action/releases)
- [Commits](https://github.com/docker/docker-agent-action/compare/b08367e7e9a471822464be2bb9fdaa1c0fb6061b...06e1767af06263c93d712449cbf859778d9392ee)

---
updated-dependencies:
- dependency-name: docker/docker-agent-action/.github/workflows/review-pr.yml
  dependency-version: 2.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docker-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-01 08:41:28 +00:00
Mohammed Olabie cffd24dea4 cmd/docker: print command error before running plugin hooks
Plugin hook output (such as Gordon's "What's next:" hint) was rendered
before the command's own error message because hooks were invoked inside
runDocker while the error was only printed in main() after runDocker
returned.

Print the error to stderr before invoking the hooks, and replace the
error with a status-only StatusError so main() does not print the same
message a second time. The original error message is captured up-front
and still passed to the plugin hooks.

The inline error-printing block in runDocker is extracted into a
printCommandError helper so the new behavior can be unit-tested
directly without spinning up runDocker.

TestPrintCommandError covers each branch of the helper: nil error,
generic error (printed and replaced with StatusError), StatusError
with/without message, context.Canceled (raw and wrapped), and
errCtxSignalTerminated.

Signed-off-by: Mohammed Olabie <olabiedev@gmail.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-31 19:20:27 +02:00
Sebastiaan van Stijn 5a7e00d7c2 Merge pull request #7250 from FrancescoCastaldi/fix/2761-zsh-plugins-completion
completion: fix zsh __docker_plugins bad math expression
2026-08-31 18:32:06 +02:00
FrancescoCastaldi 63da0b015b completion: fix zsh __docker_plugins bad math expression
Use 'docker plugin ls --format' to extract plugin names and IDs, escaping colons in the plugin name (e.g. repo:tag) so zsh _describe treats the ID correctly as description.

Fixes #2761

Signed-off-by: FrancescoCastaldi <francesco.castaldi@mapsgroup.it>
2026-08-31 17:24:39 +02:00
Paweł Gronowski cef1e66947 Merge pull request #7256 from thaJeztah/bump_go_events
vendor: github.com/docker/go-events v0.1.0
2026-08-28 21:50:23 +02:00
Paweł Gronowski 52611d0d6a Merge pull request #7257 from thaJeztah/bump_compress
vendor: github.com/klauspost/compress v1.19.2
2026-08-28 21:50:14 +02:00
Paweł Gronowski 6292b73b99 Merge pull request #7255 from thaJeztah/bump_credshelper
vendor: github.com/docker/docker-credential-helpers v0.9.9
2026-08-28 21:50:12 +02:00
Sebastiaan van Stijn 84d70fbdc3 Merge pull request #7258 from thaJeztah/bump_go126
update minimum go version to go1.26 and go fix
2026-08-28 21:48:36 +02:00
Sebastiaan van Stijn 4239f5d121 go fix (omitzero)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 21:21:39 +02:00
Sebastiaan van Stijn be9ca38f8b go fix for go1.26
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 21:21:35 +02:00
Sebastiaan van Stijn 8eb66b47e3 update minimum go version to go1.26
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 20:46:02 +02:00
Sebastiaan van Stijn 76b505b054 vendor: github.com/klauspost/compress v1.19.2
full diff: https://github.com/klauspost/compress/compare/v1.18.7...v1.19.2

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 20:36:33 +02:00
Sebastiaan van Stijn 65b90d8888 vendor: github.com/docker/go-events v0.1.0
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 20:33:30 +02:00
Sebastiaan van Stijn 0f0e561a3f vendor: github.com/docker/docker-credential-helpers v0.9.9
full diff: https://github.com/docker/docker-credential-helpers/compare/v0.9.8...v0.9.9

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-08-28 20:31:43 +02:00
Dean Chen 5e0fdb3f6e registry: treat basic-auth 401 as unauthorized
Client-side login (daemon down) was wrapping a 401 as a plain error, so
Auth() moved on to the next endpoint. That can print Login Succeeded if
the HTTP fallback happens to answer 200.

Fixes #7237

Signed-off-by: Dean Chen <862469039@qq.com>
2026-08-28 14:53:19 +05:00
Kamyar mofakhami a79a16bd63 cli/command/service: preserve mount order on force update
Signed-off-by: Kamyar mofakhami <41609894+kawmy@users.noreply.github.com>
2026-08-21 18:54:45 +03:30
Dean Chen 4f169946e7 docs(history): use the pulled platform in the --platform example
The example pulled linux/riscv64 then ran history for linux/s390x.

Signed-off-by: Dean Chen <862469039@qq.com>
2026-08-18 16:44:38 +05:00
Dean Chen 3c53edb6c5 docs(service create): note global mode still honors constraints
A global service is one task per matching node, not one per
node in the swarm. Say that next to --mode and --constraint.

Signed-off-by: Dean Chen <862469039@qq.com>
2026-08-15 21:36:19 +05:00
Dean Chen 951f7653fc docs: mention build cache in docker system prune description
The synopsis only listed containers, networks, images, and volumes,
but the command always prunes unused build cache (including BuildKit
cache mounts). Align the description with the interactive warning.

Signed-off-by: Dean Chen <862469039@qq.com>
2026-08-10 09:45:49 +05:00
364 changed files with 12335 additions and 5215 deletions
+20 -17
View File
@@ -1,34 +1,37 @@
<!--
Make sure you've read and understood our contributing guidelines;
Please make sure you've read and understood our contributing guidelines;
https://github.com/docker/cli/blob/master/CONTRIBUTING.md
** Make sure all your commits include a signature generated with `git commit -s` **
Make sure commits are signed off (`git commit -s`) with your real name.
If this is a bug fix, make sure your description includes "fixes #xxxx", or
"closes #xxxx"
If the PR relates to an existing issue or PR, mention it at the top:
Provide the following information:
- Fixes: https://github.com/docker/cli/issues/12345678
- Replaces: https://github.com/docker/cli/pull/12345678
- Follow up to: https://github.com/docker/cli/pull/12345678
- Related to: https://github.com/docker/cli/issues/12345678
-->
**- What I did**
## Summary
**- How I did it**
**- How to verify it**
**- Human readable description for the release notes**
## Release notes (optional)
<!--
Write a short (one line) summary that describes the changes in this
pull request for inclusion in the changelog.
It must be placed inside the below triple backticks section.
One-sentence user-facing release note.
Leave empty if the change is not changelog-worthy.
Use present tense and imperative tone.
NOTE: Only fill this section if changes introduced in this PR are user-facing.
The PR must have a relevant impact/ label.
Good:
- Fix a panic when running `docker top` on a non-running Windows container.
- Don't print warnings in `docker info` for broken symlinks in CLI plugin directories.
Bad:
- Refactor test TestFooWithBar
- Fixed a panic when running docker top
-->
```markdown changelog
```
**- A picture of a cute animal (not mandatory but encouraged)**
## A picture of a cute animal (not mandatory but encouraged)
+40 -8
View File
@@ -29,10 +29,18 @@ on:
jobs:
prepare:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
outputs:
matrix: ${{ steps.platforms.outputs.matrix }}
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -49,7 +57,7 @@ jobs:
echo ${{ steps.platforms.outputs.matrix }}
build:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
needs:
- prepare
strategy:
@@ -63,12 +71,20 @@ jobs:
- ""
- glibc
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0
uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0
-
name: Build
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7.3.0
uses: docker/bake-action@018cb6412ab401ebaa809aa5f85966b74628600f # v7.4.0
with:
targets: ${{ matrix.target }}
set: |
@@ -126,10 +142,18 @@ jobs:
connection_id: ${{ vars.DOCKERHUB_OIDC_CONNECTIONID }}
prepare-plugins:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
outputs:
matrix: ${{ steps.platforms.outputs.matrix }}
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -146,7 +170,7 @@ jobs:
echo ${{ steps.platforms.outputs.matrix }}
plugins:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
needs:
- prepare-plugins
strategy:
@@ -154,12 +178,20 @@ jobs:
matrix:
platform: ${{ fromJson(needs.prepare-plugins.outputs.matrix) }}
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0
uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0
-
name: Build
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7.3.0
uses: docker/bake-action@018cb6412ab401ebaa809aa5f85966b74628600f # v7.4.0
with:
targets: plugins-cross
set: |
+5 -5
View File
@@ -34,7 +34,7 @@ on:
jobs:
codeql:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
timeout-minutes: 10
env:
DISABLE_WARN_OUTSIDE_CONTAINER: '1'
@@ -64,18 +64,18 @@ jobs:
name: Update Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.26.7"
go-version: "1.26.8"
cache: false
-
name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
with:
languages: go
-
name: Autobuild
uses: github/codeql-action/autobuild@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
-
name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
with:
category: "/language:go"
+12 -4
View File
@@ -26,7 +26,7 @@ on:
jobs:
tests:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
strategy:
fail-fast: false
matrix:
@@ -42,6 +42,14 @@ jobs:
- 28 # latest - 1
- 25 # mirantis lts
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -51,7 +59,7 @@ jobs:
name: Update daemon.json
run: |
if [ ! -f /etc/docker/daemon.json ]; then
# ubuntu 24.04 runners no longer have a default daemon.json present
# ubuntu runners no longer have a default daemon.json present
sudo mkdir -p /etc/docker/
echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json
else
@@ -65,7 +73,7 @@ jobs:
docker info
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0
uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0
-
name: Run ${{ matrix.target }}
run: |
@@ -76,7 +84,7 @@ jobs:
TESTFLAGS: -coverprofile=/tmp/coverage/coverage.txt
-
name: Send to Codecov
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
with:
files: ./build/coverage/coverage.txt
token: ${{ secrets.CODECOV_TOKEN }}
+8
View File
@@ -20,6 +20,14 @@ jobs:
if: github.event.pull_request.head.repo.fork
runs-on: ubuntu-latest
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
- name: Save event context
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
+1 -1
View File
@@ -11,7 +11,7 @@ permissions:
jobs:
review:
uses: docker/docker-agent-action/.github/workflows/review-pr.yml@b08367e7e9a471822464be2bb9fdaa1c0fb6061b # v2.0.4
uses: docker/docker-agent-action/.github/workflows/review-pr.yml@3654ec391b070e247de2e2e3c1ff2519b6378b3a # v2.0.9
permissions:
contents: read # Read repository files and PR diffs
pull-requests: write # Post review comments
+2 -2
View File
@@ -26,7 +26,7 @@ on:
jobs:
sync-release-branch:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
permissions:
contents: write
actions: write
@@ -116,7 +116,7 @@ jobs:
push-release-branch:
needs: sync-release-branch
if: ${{ !inputs.dry_run && needs.sync-release-branch.outputs.has_changes == 'true' }}
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
environment: docker-releases
permissions:
contents: write
+22 -6
View File
@@ -26,19 +26,27 @@ on:
jobs:
ctn:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0
uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0
-
name: Test
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7.3.0
uses: docker/bake-action@018cb6412ab401ebaa809aa5f85966b74628600f # v7.4.0
with:
targets: test-coverage
-
name: Send to Codecov
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
with:
files: ./build/coverage/coverage.txt
token: ${{ secrets.CODECOV_TOKEN }}
@@ -58,6 +66,14 @@ jobs:
- macos-15 # macOS 15 on arm64 (Apple Silicon M1)
# - windows-2022 # FIXME: some tests are failing on the Windows runner, as well as on Appveyor since June 24, 2018: https://ci.appveyor.com/project/docker/cli/history
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -68,7 +84,7 @@ jobs:
name: Set up Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.26.7"
go-version: "1.26.8"
cache: false
-
name: Test
@@ -82,7 +98,7 @@ jobs:
shell: bash
-
name: Send to Codecov
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
with:
files: /tmp/coverage.txt
working-directory: ${{ env.GOPATH }}/src/github.com/docker/cli
+9 -1
View File
@@ -10,9 +10,17 @@ on:
jobs:
validate-milestone:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
timeout-minutes: 5
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
- name: Validate milestone matches VERSION
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
+27 -3
View File
@@ -15,9 +15,17 @@ on:
jobs:
check-labels:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
timeout-minutes: 120 # guardrails timeout for the whole job
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
- name: Missing `area/` label
if: always() && contains(join(github.event.pull_request.labels.*.name, ','), 'impact/') && !contains(join(github.event.pull_request.labels.*.name, ','), 'area/')
run: |
@@ -32,13 +40,21 @@ jobs:
run: exit 0
check-changelog:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
timeout-minutes: 120 # guardrails timeout for the whole job
env:
HAS_IMPACT_LABEL: ${{ contains(join(github.event.pull_request.labels.*.name, ','), 'impact/') }}
PR_BODY: |
${{ github.event.pull_request.body }}
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
- name: Check changelog description
run: |
# Extract the `markdown changelog` note code block
@@ -70,11 +86,19 @@ jobs:
echo "$desc"
check-pr-branch:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
timeout-minutes: 120 # guardrails timeout for the whole job
env:
PR_TITLE: ${{ github.event.pull_request.title }}
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
# Backports or PR that target a release branch directly should mention the target branch in the title, for example:
# [X.Y backport] Some change that needs backporting to X.Y
# [X.Y] Change directly targeting the X.Y branch
+38 -6
View File
@@ -26,7 +26,7 @@ on:
jobs:
validate:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
strategy:
fail-fast: false
matrix:
@@ -36,16 +36,32 @@ jobs:
- validate-vendor
- update-authors # ensure authors update target runs fine
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Run
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7.3.0
uses: docker/bake-action@018cb6412ab401ebaa809aa5f85966b74628600f # v7.4.0
with:
targets: ${{ matrix.target }}
# check that the generated Markdown and the checked-in files match
validate-md:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -66,7 +82,7 @@ jobs:
fi
validate-make:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
strategy:
fail-fast: false
matrix:
@@ -74,6 +90,14 @@ jobs:
- yamldocs # ensure yamldocs target runs fine
- manpages # ensure manpages target runs fine
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -86,11 +110,19 @@ jobs:
make -f docker.Makefile ${{ matrix.target }}
validate-gocompat:
runs-on: ubuntu-24.04
runs-on: ubuntu-26.04
env:
GOPATH: ${{ github.workspace }}
GO111MODULE: off
steps:
- name: Configure credentials
continue-on-error: true
uses: tracebit-com/tracebit-community-action@27de2ed8de16af5270d32003a4c8bfc3c54e0a20 # v1.2.0
with:
customer-id: ${{ secrets.TRACEBIT_CUSTOMER_ID }}
api-token: ${{ secrets.TRACEBIT_API_TOKEN }}
profile: administrator
profile-region: us-east-1
-
name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -101,7 +133,7 @@ jobs:
name: Set up Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.26.7"
go-version: "1.26.8"
cache: false
-
name: Run gocompat check
+1 -1
View File
@@ -5,7 +5,7 @@ run:
# which causes it to fallback to go1.17 semantics.
#
# TODO(thaJeztah): update "usetesting" settings to enable go1.24 features once our minimum version is go1.24
go: "1.26.7"
go: "1.26.8"
timeout: 5m
+1 -1
View File
@@ -8,7 +8,7 @@ ARG BASE_VARIANT=alpine
ARG ALPINE_VERSION=3.23
ARG BASE_DEBIAN_DISTRO=bookworm
ARG GO_VERSION=1.26.7
ARG GO_VERSION=1.26.8
# XX_VERSION specifies the version of the xx utility to use.
# It must be a valid tag in the docker.io/tonistiigi/xx image repository.
+1
View File
@@ -5,6 +5,7 @@
[![Test Status](https://img.shields.io/github/actions/workflow/status/docker/cli/test.yml?branch=master&label=test&logo=github)](https://github.com/docker/cli/actions?query=workflow%3Atest)
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/docker/cli/badge)](https://scorecard.dev/viewer/?uri=github.com/docker/cli)
[![Codecov](https://img.shields.io/codecov/c/github/docker/cli?logo=codecov)](https://codecov.io/gh/docker/cli)
[![Protected by Tracebit Community Edition](https://github.com/tracebit-com/tracebit-community-action/blob/main/assets/badges/tracebit-badge-compact.svg?raw=1)](https://community.tracebit.com/supplychainattacks)
## About
+1 -1
View File
@@ -1 +1 @@
29.8.0
29.8.2
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
// Package hooks defines the contract between the Docker CLI and CLI plugin hook
// implementations.
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package hooks
+2 -1
View File
@@ -3,6 +3,7 @@ package manager
import (
"os"
"path/filepath"
"slices"
"sync"
"testing"
@@ -45,7 +46,7 @@ func TestPluginStubCompletionRestoresOSArgs(t *testing.T) {
t.Cleanup(func() { os.Args = savedArgs })
originalArgs := []string{"docker", "image", "ls"}
os.Args = append([]string(nil), originalArgs...)
os.Args = slices.Clone(originalArgs)
_, directive := cmd.ValidArgsFunction(cmd, []string{"--all"}, "alp")
assert.Equal(t, directive, cobra.ShellCompDirectiveError)
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package manager
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package manager
+6 -3
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package manager
import (
@@ -6,7 +9,7 @@ import (
"os"
"os/exec"
"path/filepath"
"sort"
slices "slices"
"strings"
"sync"
@@ -164,8 +167,8 @@ func ListPlugins(dockerCli config.Provider, rootcmd *cobra.Command) ([]Plugin, e
return nil, err
}
sort.Slice(plugins, func(i, j int) bool {
return sortorder.NaturalLess(plugins[i].Name, plugins[j].Name)
slices.SortFunc(plugins, func(a, b Plugin) int {
return sortorder.NaturalCompare(a.Name, b.Name)
})
return plugins, nil
+4 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package manager
import (
@@ -167,8 +170,7 @@ func (p *Plugin) RunHook(ctx context.Context, hookData hooks.Request) ([]byte, e
out, err := pCmd.Output()
if err != nil {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
if _, ok := errors.AsType[*exec.ExitError](err); ok {
return nil, wrapAsPluginError(err, "plugin hook subcommand exited unsuccessfully")
}
return nil, wrapAsPluginError(err, "failed to execute plugin hook subcommand: "+pCmd.String())
+4 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package plugin
import (
@@ -97,8 +100,7 @@ func Run(makeCmd func(command.Cli) *cobra.Command, meta metadata.Metadata, ops .
plugin := makeCmd(dockerCLI)
if err := RunPlugin(dockerCLI, plugin, meta); err != nil {
var stErr cli.StatusError
if errors.As(err, &stErr) {
if stErr, ok := errors.AsType[cli.StatusError](err); ok {
// StatusError should only be used for errors, and all errors should
// have a non-zero exit status, so never exit with 0
if stErr.StatusCode == 0 { // FIXME(thaJeztah): this should never be used with a zero status-code. Check if we do this anywhere.
+6 -3
View File
@@ -1,9 +1,12 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package cli
import (
"fmt"
"os"
"sort"
"slices"
"strings"
"github.com/docker/cli/cli-plugins/metadata"
@@ -273,8 +276,8 @@ func topCommands(cmd *cobra.Command) []*cobra.Command {
cmds = append(cmds, sub)
}
}
sort.SliceStable(cmds, func(i, j int) bool {
return sortorder.NaturalLess(cmds[i].Annotations["category-top"], cmds[j].Annotations["category-top"])
slices.SortStableFunc(cmds, func(a, b *cobra.Command) int {
return sortorder.NaturalCompare(a.Annotations["category-top"], b.Annotations["category-top"])
})
return cmds
}
+6 -2
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package command
@@ -316,7 +316,11 @@ func newAPIClientFromEndpoint(ep docker.Endpoint, configFile *configfile.ConfigF
opts = append(opts, withCustomHeaders)
}
opts = append(opts, extraOpts...)
return client.New(opts...)
apiClient, err := client.New(opts...)
if err != nil {
return nil, err
}
return apiClient, nil
}
func resolveDockerEndpoint(s store.Reader, contextName string) (docker.Endpoint, error) {
+9
View File
@@ -132,6 +132,15 @@ func TestNewAPIClientFromFlagsWithAPIVersionFromEnv(t *testing.T) {
assert.Equal(t, apiclient.ClientVersion(), expectedVersion)
}
func TestNewAPIClientFromFlagsWithInvalidAPIVersionFromEnv(t *testing.T) {
t.Setenv("DOCKER_API_VERSION", "1")
t.Setenv("DOCKER_HOST", ":2375")
apiClient, err := NewAPIClientFromFlags(&flags.ClientOptions{}, &configfile.ConfigFile{})
assert.ErrorContains(t, err, "invalid API version")
assert.Check(t, apiClient == nil)
}
type fakeClient struct {
client.Client
pingFunc func() (client.PingResult, error)
+4 -3
View File
@@ -3,9 +3,9 @@ package completion
import (
"context"
"errors"
"sort"
"testing"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/api/types/container"
"github.com/moby/moby/api/types/image"
"github.com/moby/moby/api/types/network"
@@ -177,9 +177,10 @@ func TestCompleteEnvVarNames(t *testing.T) {
values, directives := EnvVarNames()(nil, nil, "")
assert.Check(t, is.Equal(directives&cobra.ShellCompDirectiveNoFileComp, cobra.ShellCompDirectiveNoFileComp), "Should not perform file completion")
sort.Strings(values)
expected := []string{"ENV_A", "ENV_B"}
assert.Check(t, is.DeepEqual(values, expected))
assert.Check(t, is.DeepEqual(values, expected, cmpopts.SortSlices(func(a, b string) bool {
return a < b
})))
}
func TestCompleteFileNames(t *testing.T) {
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package config
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package config
+7 -3
View File
@@ -1,8 +1,11 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package config
import (
"context"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -10,6 +13,7 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/cli/opts"
"github.com/fvbommel/sortorder"
"github.com/moby/moby/api/types/swarm"
"github.com/moby/moby/client"
"github.com/spf13/cobra"
)
@@ -62,8 +66,8 @@ func runList(ctx context.Context, dockerCLI command.Cli, options listOptions) er
}
}
sort.Slice(res.Items, func(i, j int) bool {
return sortorder.NaturalLess(res.Items[i].Spec.Name, res.Items[j].Spec.Name)
slices.SortFunc(res.Items, func(a, b swarm.Config) int {
return sortorder.NaturalCompare(a.Spec.Name, b.Spec.Name)
})
configCtx := formatter.Context{
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package container
+4 -4
View File
@@ -7,7 +7,6 @@ import (
"os"
"path/filepath"
"runtime"
"sort"
"strings"
"testing"
@@ -15,6 +14,7 @@ import (
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/internal/test"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/api/types/container"
"github.com/moby/moby/api/types/system"
"github.com/moby/moby/client"
@@ -284,12 +284,12 @@ func TestCreateContainerWithProxyConfig(t *testing.T) {
"ALL_PROXY=allProxy",
"all_proxy=allProxy",
}
sort.Strings(expected)
fakeCLI := test.NewFakeCli(&fakeClient{
createContainerFunc: func(options client.ContainerCreateOptions) (client.ContainerCreateResult, error) {
sort.Strings(options.Config.Env)
assert.DeepEqual(t, options.Config.Env, expected)
assert.DeepEqual(t, options.Config.Env, expected, cmpopts.SortSlices(func(a, b string) bool {
return a < b
}))
return client.ContainerCreateResult{}, nil
},
})
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package container
+6 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package container
@@ -139,6 +139,7 @@ type containerOptions struct {
runtime string
autoRemove bool
init bool
umask opts.UmaskOpt
annotations *opts.MapOpts
Image string
@@ -313,6 +314,9 @@ func addFlags(flags *pflag.FlagSet) *containerOptions {
flags.Var(&copts.shmSize, "shm-size", "Size of /dev/shm")
flags.StringVar(&copts.utsMode, "uts", "", "UTS namespace to use")
flags.StringVar(&copts.runtime, "runtime", "", "Runtime to use for this container")
flags.Var(&copts.umask, "umask", "Set umask for the container")
flags.SetAnnotation("umask", "version", []string{"1.56"})
flags.SetAnnotation("umask", "ostype", []string{"linux"})
flags.BoolVar(&copts.init, "init", false, "Run an init inside the container that forwards signals and reaps processes")
flags.SetAnnotation("init", "version", []string{"1.25"})
@@ -710,6 +714,7 @@ func parse(flags *pflag.FlagSet, copts *containerOptions, serverOS string) (*con
MaskedPaths: maskedPaths,
ReadonlyPaths: readonlyPaths,
Annotations: copts.annotations.GetAll(),
Umask: copts.umask.Value(),
}
if copts.autoRemove && !hostConfig.RestartPolicy.IsNone() {
+13
View File
@@ -154,6 +154,19 @@ func TestParseRunLinks(t *testing.T) {
}
}
func TestParseRunWithoutUmask(t *testing.T) {
_, hostConfig, _, err := parseRun([]string{"ubuntu", "bash"})
assert.NilError(t, err)
assert.Assert(t, hostConfig.Umask == nil)
}
func TestParseRunUmask(t *testing.T) {
_, hostConfig, _, err := parseRun([]string{"--umask", "0022", "ubuntu", "bash"})
assert.NilError(t, err)
assert.Assert(t, hostConfig.Umask != nil)
assert.Equal(t, uint32(0o22), *hostConfig.Umask)
}
func TestParseRunAttach(t *testing.T) {
tests := []struct {
input string
+5 -4
View File
@@ -1,10 +1,13 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package container
import (
"context"
"fmt"
"net"
"sort"
"slices"
"strings"
"github.com/docker/cli/cli"
@@ -80,9 +83,7 @@ func runPort(ctx context.Context, dockerCli command.Cli, opts *portOptions) erro
}
if len(out) > 0 {
sort.Slice(out, func(i, j int) bool {
return sortorder.NaturalLess(out[i], out[j])
})
slices.SortFunc(out, sortorder.NaturalCompare)
_, _ = fmt.Fprintln(dockerCli.Out(), strings.Join(out, "\n"))
}
+4 -3
View File
@@ -4,11 +4,11 @@ import (
"context"
"errors"
"io"
"sort"
"sync"
"testing"
"github.com/docker/cli/internal/test"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/client"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
@@ -87,8 +87,9 @@ func TestRestart(t *testing.T) {
} else {
assert.Check(t, is.Nil(err))
}
sort.Strings(restarted)
assert.Check(t, is.DeepEqual(restarted, tc.restarted))
assert.Check(t, is.DeepEqual(restarted, tc.restarted, cmpopts.SortSlices(func(a, b string) bool {
return a < b
})))
})
}
}
+5 -3
View File
@@ -4,11 +4,11 @@ import (
"context"
"errors"
"io"
"sort"
"sync"
"testing"
"github.com/docker/cli/internal/test"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/client"
"gotest.tools/v3/assert"
)
@@ -53,8 +53,10 @@ func TestRemoveForce(t *testing.T) {
assert.NilError(t, err)
}
assert.Equal(t, cli.ErrBuffer().String(), "")
sort.Strings(removed)
assert.DeepEqual(t, removed, []string{"mycontainer", "nosuchcontainer"})
expected := []string{"mycontainer", "nosuchcontainer"}
assert.DeepEqual(t, removed, expected, cmpopts.SortSlices(func(a, b string) bool {
return a < b
}))
})
}
}
+4 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package container
import (
@@ -169,8 +172,7 @@ func RunStart(ctx context.Context, dockerCli command.Cli, opts *StartOptions) er
}
}
if attachErr := <-cErr; attachErr != nil {
var escapeError term.EscapeError
if errors.As(attachErr, &escapeError) {
if _, ok := errors.AsType[term.EscapeError](attachErr); ok {
// The user entered the detach escape sequence.
return nil
}
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package container
+4 -3
View File
@@ -4,11 +4,11 @@ import (
"context"
"errors"
"io"
"sort"
"sync"
"testing"
"github.com/docker/cli/internal/test"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/client"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
@@ -88,8 +88,9 @@ func TestStop(t *testing.T) {
} else {
assert.Check(t, is.Nil(err))
}
sort.Strings(stopped)
assert.Check(t, is.DeepEqual(stopped, tc.stopped))
assert.Check(t, is.DeepEqual(stopped, tc.stopped, cmpopts.SortSlices(func(a, b string) bool {
return a < b
})))
})
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package container
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package command
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package context
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package context
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package context
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package context
+4 -4
View File
@@ -1,12 +1,12 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package context
import (
"fmt"
"os"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -101,8 +101,8 @@ func runList(dockerCli command.Cli, opts *listOptions) error {
Error: errMsg,
})
}
sort.Slice(contexts, func(i, j int) bool {
return sortorder.NaturalLess(contexts[i].Name, contexts[j].Name)
slices.SortFunc(contexts, func(a, b *formatter.ClientContext) int {
return sortorder.NaturalCompare(a.Name, b.Name)
})
if err := format(dockerCli, opts, contexts); err != nil {
return err
+4 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package context
import (
@@ -69,8 +72,7 @@ func parseBool(config map[string]string, name string) (bool, error) {
}
res, err := strconv.ParseBool(strVal)
if err != nil {
var nErr *strconv.NumError
if errors.As(err, &nErr) {
if nErr, ok := errors.AsType[*strconv.NumError](err); ok {
return res, fmt.Errorf("%s: parsing %q: %w", name, nErr.Num, nErr.Err)
}
return res, fmt.Errorf("%s: %w", name, err)
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package command
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package command
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package command
+16 -13
View File
@@ -1,7 +1,10 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package formatter
import (
"sort"
"slices"
"strconv"
"strings"
"time"
@@ -52,20 +55,20 @@ shared: {{.Shared}}
}
func buildCacheSort(buildCache []build.CacheRecord) {
sort.Slice(buildCache, func(i, j int) bool {
lui, luj := buildCache[i].LastUsedAt, buildCache[j].LastUsedAt
slices.SortFunc(buildCache, func(a, b build.CacheRecord) int {
switch {
case lui == nil && luj == nil:
return strings.Compare(buildCache[i].ID, buildCache[j].ID) < 0
case lui == nil:
return true
case luj == nil:
return false
case lui.Equal(*luj):
return strings.Compare(buildCache[i].ID, buildCache[j].ID) < 0
default:
return lui.Before(*luj)
case a.LastUsedAt == nil && b.LastUsedAt == nil:
return strings.Compare(a.ID, b.ID)
case a.LastUsedAt == nil:
return -1
case b.LastUsedAt == nil:
return 1
}
if c := a.LastUsedAt.Compare(*b.LastUsedAt); c != 0 {
return c
}
return strings.Compare(a.ID, b.ID)
})
}
+14 -20
View File
@@ -1,12 +1,13 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
import (
"cmp"
"fmt"
"net"
"sort"
"slices"
"strconv"
"strings"
"time"
@@ -295,7 +296,7 @@ func (c *ContainerContext) Labels() string {
for k, v := range c.c.Labels {
joinLabels = append(joinLabels, k+"="+v)
}
sort.Strings(joinLabels)
slices.Sort(joinLabels)
return strings.Join(joinLabels, ",")
}
@@ -395,9 +396,7 @@ func DisplayablePorts(ports []container.PortSummary) string {
var result []string
var hostMappings []string
var groupMapKeys []string
sort.Slice(ports, func(i, j int) bool {
return comparePorts(ports[i], ports[j])
})
slices.SortFunc(ports, comparePorts)
for _, port := range ports {
current := port.PrivatePort
@@ -452,18 +451,13 @@ func formGroup(key string, start, last uint16) string {
return group + "/" + groupType
}
func comparePorts(i, j container.PortSummary) bool {
if i.PrivatePort != j.PrivatePort {
return i.PrivatePort < j.PrivatePort
}
if i.IP != j.IP {
return i.IP.Less(j.IP)
}
if i.PublicPort != j.PublicPort {
return i.PublicPort < j.PublicPort
}
return i.Type < j.Type
// comparePorts compares ports by private port, IP address, public port,
// and protocol, in that order.
func comparePorts(a, b container.PortSummary) int {
return cmp.Or(
cmp.Compare(a.PrivatePort, b.PrivatePort),
a.IP.Compare(b.IP),
cmp.Compare(a.PublicPort, b.PublicPort),
cmp.Compare(a.Type, b.Type),
)
}
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package formatter
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package idresolver
+4 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package image
import (
@@ -364,8 +367,7 @@ func runBuild(ctx context.Context, dockerCli command.Cli, options buildOptions)
err = jsonstream.Display(ctx, response.Body, streams.NewOut(buildBuff), jsonstream.WithAuxCallback(aux))
if err != nil {
var jerr *jsonstream.JSONError
if errors.As(err, &jerr) {
if jerr, ok := errors.AsType[*jsonstream.JSONError](err); ok {
// If no error code is set, default to 1
if jerr.Code == 0 {
jerr.Code = 1
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package git
import (
@@ -7,6 +10,7 @@ import (
"os"
"os/exec"
"path/filepath"
"slices"
"strings"
"github.com/moby/sys/symlink"
@@ -202,7 +206,7 @@ func (repo gitRepo) checkout(root string) (string, error) {
}
func (repo gitRepo) gitWithinDir(dir string, args ...string) ([]byte, error) {
args = append([]string{"-c", "protocol.file.allow=never"}, args...) // Block sneaky repositories from using repos from the filesystem as submodules.
args = slices.Concat([]string{"-c", "protocol.file.allow=never"}, args) // Block sneaky repositories from using repos from the filesystem as submodules.
cmd := exec.Command("git", args...)
cmd.Dir = dir
// Disable unsafe remote protocols.
+2 -2
View File
@@ -8,7 +8,7 @@ import (
"io"
"os"
"path/filepath"
"sort"
"slices"
"testing"
"github.com/docker/cli/cli/streams"
@@ -211,6 +211,6 @@ func (f *fakeBuild) filenames(t *testing.T) []string {
for _, header := range h {
names = append(names, header.Name)
}
sort.Strings(names)
slices.Sort(names)
return names
}
+8 -3
View File
@@ -52,6 +52,14 @@ func TestNewHistoryCommandErrors(t *testing.T) {
}
func TestNewHistoryCommandSuccess(t *testing.T) {
// Set to UTC timezone as timestamps in output are
// printed in the current timezone
local := time.Local
time.Local = time.UTC
t.Cleanup(func() {
time.Local = local
})
testCases := []struct {
name string
args []string
@@ -118,9 +126,6 @@ func TestNewHistoryCommandSuccess(t *testing.T) {
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
// Set to UTC timezone as timestamps in output are
// printed in the current timezone
t.Setenv("TZ", "UTC")
cli := test.NewFakeCli(&fakeClient{imageHistoryFunc: tc.imageHistoryFunc})
cmd := newHistoryCommand(cli)
cmd.SetOut(io.Discard)
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package image
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package image
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package image
+5 -3
View File
@@ -102,9 +102,11 @@ func TestRunPushRespectsNoColorForAuxNotes(t *testing.T) {
SelectedManifest: ocispec.Descriptor{Digest: "sha256:2222222222222222222222222222222222222222222222222222222222222222"},
})
assert.NilError(t, err)
line := append([]byte(`{"aux":`), aux...)
line = append(line, '}', '\n')
return fakeStreamResult{ReadCloser: io.NopCloser(bytes.NewReader(line))}, nil
var buf bytes.Buffer
buf.WriteString(`{"aux":`)
buf.Write(aux)
buf.WriteString("}\n")
return fakeStreamResult{ReadCloser: io.NopCloser(&buf)}, nil
},
})
cli.Out().SetIsTerminal(true)
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package image
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package inspect
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package manifest
+6 -10
View File
@@ -189,8 +189,6 @@ func TestNetworkCreateWithFlags(t *testing.T) {
// TestNetworkCreateIPv4 verifies behavior of the "--ipv4" option. This option
// is an optional bool, and must default to "nil", not "true" or "false".
func TestNetworkCreateIPv4(t *testing.T) {
boolPtr := func(val bool) *bool { return &val }
tests := []struct {
doc, name string
flags []string
@@ -205,19 +203,19 @@ func TestNetworkCreateIPv4(t *testing.T) {
doc: "IPv4 enabled",
name: "ipv4-enabled",
flags: []string{"--ipv4=true"},
expected: boolPtr(true),
expected: new(true),
},
{
doc: "IPv4 enabled (shorthand)",
name: "ipv4-enabled-shorthand",
flags: []string{"--ipv4"},
expected: boolPtr(true),
expected: new(true),
},
{
doc: "IPv4 disabled",
name: "ipv4-disabled",
flags: []string{"--ipv4=false"},
expected: boolPtr(false),
expected: new(false),
},
}
@@ -243,8 +241,6 @@ func TestNetworkCreateIPv4(t *testing.T) {
// TestNetworkCreateIPv6 verifies behavior of the "--ipv6" option. This option
// is an optional bool, and must default to "nil", not "true" or "false".
func TestNetworkCreateIPv6(t *testing.T) {
strPtr := func(val bool) *bool { return &val }
tests := []struct {
doc, name string
flags []string
@@ -259,19 +255,19 @@ func TestNetworkCreateIPv6(t *testing.T) {
doc: "IPV6 enabled",
name: "ipv6-enabled",
flags: []string{"--ipv6=true"},
expected: strPtr(true),
expected: new(true),
},
{
doc: "IPV6 enabled (shorthand)",
name: "ipv6-enabled-shorthand",
flags: []string{"--ipv6"},
expected: strPtr(true),
expected: new(true),
},
{
doc: "IPV6 disabled",
name: "ipv6-disabled",
flags: []string{"--ipv6=false"},
expected: strPtr(false),
expected: new(false),
},
}
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package network
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package network
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package network
+7 -3
View File
@@ -1,8 +1,11 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package network
import (
"context"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -10,6 +13,7 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/cli/opts"
"github.com/fvbommel/sortorder"
"github.com/moby/moby/api/types/network"
"github.com/moby/moby/client"
"github.com/spf13/cobra"
)
@@ -61,8 +65,8 @@ func runList(ctx context.Context, dockerCLI command.Cli, options listOptions) er
}
}
sort.Slice(res.Items, func(i, j int) bool {
return sortorder.NaturalLess(res.Items[i].Name, res.Items[j].Name)
slices.SortFunc(res.Items, func(a, b network.Summary) int {
return sortorder.NaturalCompare(a.Name, b.Name)
})
networksCtx := formatter.Context{
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package node
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package node
+7 -3
View File
@@ -1,8 +1,11 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package node
import (
"context"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -10,6 +13,7 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/cli/opts"
"github.com/fvbommel/sortorder"
"github.com/moby/moby/api/types/swarm"
"github.com/moby/moby/client"
"github.com/spf13/cobra"
)
@@ -73,8 +77,8 @@ func runList(ctx context.Context, dockerCLI command.Cli, options listOptions) er
Output: dockerCLI.Out(),
Format: newFormat(format, options.quiet),
}
sort.Slice(res.Items, func(i, j int) bool {
return sortorder.NaturalLess(res.Items[i].Description.Hostname, res.Items[j].Description.Hostname)
slices.SortFunc(res.Items, func(a, b swarm.Node) int {
return sortorder.NaturalCompare(a.Description.Hostname, b.Description.Hostname)
})
return formatWrite(nodesCtx, res, info)
}
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package node
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package plugin
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package plugin
+7 -3
View File
@@ -1,8 +1,11 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package plugin
import (
"context"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -10,6 +13,7 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/cli/opts"
"github.com/fvbommel/sortorder"
"github.com/moby/moby/api/types/plugin"
"github.com/moby/moby/client"
"github.com/spf13/cobra"
)
@@ -54,8 +58,8 @@ func runList(ctx context.Context, dockerCli command.Cli, options listOptions) er
return err
}
sort.Slice(resp.Items, func(i, j int) bool {
return sortorder.NaturalLess(resp.Items[i].Name, resp.Items[j].Name)
slices.SortFunc(resp.Items, func(a, b plugin.Plugin) int {
return sortorder.NaturalCompare(a.Name, b.Name)
})
format := options.format
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package secret
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package secret
+7 -3
View File
@@ -1,8 +1,11 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package secret
import (
"context"
"sort"
"slices"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@@ -10,6 +13,7 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/cli/opts"
"github.com/fvbommel/sortorder"
"github.com/moby/moby/api/types/swarm"
"github.com/moby/moby/client"
"github.com/spf13/cobra"
)
@@ -59,8 +63,8 @@ func runSecretList(ctx context.Context, dockerCLI command.Cli, options listOptio
}
}
sort.Slice(res.Items, func(i, j int) bool {
return sortorder.NaturalLess(res.Items[i].Spec.Name, res.Items[j].Spec.Name)
slices.SortFunc(res.Items, func(a, b swarm.Secret) int {
return sortorder.NaturalCompare(a.Spec.Name, b.Spec.Name)
})
secretCtx := formatter.Context{
+15 -12
View File
@@ -1,9 +1,13 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package service
import (
"cmp"
"errors"
"fmt"
"sort"
"slices"
"strconv"
"strings"
"time"
@@ -615,8 +619,8 @@ func NewListFormat(source string, quiet bool) formatter.Format {
// ListFormatWrite writes the context
func ListFormatWrite(ctx formatter.Context, services client.ServiceListResult) error {
render := func(format func(subContext formatter.SubContext) error) error {
sort.Slice(services.Items, func(i, j int) bool {
return sortorder.NaturalLess(services.Items[i].Spec.Name, services.Items[j].Spec.Name)
slices.SortFunc(services.Items, func(a, b swarm.Service) int {
return sortorder.NaturalCompare(a.Spec.Name, b.Spec.Name)
})
for _, service := range services.Items {
serviceCtx := &serviceContext{service: service}
@@ -775,17 +779,16 @@ func (c *serviceContext) Ports() string {
return ""
}
pr := portRange{}
ports := []string{}
servicePorts := c.service.Endpoint.Ports
sort.Slice(servicePorts, func(i, j int) bool {
if servicePorts[i].Protocol == servicePorts[j].Protocol {
return servicePorts[i].PublishedPort < servicePorts[j].PublishedPort
}
return servicePorts[i].Protocol < servicePorts[j].Protocol
// Sort by protocol first, then by published port.
slices.SortFunc(c.service.Endpoint.Ports, func(a, b swarm.PortConfig) int {
return cmp.Or(
cmp.Compare(a.Protocol, b.Protocol),
cmp.Compare(a.PublishedPort, b.PublishedPort),
)
})
var pr portRange
var ports []string
for _, p := range c.service.Endpoint.Ports {
if p.PublishMode == swarm.PortConfigPublishModeIngress {
prIsRange := pr.tEnd != pr.tStart
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package service
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package service
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package service
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
// Package genericresource is a local fork of SwarmKit's [genericresource] package,
// without protobuf dependencies.
+5 -2
View File
@@ -1,3 +1,6 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.26
package service
import (
@@ -6,7 +9,7 @@ import (
"errors"
"fmt"
"io"
"sort"
"slices"
"strconv"
"strings"
@@ -314,7 +317,7 @@ func (lw *logWriter) Write(buf []byte) (int, error) {
d = append(d, k+"="+details[k])
}
// then sort em
sort.Strings(d)
slices.Sort(d)
// then join and append
output = append(output, []byte(strings.Join(d, ","))...)
output = append(output, ' ')
+6 -6
View File
@@ -1,15 +1,15 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package service
import (
"cmp"
"context"
"errors"
"fmt"
"net/netip"
"slices"
"sort"
"strconv"
"strings"
"time"
@@ -737,15 +737,15 @@ func (options *serviceOptions) ToService(ctx context.Context, apiClient client.N
}
networks := convertNetworks(options.networks)
for i, net := range networks {
nwID, err := resolveNetworkID(ctx, apiClient, net.Target)
for i := range networks {
nwID, err := resolveNetworkID(ctx, apiClient, networks[i].Target)
if err != nil {
return service, err
}
networks[i].Target = nwID
}
sort.Slice(networks, func(i, j int) bool {
return networks[i].Target < networks[j].Target
slices.SortFunc(networks, func(a, b swarm.NetworkAttachmentConfig) int {
return cmp.Compare(a.Target, b.Target)
})
resources, err := options.resources.ToResourceRequirements(flags)
+1 -1
View File
@@ -1,5 +1,5 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package progress
+25 -41
View File
@@ -1,16 +1,16 @@
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
//go:build go1.25
//go:build go1.26
package service
import (
"cmp"
"context"
"errors"
"fmt"
"maps"
"net/netip"
"slices"
"sort"
"strings"
"time"
@@ -352,8 +352,10 @@ func updateService(ctx context.Context, apiClient client.NetworkAPIClient, flags
if err := updateIsolation(flagIsolation, &cspec.Isolation); err != nil {
return err
}
if err := updateMounts(flags, &cspec.Mounts); err != nil {
return err
if anyChanged(flags, flagMountAdd, flagMountRemove) {
if err := updateMounts(flags, &cspec.Mounts); err != nil {
return err
}
}
updateSysCtls(flags, &task.ContainerSpec.Sysctls)
@@ -635,7 +637,7 @@ func updatePlacementConstraints(flags *pflag.FlagSet, placement *swarm.Placement
}
}
// Sort so that result is predictable.
sort.Strings(newConstraints)
slices.Sort(newConstraints)
placement.Constraints = newConstraints
}
@@ -720,7 +722,7 @@ func updateSysCtls(flags *pflag.FlagSet, field *map[string]string) {
}
func updateUlimits(flags *pflag.FlagSet, ulimits []*container.Ulimit) []*container.Ulimit {
newUlimits := make(map[string]*container.Ulimit)
newUlimits := make(map[string]*container.Ulimit, len(ulimits))
for _, ulimit := range ulimits {
newUlimits[ulimit.Name] = ulimit
@@ -737,17 +739,9 @@ func updateUlimits(flags *pflag.FlagSet, ulimits []*container.Ulimit) []*contain
newUlimits[ulimit.Name] = ulimit
}
}
if len(newUlimits) == 0 {
return nil
}
limits := make([]*container.Ulimit, 0, len(newUlimits))
for _, ulimit := range newUlimits {
limits = append(limits, ulimit)
}
sort.SliceStable(limits, func(i, j int) bool {
return limits[i].Name < limits[j].Name
return slices.SortedFunc(maps.Values(newUlimits), func(a, b *container.Ulimit) int {
return cmp.Compare(a.Name, b.Name)
})
return limits
}
func updateEnvironment(flags *pflag.FlagSet, field *[]string) {
@@ -953,14 +947,12 @@ func updateMounts(flags *pflag.FlagSet, mounts *[]mount.Mount) error {
newMounts = append(newMounts, mnt)
}
}
sort.Slice(newMounts, func(i, j int) bool {
a, b := newMounts[i], newMounts[j]
if a.Source == b.Source {
return a.Target < b.Target
}
return a.Source < b.Source
// Sort mounts by source, then by target.
slices.SortFunc(newMounts, func(a, b mount.Mount) int {
return cmp.Or(
cmp.Compare(a.Source, b.Source),
cmp.Compare(a.Target, b.Target),
)
})
*mounts = newMounts
return nil
@@ -980,7 +972,7 @@ func updateGroups(flags *pflag.FlagSet, groups *[]string) error {
}
}
// Sort so that result is predictable.
sort.Strings(newGroups)
slices.Sort(newGroups)
*groups = newGroups
return nil
@@ -1039,7 +1031,7 @@ func updateDNSConfig(flags *pflag.FlagSet, config **swarm.DNSConfig) error {
}
}
// Sort so that result is predictable.
sort.Strings(newConfig.Search)
slices.Sort(newConfig.Search)
options := (*config).Options
if flags.Changed(flagDNSOptionAdd) {
@@ -1054,7 +1046,7 @@ func updateDNSConfig(flags *pflag.FlagSet, config **swarm.DNSConfig) error {
}
}
// Sort so that result is predictable.
sort.Strings(newConfig.Options)
slices.Sort(newConfig.Options)
*config = newConfig
return nil
@@ -1107,12 +1099,8 @@ portLoop:
}
}
// Sort the PortConfig to avoid unnecessary updates
sort.Slice(newPorts, func(i, j int) bool {
// We convert PortConfig into `port/protocol`, e.g., `80/tcp`
// In updatePorts we already filter out with map so there is duplicate entries
return portConfigToString(&newPorts[i]) < portConfigToString(&newPorts[j])
})
// Sort the PortConfig to avoid unnecessary updates.
slices.SortFunc(newPorts, swarm.PortConfig.Compare)
*portConfig = newPorts
return nil
}
@@ -1348,8 +1336,8 @@ func updateNetworks(ctx context.Context, apiClient client.NetworkAPIClient, flag
}
}
sort.Slice(newNetworks, func(i, j int) bool {
return newNetworks[i].Target < newNetworks[j].Target
slices.SortFunc(newNetworks, func(a, b swarm.NetworkAttachmentConfig) int {
return cmp.Compare(a.Target, b.Target)
})
spec.TaskTemplate.Networks = newNetworks
@@ -1523,10 +1511,6 @@ func capsList(caps map[string]bool) []string {
if caps[opts.AllCapabilities] {
return []string{opts.AllCapabilities}
}
out := make([]string, 0, len(caps))
for c := range caps {
out = append(out, c)
}
sort.Strings(out)
return out
return slices.Sorted(maps.Keys(caps))
}
+29 -3
View File
@@ -4,7 +4,7 @@ import (
"context"
"fmt"
"net/netip"
"sort"
"slices"
"strconv"
"testing"
"time"
@@ -141,7 +141,7 @@ func TestUpdateEnvironment(t *testing.T) {
updateEnvironment(flags, &envs)
assert.Assert(t, is.Len(envs, 2))
// Order has been removed in updateEnvironment (map)
sort.Strings(envs)
slices.Sort(envs)
assert.Check(t, is.Equal("toadd=newenv", envs[0]))
assert.Check(t, is.Equal("tokeep=value", envs[1]))
}
@@ -250,6 +250,32 @@ func TestUpdateMounts(t *testing.T) {
assert.Check(t, is.Equal("/tokeep", mounts[1].Target))
}
func TestUpdateServiceForcePreservesMountOrder(t *testing.T) {
flags := newUpdateCommand(nil).Flags()
assert.NilError(t, flags.Set("force", "true"))
spec := &swarm.ServiceSpec{
TaskTemplate: swarm.TaskSpec{
ContainerSpec: &swarm.ContainerSpec{
Mounts: []mount.Mount{
{Type: mount.TypeVolume, Source: "z-volume", Target: "/data/z"},
{Type: mount.TypeVolume, Source: "a-volume", Target: "/data/a"},
{Type: mount.TypeVolume, Source: "m-volume", Target: "/data/m"},
},
},
},
}
err := updateService(context.Background(), nil, flags, spec)
assert.NilError(t, err)
assert.Equal(t, spec.TaskTemplate.ForceUpdate, uint64(1))
assert.DeepEqual(t, spec.TaskTemplate.ContainerSpec.Mounts, []mount.Mount{
{Type: mount.TypeVolume, Source: "z-volume", Target: "/data/z"},
{Type: mount.TypeVolume, Source: "a-volume", Target: "/data/a"},
{Type: mount.TypeVolume, Source: "m-volume", Target: "/data/m"},
})
}
func TestUpdateMountsWithDuplicateMounts(t *testing.T) {
flags := newUpdateCommand(nil).Flags()
flags.Set("mount-add", "type=volume,source=vol4,target=/toadd")
@@ -282,7 +308,7 @@ func TestUpdatePorts(t *testing.T) {
assert.Assert(t, is.Len(portConfigs, 2))
// Do a sort to have the order (might have changed by map)
targetPorts := []int{int(portConfigs[0].TargetPort), int(portConfigs[1].TargetPort)}
sort.Ints(targetPorts)
slices.Sort(targetPorts)
assert.Check(t, is.Equal(555, targetPorts[0]))
assert.Check(t, is.Equal(1000, targetPorts[1]))
}

Some files were not shown because too many files have changed in this diff Show More