fix: docker-options:list flag parsing and ci test fixes

The :list subcommand had `SetInterspersed(false)` which forced flags to come before positional arguments; in practice users invoke it as `docker-options:list <app> --process X --phase Y`. Drop the non-interspersed setting so flags can appear after the app name. Two existing buildpacks/dockerfile tests appended directly to the legacy `DOCKER_OPTIONS_DEPLOY` file - that path is no longer the source of truth, so switch them to `docker-options:add`. The new migration test invoked `dokku plugin:trigger install` which fans out to every plugin and trips on unrelated permission errors; call the docker-options install binary directly instead. Tighten the report and JSON assertions to match the actual output format (`.` becomes a space in the display key, and JSON values may concatenate options).
This commit is contained in:
Jose Diaz-Gonzalez
2026-04-29 00:35:26 -04:00
parent 9c8d5f54fb
commit 97b86707e7
3 changed files with 11 additions and 21 deletions

View File

@@ -75,7 +75,6 @@ func main() {
err = dockeroptions.CommandClear(appName, *processes, phases)
case "list":
args := flag.NewFlagSet("docker-options:list", flag.ExitOnError)
args.SetInterspersed(false)
processType := args.String("process", "", "process type to query (omit for the default scope)")
phase := args.String("phase", "", "phase to query [build|deploy|run] (required)")
args.Parse(os.Args[2:])

View File

@@ -166,7 +166,7 @@ teardown() {
run /bin/bash -c "dokku docker-options:report $TEST_APP"
echo "output: $output"
assert_success
assert_output_contains "Docker options deploy.web"
assert_output_contains "Docker options deploy web"
assert_output_contains "-p 8080:5000"
}
@@ -184,18 +184,17 @@ teardown() {
echo "status: $status"
assert_success
assert_output_contains '"docker-options-deploy.web"'
assert_output_contains '"-p 8080:5000"'
assert_output_contains "-p 8080:5000"
assert_output_contains '"docker-options-deploy"'
assert_output_contains '"-v /logs:/logs"'
assert_output_contains "-v /logs:/logs"
}
@test "(docker-options) install migration is idempotent" {
echo '-v /tmp/legacy:/legacy' >"$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
sudo rm -f "/var/lib/dokku/config/docker-options/--global/migrated-from-files"
sudo rm -rf "/var/lib/dokku/config/docker-options/$TEST_APP"
sudo bash -c "echo '-v /tmp/legacy:/legacy' >\"$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY\""
rm -f "/var/lib/dokku/config/docker-options/--global/migrated-from-files"
rm -rf "/var/lib/dokku/config/docker-options/$TEST_APP"
run /bin/bash -c "dokku plugin:trigger install"
run /bin/bash -c "sudo /var/lib/dokku/plugins/enabled/docker-options/install"
echo "output: $output"
echo "status: $status"
assert_success
@@ -207,8 +206,8 @@ teardown() {
[[ -f "$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY.migrated" ]]
[[ ! -f "$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY" ]]
echo '-v /tmp/sneaky:/sneaky' >"$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
run /bin/bash -c "dokku plugin:trigger install"
sudo bash -c "echo '-v /tmp/sneaky:/sneaky' >\"$DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY\""
run /bin/bash -c "sudo /var/lib/dokku/plugins/enabled/docker-options/install"
echo "output: $output"
assert_success

View File

@@ -264,11 +264,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "echo '-v /tmp' >> $DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "echo '# comment' >> $DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
run /bin/bash -c "dokku docker-options:add $TEST_APP deploy \"-v /tmp\""
echo "output: $output"
echo "status: $status"
assert_success
@@ -295,11 +291,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "echo '-v /tmp' >> $DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "echo '# comment' >> $DOKKU_ROOT/$TEST_APP/DOCKER_OPTIONS_DEPLOY"
run /bin/bash -c "dokku docker-options:add $TEST_APP deploy \"-v /tmp\""
echo "output: $output"
echo "status: $status"
assert_success