From 5d802e3cf488bb0913246f4f3979445ca6bd44f2 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 28 May 2026 04:16:55 -0400 Subject: [PATCH] fix: separate docker-args outputs to avoid arg collisions Emitting the restart policy as a `--restart` argument from a `docker-args-process-deploy` trigger exposed a latent gluing bug: proxy and builder triggers concatenated `$STDIN$output` with no separator, and the scheduler and builders appended `docker-args-process-*` output directly onto the older `docker-args-*` output, so adjacent arguments could merge into values like `--restart=on-failure:10--label`. A space is now inserted at both the trigger echo and the concatenation so arguments always stay separated. --- plugins/builder-dockerfile/builder-build | 2 +- plugins/builder-herokuish/builder-build | 2 +- plugins/builder-nixpacks/builder-build | 2 +- plugins/builder-pack/builder-build | 2 +- plugins/builder-pack/docker-args-process-deploy | 2 +- plugins/builder-railpack/builder-build | 2 +- plugins/caddy-vhosts/docker-args-process-deploy | 2 +- .../haproxy-vhosts/docker-args-process-deploy | 2 +- .../openresty-vhosts/docker-args-process-deploy | 2 +- .../bin/scheduler-deploy-process | 2 +- .../bin/scheduler-deploy-process-container | 2 +- plugins/scheduler-docker-local/scheduler-run | 2 +- .../traefik-vhosts/docker-args-process-deploy | 2 +- tests/unit/logs.bats | 16 ++++++++-------- 14 files changed, 21 insertions(+), 21 deletions(-) diff --git a/plugins/builder-dockerfile/builder-build b/plugins/builder-dockerfile/builder-build index 158c55a1c..405cbfbbc 100755 --- a/plugins/builder-dockerfile/builder-build +++ b/plugins/builder-dockerfile/builder-build @@ -33,7 +33,7 @@ trigger-builder-dockerfile-builder-build() { plugn trigger pre-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR" local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")" DOCKER_ARGS+=" $DOKKU_GLOBAL_BUILD_ARGS" DOCKER_ARGS=" $DOCKER_ARGS " diff --git a/plugins/builder-herokuish/builder-build b/plugins/builder-herokuish/builder-build index 7f955a06b..73e17deb0 100755 --- a/plugins/builder-herokuish/builder-build +++ b/plugins/builder-herokuish/builder-build @@ -69,7 +69,7 @@ trigger-builder-herokuish-builder-build() { DOCKER_ARGS+=" --env=TRACE=true " DOCKER_ARGS+=" --env=BUILDPACK_XTRACE=1 " fi - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")" declare -a ARG_ARRAY eval "ARG_ARRAY=($DOCKER_ARGS)" diff --git a/plugins/builder-nixpacks/builder-build b/plugins/builder-nixpacks/builder-build index c5517a4d5..f56e8dc00 100755 --- a/plugins/builder-nixpacks/builder-build +++ b/plugins/builder-nixpacks/builder-build @@ -34,7 +34,7 @@ trigger-builder-nixpacks-builder-build() { fi local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")" DOCKER_ARGS+=" $DOKKU_GLOBAL_BUILD_ARGS" DOCKER_ARGS=" $DOCKER_ARGS " diff --git a/plugins/builder-pack/builder-build b/plugins/builder-pack/builder-build index ca1e50371..882b676e3 100755 --- a/plugins/builder-pack/builder-build +++ b/plugins/builder-pack/builder-build @@ -38,7 +38,7 @@ trigger-builder-pack-builder-build() { plugn trigger pre-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR" local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")" [[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" --env=TRACE=true " DOCKER_ARGS=" $DOCKER_ARGS " diff --git a/plugins/builder-pack/docker-args-process-deploy b/plugins/builder-pack/docker-args-process-deploy index da39a2a64..2e21e8d95 100755 --- a/plugins/builder-pack/docker-args-process-deploy +++ b/plugins/builder-pack/docker-args-process-deploy @@ -23,7 +23,7 @@ trigger-builder-pack-docker-args-process-deploy() { output=" --entrypoint launcher" fi - echo -n "$STDIN$output" + echo -n "$STDIN $output" } trigger-builder-pack-docker-args-process-deploy "$@" diff --git a/plugins/builder-railpack/builder-build b/plugins/builder-railpack/builder-build index e304be57e..94bfe957c 100755 --- a/plugins/builder-railpack/builder-build +++ b/plugins/builder-railpack/builder-build @@ -34,7 +34,7 @@ trigger-builder-railpack-builder-build() { fi local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")" DOCKER_ARGS=" $DOCKER_ARGS " eval set -- "$DOCKER_ARGS" diff --git a/plugins/caddy-vhosts/docker-args-process-deploy b/plugins/caddy-vhosts/docker-args-process-deploy index 828c8c5e5..829eee944 100755 --- a/plugins/caddy-vhosts/docker-args-process-deploy +++ b/plugins/caddy-vhosts/docker-args-process-deploy @@ -137,7 +137,7 @@ trigger-caddy-vhosts-docker-args-process-deploy() { done <"$proxy_labels_file_path" fi - echo -n "$STDIN$output" + echo -n "$STDIN $output" } trigger-caddy-vhosts-docker-args-process-deploy "$@" diff --git a/plugins/haproxy-vhosts/docker-args-process-deploy b/plugins/haproxy-vhosts/docker-args-process-deploy index 36724804a..0c19f32c4 100755 --- a/plugins/haproxy-vhosts/docker-args-process-deploy +++ b/plugins/haproxy-vhosts/docker-args-process-deploy @@ -132,7 +132,7 @@ trigger-haproxy-vhosts-docker-args-process-deploy() { done <"$proxy_labels_file_path" fi - echo -n "$STDIN$output" + echo -n "$STDIN $output" } trigger-haproxy-vhosts-docker-args-process-deploy "$@" diff --git a/plugins/openresty-vhosts/docker-args-process-deploy b/plugins/openresty-vhosts/docker-args-process-deploy index e2d9278a2..3488f4c52 100755 --- a/plugins/openresty-vhosts/docker-args-process-deploy +++ b/plugins/openresty-vhosts/docker-args-process-deploy @@ -214,7 +214,7 @@ trigger-openresty-vhosts-docker-args-process-deploy() { done <"$proxy_labels_file_path" fi - echo -n "$STDIN$output" + echo -n "$STDIN $output" } trigger-openresty-vhosts-docker-args-process-deploy "$@" diff --git a/plugins/scheduler-docker-local/bin/scheduler-deploy-process b/plugins/scheduler-docker-local/bin/scheduler-deploy-process index aeb6a60d1..a98cda979 100755 --- a/plugins/scheduler-docker-local/bin/scheduler-deploy-process +++ b/plugins/scheduler-docker-local/bin/scheduler-deploy-process @@ -53,7 +53,7 @@ fn-scheduler-deploy-process() { local DOCKER_ARGS DOCKER_ARGS=$(: | plugn trigger docker-args-deploy "$APP" "$IMAGE_TAG" "$PROC_TYPE") - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" "$PROC_TYPE") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" "$PROC_TYPE")" DOCKER_ARGS=" $DOCKER_ARGS " declare -a ARG_ARRAY eval "ARG_ARRAY=($DOCKER_ARGS)" diff --git a/plugins/scheduler-docker-local/bin/scheduler-deploy-process-container b/plugins/scheduler-docker-local/bin/scheduler-deploy-process-container index b9ec8a3c9..30c9dc795 100755 --- a/plugins/scheduler-docker-local/bin/scheduler-deploy-process-container +++ b/plugins/scheduler-docker-local/bin/scheduler-deploy-process-container @@ -24,7 +24,7 @@ main() { DOCKER_ARGS+=" --init" fi DOCKER_ARGS+=" $DOCKER_RUN_LABEL_ARGS $DOKKU_GLOBAL_RUN_ARGS " - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" "$PROC_TYPE" "$CONTAINER_INDEX") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" "$PROC_TYPE" "$CONTAINER_INDEX")" [[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" --env=TRACE=true" local START_CMD diff --git a/plugins/scheduler-docker-local/scheduler-run b/plugins/scheduler-docker-local/scheduler-run index 90327e49e..05d7bd8ca 100755 --- a/plugins/scheduler-docker-local/scheduler-run +++ b/plugins/scheduler-docker-local/scheduler-run @@ -74,7 +74,7 @@ trigger-scheduler-docker-local-scheduler-run() { local IMAGE_SOURCE_TYPE="dockerfile" is_image_herokuish_based "$IMAGE" "$APP" && IMAGE_SOURCE_TYPE="herokuish" is_image_cnb_based "$IMAGE" && IMAGE_SOURCE_TYPE="pack" - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-run "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG") + DOCKER_ARGS+=" $(: | plugn trigger docker-args-process-run "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG")" DOCKER_ARGS+=" -e DYNO=$PROCESS_TYPE.$DYNO_NUMBER --name $APP.$PROCESS_TYPE.$DYNO_NUMBER" if [[ "$DOKKU_RM_CONTAINER" ]]; then diff --git a/plugins/traefik-vhosts/docker-args-process-deploy b/plugins/traefik-vhosts/docker-args-process-deploy index ea4782555..35dcda750 100755 --- a/plugins/traefik-vhosts/docker-args-process-deploy +++ b/plugins/traefik-vhosts/docker-args-process-deploy @@ -166,7 +166,7 @@ trigger-traefik-vhosts-docker-args-process-deploy() { done <"$proxy_labels_file_path" fi - echo -n "$STDIN$output" + echo -n "$STDIN $output" } trigger-traefik-vhosts-docker-args-process-deploy "$@" diff --git a/tests/unit/logs.bats b/tests/unit/logs.bats index 5e5335630..9acde9348 100644 --- a/tests/unit/logs.bats +++ b/tests/unit/logs.bats @@ -803,7 +803,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output "--log-opt=max-size=20m" + assert_output "--log-opt=max-size=20m --restart=on-failure:10" DRIVER="journald" jq '."log-driver" = env.DRIVER' <"/etc/docker/daemon.json" >"$TMP_FILE" mv "$TMP_FILE" /etc/docker/daemon.json @@ -820,7 +820,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output_not_exists + assert_output "--restart=on-failure:10" if [[ "$driver" = "null" ]]; then DRIVER="$driver" jq 'del(."log-driver")' <"/etc/docker/daemon.json" >"$TMP_FILE" @@ -841,7 +841,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output "--log-opt=max-size=20m" + assert_output "--log-opt=max-size=20m --restart=on-failure:10" } @test "(logs) logs:set max-size with alternate log-driver" { @@ -860,7 +860,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output "--log-opt=max-size=20m" + assert_output "--log-opt=max-size=20m --restart=on-failure:10" run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --log-driver=local" 2>&1 echo "output: $output" @@ -871,7 +871,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output "--log-opt=max-size=20m" + assert_output "--log-opt=max-size=20m --restart=on-failure:10" run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --log-driver=json-file" 2>&1 echo "output: $output" @@ -882,18 +882,18 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output "--log-opt=max-size=20m" + assert_output "--log-opt=max-size=20m --restart=on-failure:10" run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --log-driver=journald" 2>&1 echo "output: $output" echo "status: $status" assert_success - run /bin/bash -c "echo "" | dokku plugin:trigger docker-args-process-deploy $TEST_APP 2>&1" + run /bin/bash -c "echo "" | dokku plugin:trigger docker-args-process-deploy $TEST_APP 2>&1 | xargs" echo "output: $output" echo "status: $status" assert_success - assert_output_not_exists + assert_output "--restart=on-failure:10" } @test "(logs) logs:vector" {