1
0
mirror of https://github.com/docker/cli.git synced 2026-01-13 18:22:35 +03:00
Commit Graph

10868 Commits

Author SHA1 Message Date
Sebastiaan van Stijn
23eadcd950 Merge pull request #5936 from thaJeztah/plugin_manager_cleanups
cli-plugins/manager: minor cleanups and refactoring
2025-03-19 16:13:13 +01:00
Sebastiaan van Stijn
3b45f3c09a Merge pull request #5926 from Benehiko/fix-attach-test-flake
test: fix flaky TestRunAttachTermination
2025-03-19 16:10:49 +01:00
Paweł Gronowski
0442a7378f Merge pull request #5929 from vvoland/vendor-docker
vendor: github.com/docker/docker v28.0.2-dev (bea4de25004d)
v28.0.2
2025-03-19 13:13:31 +00:00
Sebastiaan van Stijn
bb0e9adbc0 remove redundant error-handling for registry.ParseRepositoryInfo
Since [moby@c2c3d59], [registry.ParseRepositoryInfo] now always returns
a nil error, so we can remove the error handling.

[registry.ParseRepositoryInfo]: 5f0d6731eb/registry/config.go (L414-L443)
[moby@c2c3d59]: c2c3d593cf

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-03-19 13:55:38 +01:00
Sebastiaan van Stijn
e0979b3adf cli/command: remove ValidateMountWithAPIVersion
This validation is now handled by the API-client since [moby@5d6b566],
so no longer needed to be done in the cli. This function was only used
internally and has no external consumers, so removing it without
deprecating first.

[moby@5d6b566]: 5d6b56699d

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-03-19 13:53:24 +01:00
Paweł Gronowski
cab5164877 vendor: github.com/docker/docker v28.0.2-dev (bea4de25004d)
full diff: https://github.com/docker/docker/compare/v28.0.1...bea4de25004d

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-03-19 13:21:19 +01:00
Paweł Gronowski
888716aa59 Merge pull request #5932 from vvoland/TestConnectAndWait-flaky
test/cli-plugins: Attempt to make TestConnectAndWait less flaky
2025-03-19 12:19:18 +00:00
Sebastiaan van Stijn
667fa7bc92 cli: remove uses of deprecated registry.SetCertsDir
Starting with [moby@b633c4c], the registry package handles this internally
and there's no longer a need to set the path manually for rootlessKit

[moby@b633c4c]: b633c4cc33

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-03-19 13:18:23 +01:00
Sebastiaan van Stijn
63f5930c17 Merge pull request #5784 from thaJeztah/docs_gen_no_pkg_errors
docs/generate: remove uses of pkg/errors
2025-03-19 13:09:16 +01:00
Sebastiaan van Stijn
0f75059e9f Merge pull request #5938 from thaJeztah/man_cleans
man: fix minor linting issues
2025-03-19 12:49:12 +01:00
Paweł Gronowski
0ce8989a78 test/cli-plugins: Try to make TestConnectAndWait less flaky
- Add runtime.Gosched() calls to encourage goroutine scheduling
- Increase the timeout from 10ms to 500ms
- Use poll.WaitOn with appropriate delays to ensure the goroutine has
  spawned before checking
- Lock the test goroutines to its own thread

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2025-03-19 11:52:07 +01:00
Sebastiaan van Stijn
2f795987d6 docs/generate: remove uses of pkg/errors
While there may be reasons to keep pkg/errors in production code,
we don't need them for this generator code.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-19 10:49:16 +01:00
Sebastiaan van Stijn
5185ab89fe man: loadLongDescription: rename arg to avoid shadowing
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-19 10:48:11 +01:00
Sebastiaan van Stijn
344a85eae6 man: fix unhandled error in loadLongDescription
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-19 10:48:11 +01:00
Sebastiaan van Stijn
c81f38feac man: remove legacy build-tags
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-19 10:48:10 +01:00
Alano Terblanche
966b44183f test: fix flaky TestRunAttachTermination
This patch fixes the `TestRunAttachTermination` flaky runs.
It seems like we weren't halting on the `waitFunc` so if the
process was fast enough to setup the signal handler and execute
`waitExitOrRemoved`. We now instead wait for the `killCh` channel
to close inside the mocked `waitFunc`.

Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
2025-03-18 16:11:54 +01:00
Sebastiaan van Stijn
ecfdf74115 Merge pull request #5912 from thaJeztah/refactor_secret_config_create
secret create, config create: refactor, use limit reader, and touch up errors
2025-03-18 15:52:36 +01:00
Sebastiaan van Stijn
d6d8ca6ebe config create: refactor, use limit reader, and touch up errors
Swarm has size constraints on the size of configs, but the client-side would
read content into memory, regardless its size. This could lead to either the
client reading too much into memory, or it sending data that's larger than
the size limit of gRPC, which resulted in the error not being handled by
SwarmKit and a generic gRPC error returned.

