fix: split report global keys into raw and computed across plugins

The `<plugin>-global-<property>` keys in `:report` output returned the resolved value with the built-in default substituted in, so external tooling could not distinguish a property that had been set globally to the default from one that had never been set. The bare keys for caddy, haproxy, and traefik global-only properties had the same shape. The `global-<property>` keys now hold the raw stored value and are empty when nothing has been set, and a new `computed-<property>` key holds the effective value used at runtime, falling back through the per-app value (where one exists), the global value, and the built-in default. The bare global-only keys for the three proxy plugins are removed in favor of the raw/computed pair. Closes #8631.
This commit is contained in:
Jose Diaz-Gonzalez
2026-05-13 16:39:38 -04:00
parent f3bdd7e4ec
commit 76b033234f
56 changed files with 1031 additions and 334 deletions

View File

@@ -278,7 +278,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "app.json"
assert_output ""
run /bin/bash -c "dokku app-json:report $TEST_APP --format json"
echo "output: $output"
@@ -286,7 +286,7 @@ teardown() {
assert_success
assert_output_contains '"app-json-appjson-path":"app2.json"'
assert_output_contains '"app-json-computed-appjson-path":"app2.json"'
assert_output_contains '"app-json-global-appjson-path":"app.json"'
assert_output_contains '"app-json-global-appjson-path":""'
assert_output_contains "app-json-selected" 0
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-selected"

View File

@@ -228,12 +228,24 @@ PY
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku git:report --global --git-computed-archive-max-size"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "1073741824"
run /bin/bash -c "dokku git:report --global --git-global-archive-max-files"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku git:report --global --git-computed-archive-max-files"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "10000"
run /bin/bash -c "dokku git:set --global archive-max-size 2147483648"
@@ -244,6 +256,12 @@ PY
assert_success
assert_output "2147483648"
run /bin/bash -c "dokku git:report --global --git-computed-archive-max-size"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "2147483648"
run /bin/bash -c "dokku git:set --global archive-max-size"
assert_success
}

View File

@@ -46,7 +46,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "Dockerfile"
assert_output ""
run /bin/bash -c "dokku builder-dockerfile:report --global --format json | jq -r 'has(\"dockerfile-path\")'"
echo "output: $output"
@@ -64,7 +64,23 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "Dockerfile"
assert_output ""
run /bin/bash -c "dokku builder-dockerfile:set --global dockerfile-path Dockerfile.custom"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku builder-dockerfile:report --global --builder-dockerfile-global-dockerfile-path"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "Dockerfile.custom"
run /bin/bash -c "dokku builder-dockerfile:set --global dockerfile-path"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(builder-dockerfile:set)" {

View File

