Commit Graph

420 Commits

Author SHA1 Message Date
Harald Albers 39cd60b6eb Disable file completion for `--network-alias`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers b3703fa109 Disable file completion for `--name`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 31f1f43b1b Disable file completion for `--mount`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 0135d7ed2b Disable file completion for `--memory*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers e27ff3b202 Disable file completion for `--mac-address`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 6a801bcd40 Disable file completion for `--log-*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 93af729f53 Disable file completion for `--link-local-ip`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 0e4b312b90 Add completion for `--link`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 846439cdc4 Disable file completion for `--label`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 33d870adb7 Disable file completion for `--kernel-memory`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 77fd7d7a16 Disable file completion for `--isolation`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers b9c7f6c67e Add completion for `--ipc`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 784ad51c67 Disable file completion for `--ip6*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers e08a00701b Disable file completion for `--hostname`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 3ab5af735a Disable file completion for `--health-*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers d963cfc964 Disable file completion for `--group-add`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers a5aa7c9037 Disable file completion for `--gpus`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 6aba94e6dd Disable file completion for `--expose`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 9906847f54 Disable file completion for `--entrypoint`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 85ab1210ab Disable file completion for `--domainname`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 14038a915d Disable file completion for `--dns*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 285d0e32be Disable file completion for `--device-*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 4450f48f07 Disable file completion for `--cpu*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 00e3b7cdcc Add completion for `--cgroupns`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers fe1db01af1 Disable file completion for `--cgroup-parent`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 75d80775ce Disable file completion for `--blkio-weight*`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 55d4192c3a Add completion for `--attach`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers 98d5b0389d Disable file completion for `--annotation`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers d9766a3c65 Disable file completion for `--add-host`
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Harald Albers cc981e30ba Share the container completions
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-28 22:48:37 +00:00
Sebastiaan van Stijn 35d7b1a7a6
cli/command/container: TestWaitExitOrRemoved use subtests
=== RUN   TestWaitExitOrRemoved
    === RUN   TestWaitExitOrRemoved/normal-container
    === RUN   TestWaitExitOrRemoved/give-me-exit-code-42
    === RUN   TestWaitExitOrRemoved/i-want-a-wait-error
    time="2024-10-13T18:48:14+02:00" level=error msg="Error waiting for container: removal failed"
    === RUN   TestWaitExitOrRemoved/non-existent-container-id
    time="2024-10-13T18:48:14+02:00" level=error msg="error waiting for container: no such container: non-existent-container-id"
    --- PASS: TestWaitExitOrRemoved (0.00s)
        --- PASS: TestWaitExitOrRemoved/normal-container (0.00s)
        --- PASS: TestWaitExitOrRemoved/give-me-exit-code-42 (0.00s)
        --- PASS: TestWaitExitOrRemoved/i-want-a-wait-error (0.00s)
        --- PASS: TestWaitExitOrRemoved/non-existent-container-id (0.00s)
    PASS

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-16 12:03:17 +02:00
Sebastiaan van Stijn 3b38dc67be
cli/command/container: set empty args in tests and discard output
Prevent some tests from failing when running from a pre-compiled
testbinary, and discard output to make the output less noisy.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-16 12:01:25 +02:00
Harald Albers 147630a309 Only complete removable containers if --force is not given
Signed-off-by: Harald Albers <github@albersweb.de>
2024-10-10 21:34:38 +00:00
Sebastiaan van Stijn 185622986e
Merge pull request #5506 from Stavrospanakakis/cli-container-testing
command: add tests for container kill, commit, and pause
2024-10-08 16:15:26 +02:00
Sebastiaan van Stijn 8c7f713db6
cli/command/container: add shell completion for --platform flags
With this patch, completion is provided for `--platform` flags:

    docker run --platform<TAB>
    linux           linux/amd64     linux/arm/v5    linux/arm/v7    linux/arm64/v8  linux/riscv64   wasip1          windows
    linux/386       linux/arm       linux/arm/v6    linux/arm64     linux/ppc64le   linux/s390x     wasip1/wasm     windows/amd64

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-08 13:14:45 +02:00
Stavros Panakakis 442c38636f command: add tests for container kill, commit, and pause
This commit adds tests for the commands
docker kill, docker commit, and docker
pause. Also, it creates the mock methods
of the docker client ContainerCommit and
ContainerPause so they can
be used in the tests.

For docker kill, it covers the
cases that:
 - the command runs successfully
 - the client returns an error

For docker commit, it covers
the cases that:
 - the command runs successfully
 - the client returns an error

For docker pause, it covers
the cases that:
 - the command runs successfully
 - the client returns an error

Signed-off-by: Stavros Panakakis <stavrospanakakis@gmail.com>
2024-10-06 20:00:49 +03:00
Sebastiaan van Stijn 7908982543
Merge pull request #5467 from Stavrospanakakis/cli-container-tests
command: add tests for container diff and rename
2024-10-04 13:49:32 +02:00
Nicolas De Loof 9ecfe4f5a7
move parsing key-value files to a separate package
Move the code for parsing key-value files, such as used for
env-files and label-files to a separate package. This allows
other projects (such as compose) to use the same parsing
logic, but provide custom lookup functions for their situation
(which is slightly different).

The new package provides utilities for parsing key-value files
for either a file or an io.Reader. Most tests for EnvFile were
now testing functionality that's already tested in the new package,
so were (re)moved.

Co-authored-by: Nicolas De Loof <nicolas.deloof@gmail.com>
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-04 12:27:10 +02:00
Sebastiaan van Stijn d49e72c0ac
cli/command/container: add unit tests for completion helpers
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-02 10:38:25 +02:00
Sebastiaan van Stijn 462e08219d
cli/container: use github.com/moby/sys/capability for completions
We used a hard-coded list of capabilities that we copied from containerd,
but the new "capability" package allows use to have a maintained list
of capabilities.

There's likely still some improvements to be made;

First of all, the capability package could provide a function to get the list
of strings.

On the completion-side, we need to consider what format is most convenient;
currently we use the canonical name (uppercase and "CAP_" prefix), however,
tab-completion is case-sensitive by default, so requires the user to type
uppercase letters to filter the list of options.

Bash completion provides a `completion-ignore-case on` option to make completion
case-insensitive (https://askubuntu.com/a/87066), but it looks to be a global
option; the current cobra.CompletionOptions also don't provide this as an option
to be used in the generated completion-script.

Fish completion has `smartcase` (by default?) which matches any case if
all of the input is lowercase.

Zsh does not have a dedicated option, but allows setting matching-rules
(see https://superuser.com/a/1092328).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-01 14:01:02 +02:00
Sebastiaan van Stijn bd96bdaf1b
align "conflicting options" errors for consistency
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-01 12:08:56 +02:00
Sebastiaan van Stijn df8b34595b
cli/command/container: stop, restart: rename "--time" to "--timeout"
This renames the `--time` flag as used on `docker stop` and `docker restart`
to `--timeout`,  bringing it in line with other uses for this property,
such as `--stop-timeout` on `docker run`.

The `--time` option is deprecated and hidden, but will be kept for
backward compatibility, as these options existed for a long time.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-09-30 09:43:54 +02:00
Sebastiaan van Stijn ac502b5909
cli/command/container: add unit tests for container stop
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-09-26 18:58:40 +02:00
Sebastiaan van Stijn 16aa994255
cli/command/container: add unit tests for container restart
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-09-26 18:57:27 +02:00
Stavros Panakakis 46b360b059 command: add tests for container diff and rename
This commit adds tests for the commands
docker diff and docker rename. Also,
it creates the mock methods of the
docker client ContainerDiff and
ContainerRename so they can
be used in the tests.

For docker diff, it covers the
cases that:
 - the command runs successfully
 - the client returns an error
 - the container id is empty

For docker rename, it covers
the cases that:
 - the command runs successfully
 - the container old name is empty
 - the container new name is empty
 - the client returns an error

Co-authored-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Stavros Panakakis <stavrospanakakis@gmail.com>
2024-09-23 16:17:36 +03:00
Laura Brehm ddd4c39930
Merge pull request #5303 from laurazard/fix-flaky-runattach-test
tests/run: fix flaky `RunAttachTermination` test
2024-07-29 13:43:31 +01:00
Laura Brehm eac83574c1
tests/run: fix flaky `RunAttachTermination` test
This test was just incorrect (and testing incorrect
behavior): it was checking that `docker run` exited with a `context
canceled` error after signalling the CLI/cancelling the command's
context, but this was incorrect (and was fixed in
991b1303da - which was when this test
started failing).

However, since this test assertion was happening inside of a goroutine,
it would sometimes pass if this assertion didn't get to run before the
test suite terminated. It was flaky because sometimes this assertion
inside the goroutine did get to execute, but after the test finished
execution, which is a big no-no.

As an aside, assertions inside goroutines are generally bad, and `govet`
even has a linter for this (but it only catches `t.Fatal` and `t.FailNow`
calls and not `assert.Xx`.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2024-07-29 13:29:12 +01:00
Laura Brehm 7b46bfc5ac
attach: wait for exit code from `ContainerWait`
Such as with `docker run`, if a user CTRL-Cs while attached to a
container, we should forward the signal and wait for the exit from
`ContainerWait`, instead of just returning.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2024-07-26 14:05:31 +01:00
Laura Brehm 66aa0f672c
attach: don't return context cancelled error
In 3f0d90a2a9 we introduced a global
signal handler and made sure all the contexts passed into command
execution get (appropriately) cancelled when we get a SIGINT.

Due to that change, and how we use this context during `docker attach`,
we started to return the context cancelation error when a user signals
the running `docker attach`.

Since this is the intended behavior, we shouldn't return an error, so
this commit adds checks to ignore this specific error in this case.

Also adds a regression test.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2024-07-25 00:49:33 +01:00
Sebastiaan van Stijn 90058df305
cli/command/container: remove reportError, and put StatusError to use
The `reportError` utility was present because cli.StatusError would print
the error decorated with `Status: <error-message>, Code: <exit-code>`.
That was not desirable in many cases as it would mess-up the output. To
prevent this, the CLI had code to check for an empty `Status` (error message)
in which case the error would be "ignored" (and only used for the exit-status),
and the `reportError` utility would be used to manually print a custom error
message before returning the error.

Now that bca2090061 fixed the output format
of `cli.StatusError`, and 3dd6fc365d and
350a0b68a9 no longer discard these error,
we can get rid of this utility, and just set the error-message for
the status-error.

This patch:

- Introduces a `withHelp` which takes care of decorating errors with
  a "Run --help" hint for the user.
- Introduces a `toStatusError` utility that detects certain errors in
  the container to assign a corresponding exit-code (these error-codes
  can be used to distinguish "client" errors from "container" errors).
- Removes the `reportError` utility, and removes code that manually
  printed errors before returning.

Behavior is mostly unmodified, with the exception of some slight reformatting
of the errors:

- `withHelp` adds a `docker:` prefix to the error, to indicate the error
  is produced by the `docker` command. This prefix was already present
  in most cases.
- The "--help" hint is slightly updated ("Run 'docker run --help' for
  more information" instead of "See 'docker run --help'"), to make it
  more clear that it's a "call to action".
- An empty is added before the "--help" hint to separate it better from
  the error-message.

Before this patch:

    $ docker run --pull=invalid-option alpine
    docker: invalid pull option: 'invalid-option': must be one of "always", "missing" or "never".
    See 'docker run --help'.
    $ echo $?
    125

    $ docker run --rm alpine nosuchcommand
    docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "nosuchcommand": executable file not found in $PATH: unknown.
    $ echo $?
    127

With this patch:

    $ docker run --pull=invalid-option alpine
    docker: invalid pull option: 'invalid-option': must be one of "always", "missing" or "never"

    Run 'docker run --help' for more information
    $ echo $?
    125

    $ docker run --rm alpine nosuchcommand
    docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "nosuchcommand": executable file not found in $PATH: unknown.

    Run 'docker run --help' for more information
    $ echo $?
    127

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-17 15:59:30 +02:00