Reading a config from a file used a system.OpenSequential for reading
([FILE_FLAG_SEQUENTIAL_SCAN]). While there could be a very marginal benefit
to prevent polluting the system's cache (Windows won’t aggressively keep it
in the cache, freeing up system memory for other tasks). These details were
not documented in code, and possibly may be too marginal, but adding a comment
to outline won't hurt so this patch also adds a comment.

This patch:

- Factors out the reading code to a readConfigData, analogous to the
  equivalent in secret create.
- Implements reading the data with a limit-reader to prevent reading
  large files into memory.
- The limit is based on SwarmKits limits ([MaxConfigSize]), but made
  twice that size, just in case larger sizes are supported in future;
  the main goal is to have some constraints, and to prevent hitting
  the gRPC limit.
- Updates some error messages to include STDIN (when used), or the
  filename (when used).

Before this patch:

    ls -lh largefile
    -rw-------  1 thajeztah  staff   8.1M Mar  9 00:19 largefile

    docker config create nosuchfile ./nosuchfile
    Error reading content from "./nosuchfile": open ./nosuchfile: no such file or directory

    docker config create toolarge ./largefile
    Error response from daemon: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (8462870 vs. 4194304)

    docker config create empty ./emptyfile
    Error response from daemon: rpc error: code = InvalidArgument desc = config data must be larger than 0 and less than 1024000 bytes

    cat ./largefile | docker config create toolarge -
    Error response from daemon: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (8462870 vs. 4194304)

    cat ./emptyfile | docker config create empty -
    Error response from daemon: rpc error: code = InvalidArgument desc = config data must be larger than 0 and less than 1024000 bytes

With this patch:

    docker config create nosuchfile ./nosuchfile
    error reading from ./nosuchfile: open ./nosuchfile: no such file or directory

    docker config create empty ./emptyfile
    error reading from ./emptyfile: data is empty

    docker config create toolarge ./largefile
    Error response from daemon: rpc error: code = InvalidArgument desc = config data must be larger than 0 and less than 1024000 bytes

    cat ./largefile | docker config create toolarge -
    Error response from daemon: rpc error: code = InvalidArgument desc = secret data must be larger than 0 and less than 1024000 bytes

    cat ./emptyfile | docker config create empty -
    error reading from STDIN: data is empty

[FILE_FLAG_SEQUENTIAL_SCAN]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN
[MaxConfigSize]: https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 14:48:15 +01:00
Sebastiaan van Stijn
3a35b16669 secret create: refactor, use limit reader, and touch up errors
Swarm has size constraints on the size of secrets, but the client-side would
read content into memory, regardless its size. This could lead to either the
client reading too much into memory, or it sending data that's larger than
the size limit of gRPC, which resulted in the error not being handled by
SwarmKit and a generic gRPC error returned.

Reading a secret from a file was added in [moby@c6f0b7f], which used a
system.OpenSequential for reading ([FILE_FLAG_SEQUENTIAL_SCAN]). While
there could be a very marginal benefit to prevent polluting the system's
cache (Windows won’t aggressively keep it in the cache, freeing up system
memory for other tasks). These details were not documented in code, and
possibly may be too marginal, but adding a comment to outline won't hurt
so this patch also adds a comment.

This patch:

- Rewrites readSecretData to not return a nil-error if no file was
  set, in stead only calling it when not using a driver.
- Implements reading the data with a limit-reader to prevent reading
  large files into memory.
- The limit is based on SwarmKits limits ([MaxSecretSize]), but made
  twice that size, just in case larger sizes are supported in future;
  the main goal is to have some constraints, and to prevent hitting
  the gRPC limit.
- Updates some error messages to include STDIN (when used), or the
  filename (when used).

Before this patch:

    ls -lh largefile
    -rw-------  1 thajeztah  staff   8.1M Mar  9 00:19 largefile

    docker secret create nosuchfile ./nosuchfile
    Error reading content from "./nosuchfile": open ./nosuchfile: no such file or directory

    docker secret create toolarge ./largefile
    Error response from daemon: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (8462870 vs. 4194304)

    docker secret create empty ./emptyfile
    Error response from daemon: rpc error: code = InvalidArgument desc = secret data must be larger than 0 and less than 512000 bytes

    cat ./largefile | docker secret create toolarge -
    Error response from daemon: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (8462870 vs. 4194304)

    cat ./emptyfile | docker secret create empty -
    Error response from daemon: rpc error: code = InvalidArgument desc = secret data must be larger than 0 and less than 512000 bytes