@@ -18,13 +18,31 @@ teardown() {
dokku nginx:start
}
@test "(caddy:report) --global --caddy-log-level" {
@test "(caddy:report) --global global vs computed log-level" {
run /bin/bash -c "dokku caddy:report --global --caddy-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku caddy:report --global --caddy-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "ERROR"
run /bin/bash -c "dokku caddy:set --global log-level DEBUG"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku caddy:report --global --caddy-log-level"
run /bin/bash -c "dokku caddy:report --global --caddy-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "DEBUG"
run /bin/bash -c "dokku caddy:report --global --caddy-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
@@ -34,6 +52,44 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku caddy:report --global --caddy-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku caddy:report --global --caddy-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "ERROR"
}
@test "(caddy:report) --global raw and computed keys in --format json" {
run /bin/bash -c "dokku --quiet caddy:report --global --format json | jq -r '.\"global-image\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet caddy:report --global --format json | jq -r '.\"computed-image\"'"
echo "output: $output"
echo "status: $status"
assert_success
refute_output ""
run /bin/bash -c "dokku --quiet caddy:report --global --format json | jq -r '.\"global-polling-interval\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet caddy:report --global --format json | jq -r '.\"computed-polling-interval\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "5s"
}
@test "(caddy) global-only keys" {
@@ -80,7 +136,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "false"
assert_output ""
run /bin/bash -c "dokku caddy:set $TEST_APP tls-internal true"
echo "output: $output"

View File

@@ -41,27 +41,44 @@ teardown() {
}
@test "(checks:report) --global --format json" {
run /bin/bash -c "dokku checks:set --global wait-to-retire"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet checks:report --global --format json | jq -e ."
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet checks:report --global --format json | jq -r '.\"global-wait-to-retire\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet checks:report --global --format json | jq -r '.\"computed-wait-to-retire\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "60"
run /bin/bash -c "dokku checks:set --global wait-to-retire 90"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku checks:report --global --format json | jq -e ."
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku checks:report --global --format json | jq -r '.\"global-wait-to-retire\"'"
run /bin/bash -c "dokku --quiet checks:report --global --format json | jq -r '.\"global-wait-to-retire\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "90"
run /bin/bash -c "dokku checks:report --global --format json | jq -r 'has(\"wait-to-retire\")'"
run /bin/bash -c "dokku --quiet checks:report --global --format json | jq -r '.\"computed-wait-to-retire\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "false"
assert_output "90"
run /bin/bash -c "dokku checks:report --global"
echo "output: $output"
@@ -69,16 +86,22 @@ teardown() {
assert_success
assert_output_contains "global checks information"
run /bin/bash -c "dokku checks:report --global --checks-global-wait-to-retire"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "90"
run /bin/bash -c "dokku checks:set --global wait-to-retire"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku checks:report --global --checks-global-wait-to-retire"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku checks:report --global --checks-computed-wait-to-retire"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "60"
}
@test "(checks) checks:help" {

View File

@@ -145,6 +145,60 @@ teardown() {
assert_output "false"
}
@test "(git:report) --global raw and computed keys" {
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"global-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"computed-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "master"
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"global-archive-max-files\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"computed-archive-max-files\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "10000"
run /bin/bash -c "dokku git:set --global deploy-branch main"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"global-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "main"
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"computed-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "main"
run /bin/bash -c "dokku git:set --global deploy-branch"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet git:report --global --format json | jq -r '.\"global-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
}
@test "(git) git:help" {
run /bin/bash -c "dokku git"
echo "output: $output"

View File

@@ -887,7 +887,13 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "master"
assert_output ""
run /bin/bash -c "dokku git:report $TEST_APP --format json | jq -r '.\"computed-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "main"
run /bin/bash -c "dokku git:report $TEST_APP --format json | jq -e ."
echo "output: $output"
@@ -925,6 +931,12 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku git:report --global --format json | jq -r '.\"computed-deploy-branch\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "master"
run /bin/bash -c "dokku git:report --global --format json | jq -r 'has(\"deploy-branch\")'"
@@ -937,5 +949,11 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku git:report --global --git-computed-deploy-branch"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "master"
}

View File

@@ -57,7 +57,13 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku haproxy:report --global --haproxy-refresh-conf"
run /bin/bash -c "dokku haproxy:report --global --haproxy-global-refresh-conf"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "5"
run /bin/bash -c "dokku haproxy:report --global --haproxy-computed-refresh-conf"
echo "output: $output"
echo "status: $status"
assert_success
@@ -74,7 +80,42 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku haproxy:report --global --haproxy-refresh-conf"
run /bin/bash -c "dokku haproxy:report --global --haproxy-global-refresh-conf"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku haproxy:report --global --haproxy-computed-refresh-conf"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "10"
}
@test "(haproxy:report) --global raw and computed keys in --format json" {
run /bin/bash -c "dokku haproxy:set --global refresh-conf"
assert_success
run /bin/bash -c "dokku --quiet haproxy:report --global --format json | jq -r '.\"global-image\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet haproxy:report --global --format json | jq -r '.\"computed-image\"'"
echo "output: $output"
echo "status: $status"
assert_success
refute_output ""
run /bin/bash -c "dokku --quiet haproxy:report --global --format json | jq -r '.\"global-refresh-conf\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet haproxy:report --global --format json | jq -r '.\"computed-refresh-conf\"'"
echo "output: $output"
echo "status: $status"
assert_success

View File

@@ -66,6 +66,47 @@ teardown() {
assert_success
}
@test "(network:report) tld raw vs computed" {
run /bin/bash -c "dokku network:set --global tld"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet network:report --global --format json | jq -r '.\"network-global-tld\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku network:set --global tld example.test"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet network:report --global --format json | jq -r '.\"network-global-tld\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "example.test"
run /bin/bash -c "dokku --quiet network:report $TEST_APP --format json | jq -r '.\"network-global-tld\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "example.test"
run /bin/bash -c "dokku --quiet network:report $TEST_APP --format json | jq -r '.\"network-computed-tld\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "example.test"
run /bin/bash -c "dokku network:set --global tld"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(network) network:set bind-all-interfaces" {
run deploy_app
echo "output: $output"

View File

@@ -28,6 +28,54 @@ teardown() {
assert_output "$help_output"
}
@test "(proxy:report) --global raw vs computed type" {
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-global-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-computed-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "nginx"
run /bin/bash -c "dokku proxy:set --global type caddy"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-global-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "caddy"
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-computed-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "caddy"
run /bin/bash -c "dokku proxy:set --global type"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-global-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet proxy:report --global --format json | jq -r '.\"proxy-computed-type\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "nginx"
}
@test "(proxy:set) invalid port mapping set" {
run /bin/bash -c "dokku proxy:set $TEST_APP http:80:80"
echo "output: $output"

View File

@@ -10,17 +10,29 @@ teardown() {
global_teardown
}
@test "(scheduler-docker-local:report) --global --scheduler-docker-local-global-init-process" {
@test "(scheduler-docker-local:report) --global raw and computed keys" {
run /bin/bash -c "dokku scheduler-docker-local:report --global --scheduler-docker-local-global-init-process"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:report --global --scheduler-docker-local-computed-init-process"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
run /bin/bash -c "dokku scheduler-docker-local:report --global --scheduler-docker-local-global-parallel-schedule-count"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:report --global --scheduler-docker-local-computed-parallel-schedule-count"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "1"
}
@@ -46,7 +58,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "1"
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:report $TEST_APP --scheduler-docker-local-init-process"
echo "output: $output"
@@ -64,7 +76,7 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:report $TEST_APP --scheduler-docker-local-invalid-flag"
echo "output: $output"
@@ -99,7 +111,7 @@ teardown() {
run /bin/bash -c "dokku scheduler-docker-local:report $TEST_APP --format json | jq -r '.\"global-init-process\"'"
echo "output: $output"
echo "status: $status"
assert_output "true"
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:report $TEST_APP --format json | jq -r '.\"parallel-schedule-count\"'"
echo "output: $output"
@@ -114,7 +126,7 @@ teardown() {
run /bin/bash -c "dokku scheduler-docker-local:report $TEST_APP --format json | jq -r '.\"global-parallel-schedule-count\"'"
echo "output: $output"
echo "status: $status"
assert_output "1"
assert_output ""
run /bin/bash -c "dokku scheduler-docker-local:set $TEST_APP init-process false"
echo "output: $output"

View File

@@ -23,13 +23,31 @@ teardown() {
dokku nginx:start
}
@test "(traefik:report) --global --traefik-log-level" {
@test "(traefik:report) --global global vs computed log-level" {
run /bin/bash -c "dokku traefik:report --global --traefik-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku traefik:report --global --traefik-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "ERROR"
run /bin/bash -c "dokku traefik:set --global log-level DEBUG"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report --global --traefik-log-level"
run /bin/bash -c "dokku traefik:report --global --traefik-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "DEBUG"
run /bin/bash -c "dokku traefik:report --global --traefik-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
@@ -39,6 +57,44 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report --global --traefik-global-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku traefik:report --global --traefik-computed-log-level"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "ERROR"
}
@test "(traefik:report) --global raw and computed keys in --format json" {
run /bin/bash -c "dokku --quiet traefik:report --global --format json | jq -r '.\"global-api-vhost\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet traefik:report --global --format json | jq -r '.\"computed-api-vhost\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "traefik.dokku.me"
run /bin/bash -c "dokku --quiet traefik:report --global --format json | jq -r '.\"global-dashboard-enabled\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku --quiet traefik:report --global --format json | jq -r '.\"computed-dashboard-enabled\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "false"
}
@test "(traefik) global-only keys" {
@@ -409,7 +465,7 @@ teardown() {
}
@test "(traefik) [dns-01] challenge-mode property" {
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-challenge-mode"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-challenge-mode"
echo "output: $output"
echo "status: $status"
assert_success
@@ -420,7 +476,7 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-challenge-mode"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-challenge-mode"
echo "output: $output"
echo "status: $status"
assert_success
@@ -431,7 +487,7 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-challenge-mode"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-challenge-mode"
echo "output: $output"
echo "status: $status"
assert_success
@@ -439,7 +495,7 @@ teardown() {
}
@test "(traefik) [dns-01] dns-provider property" {
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-dns-provider"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-dns-provider"
echo "output: $output"
echo "status: $status"
assert_success
@@ -450,7 +506,7 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-dns-provider"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-dns-provider"
echo "output: $output"
echo "status: $status"
assert_success
@@ -461,7 +517,7 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-dns-provider"
run /bin/bash -c "dokku traefik:report $TEST_APP --traefik-computed-dns-provider"
echo "output: $output"
echo "status: $status"
assert_success