With this patch:

    docker secret create nosuchfile ./nosuchfile
    error reading from ./nosuchfile: open ./nosuchfile: no such file or directory

    docker secret create empty ./emptyfile
    error reading from ./emptyfile: data is empty

    docker secret create toolarge ./largefile
    Error response from daemon: rpc error: code = InvalidArgument desc = secret data must be larger than 0 and less than 512000 bytes

    cat ./largefile | docker secret create toolarge -
    Error response from daemon: rpc error: code = InvalidArgument desc = secret data must be larger than 0 and less than 512000 bytes

    cat ./emptyfile | docker secret create empty -
    error reading from STDIN: data is empty

[moby@c6f0b7f]: c6f0b7f448
[FILE_FLAG_SEQUENTIAL_SCAN]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN
[MaxSecretSize]: https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/api/validation#MaxSecretSize

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 14:47:56 +01:00
Sebastiaan van Stijn
091421f13f cli-plugins/manager: getPluginDirs: remove redundant error-return
This function returned an error (if any) from [config.Path]. However, the
only situation in which an error could be returned was if the given path
to append to `config.Dir` was outside of the config directory. This can
only happen if the path to append would try to traverse directories (e.g.,
passing `../../cli-plugins`).

Given that we're passing a hard-coded value, that would not be the case,
so we can simplify the code to join the path directly, and don't have to
handle errors.

[config.Path]: 2d74733942/cli/config/config.go (L100-L107)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 12:10:38 +01:00
Sebastiaan van Stijn
d1a19d4476 cli-plugins/manager: ListPlugins: return early if no candidates
Skip the other logic, which includes listing all commands provided; if
there's no plugin-candidates, those steps won't be needed.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 12:10:38 +01:00
Sebastiaan van Stijn
40725aea3c cli-plugins/manager: add test for empty / non-existing plugin dirs
Verify that listPluginCandidates returns an empty result if nothing was
found.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 12:10:38 +01:00
Sebastiaan van Stijn
fdcfd229aa cli-plugins/manager: rename var that shadowed arg in test
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 12:10:38 +01:00
Sebastiaan van Stijn
abd02b6a23 cli-plugins/manager: ListPlugins: pass context to error-group
This error-group was added in 89583b92b7, but
passed a context.TODO because the function didn't have a context as argument.

However, it does get the root-command passed, which holds the context, so
we can pass that.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-18 12:10:28 +01:00
Sebastiaan van Stijn
2d74733942 Merge pull request #5869 from thaJeztah/bump_crypto
vendor: golang.org/x/crypto v0.35.0
2025-03-11 10:10:04 +01:00
Sebastiaan van Stijn
d421dea843 Merge pull request #5908 from thaJeztah/client_api_version
remove uses of cli.DefaultVersion()
2025-03-11 10:07:31 +01:00
Sebastiaan van Stijn
4bdfd3b684 vendor: golang.org/x/crypto v0.35.0
We have tagged version v0.35.0 of golang.org/x/crypto in order to address
a security issue. Version v0.35.0 of golang.org/x/crypto fixes a vulnerability
in the golang.org/x/crypto/ssh package which could cause a denial of service.
SSH servers which implement file transfer protocols are vulnerable to a denial
of service attack from clients which complete the key exchange slowly, or not
at all, causing pending content to be read into memory, but never transmitted.
Thanks to Yuichi Watanabe for reporting this issue.
This is CVE-2025-22869 and Go issue https://go.dev/issue/71931.

full diff: https://github.com/golang/crypto/compare/v0.31.0...v0.35.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 20:04:11 +01:00
Sebastiaan van Stijn
09caaa312d vendor: golang.org/x/crypto v0.34.0
No code-changes, but updates the minimum go version to go1.23:

> all: upgrade go directive to at least 1.23.0 [generated]
>
> By now Go 1.24.0 has been released, and Go 1.22 is no longer supported
> per the Go Release Policy (https://go.dev/doc/devel/release#policy).
>
> For golang/go#69095.

full diff: https://github.com/golang/crypto/compare/v0.31.0...v0.34.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 20:04:11 +01:00
Sebastiaan van Stijn
4dfe7ad85e vendor: golang.org/x/text v0.22.0
no code-changes in vendored files.

full diff: https://github.com/golang/text/compare/v0.21.0...v0.22.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 20:04:11 +01:00
Sebastiaan van Stijn
3cdc44568d vendor: golang.org/x/sync v0.11.0
no code-changes, only a godoc comment updated

full diff: https://github.com/golang/sync/compare/v0.10.0...v0.11.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 20:04:11 +01:00
Sebastiaan van Stijn
19ce7f2eaf vendor: golang.org/x/sys v0.30.0
full diff: https://github.com/golang/sys/compare/v0.29.0...v0.30.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 20:04:10 +01:00
Sebastiaan van Stijn
1673cd88a8 Merge pull request #5920 from thaJeztah/vendor_min_go_version
vendor.mod: update minimum go version to go1.23
2025-03-10 20:03:11 +01:00
Sebastiaan van Stijn
a9e6180cd8 vendor.mod: update minimum go version to go1.23
Go maintainers started to unconditionally update the minimum go version
for golang.org/x/ dependencies to go1.23, which means that we'll no longer
be able to support any version below that when updating those dependencies;

> all: upgrade go directive to at least 1.23.0 [generated]
>
> By now Go 1.24.0 has been released, and Go 1.22 is no longer supported
> per the Go Release Policy (https://go.dev/doc/devel/release#policy).
>
> For golang/go#69095.

This updates our minimum version to go1.23, as we won't be able to maintain
compatibility with older versions because of the above.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 18:29:49 +01:00
Sebastiaan van Stijn
3d3f78028a Merge pull request #5919 from thaJeztah/no_generics
cli/command/formatter: add missing go:build tag
2025-03-10 18:18:06 +01:00
Sebastiaan van Stijn
64b56179b5 Merge pull request #5907 from thaJeztah/opts_cleanup
opts: remove uses pkg/errors, and move swarm-specific opts to a separate package
2025-03-10 18:03:49 +01:00
Sebastiaan van Stijn
29c1ababd7 Merge pull request #5903 from thaJeztah/cli_plugins_no_pkg_errors
cli-plugins/manager: use stdlib errors, and minor cleanup
2025-03-10 18:02:58 +01:00
Sebastiaan van Stijn
2cd4786630 cli/command/formatter: add missing go:build tag
Seen failing when used elsewhere;

    vendor/github.com/docker/cli/cli/command/formatter/displayutils.go:78:20: predeclared any requires go1.18 or later (-lang was set to go1.16; check go.mod)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-10 17:39:06 +01:00
Sebastiaan van Stijn
571124d4b0 Merge pull request #5909 from thaJeztah/move_winresources
move winresources into cmd/docker
2025-03-10 16:30:38 +01:00
Sebastiaan van Stijn
60ae1bb1fc Merge pull request #5910 from thaJeztah/move_service_logs
service/logs: move to cli/internal/logdetails
2025-03-10 16:14:22 +01:00
Sebastiaan van Stijn
879acd15ff Merge pull request #5911 from thaJeztah/builder_nits
cli/command/image: fix some minor linting issues
2025-03-10 16:12:24 +01:00
Sebastiaan van Stijn
a07391c65d Merge pull request #5906 from thaJeztah/remove_client_warnings
fix duplicate warnings on docker run / docker create, and slight refactor
2025-03-10 16:03:38 +01:00
Sebastiaan van Stijn
650b45a42a Merge pull request #5915 from thaJeztah/remove_StringSliceReplaceAt
cli/command: remove StringSliceReplaceAt utility
2025-03-10 13:37:31 +01:00
Sebastiaan van Stijn
bc57a035c4 Merge pull request #5916 from thaJeztah/move_command_prettyprint
cli/command: move PrettyPrint utility to cli/command/formatter
2025-03-10 13:35:03 +01:00
Sebastiaan van Stijn
a390a32da1 Merge pull request #5917 from thaJeztah/prunefilters_shallow_interface
cli/command: PruneFilters: require smaller interface
2025-03-10 13:33:00 +01:00
Sebastiaan van Stijn
70bf6cb7c5 Merge pull request #5863 from Benehiko/only-experimental-workflow
workflow/e2e: only run experimental daemon
2025-03-10 13:32:13 +01:00
Paweł Gronowski
e9cf371b56 Merge pull request #5913 from thaJeztah/image_load_cleanup
image load: combine checks to a single switch
2025-03-10 11:54:30 +00:00
Alano Terblanche
c26090bd3e workflow/e2e: only run experimental daemon
Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
2025-03-10 12:26:20 +01:00
Sebastiaan van Stijn
7ec69def79 Merge pull request #5904 from thaJeztah/cleanup_buildtags
remove legacy build-tags
2025-03-10 11:41:58 +01:00
Sebastiaan van Stijn
d2b751ce58 cli/command: PruneFilters: require smaller interface
This function only needs access to the CLI's configfile; use the
config.Prider interface to be more clear on what's expected.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-09 22:30:05 +01:00
Sebastiaan van Stijn
a5ec6c2963 cli/command: remove StringSliceReplaceAt utility
It was only used internally in cmd/docker and has no known external
consumers. Move it to cmd/docker and un-export it.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-03-09 22:22:29 +01:00