fix: treat empty ps restart-policy as an unset

`dokku ps:set <app> restart-policy` with no value erroneously returned `Invalid restart-policy specified` instead of unsetting the property like every other ps property. The restart policy is now managed as a normal app and global property surfaced through the `--ps-restart-policy`, `--ps-global-restart-policy`, and `--ps-computed-restart-policy` report flags, with the effective value applied at deploy time and existing values migrated on install. Because it is no longer stored as a Docker option it no longer appears in `docker-options:report`, and `--ps-restart-policy` now reports the raw value with the `on-failure:10` default available via `--ps-computed-restart-policy`.
This commit is contained in:
Jose Diaz-Gonzalez
2026-05-27 23:33:03 -04:00
parent 44dd5e9eea
commit fec872711a
9 changed files with 182 additions and 29 deletions

View File

@@ -193,7 +193,6 @@ teardown() {
echo "status: $status"
assert_success
assert_output_contains "-v /tmp" 0
assert_output_contains "Docker options deploy: --restart=on-failure:10"
}
@test "(docker-options) docker-options:remove (build phase)" {

View File

@@ -434,6 +434,11 @@ web
run /bin/bash -c "dokku ps:report $TEST_APP --ps-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output ""
run /bin/bash -c "dokku ps:report $TEST_APP --ps-computed-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "on-failure:10"
}
@@ -448,9 +453,86 @@ web
echo "output: $output"
echo "status: $status"
assert_output "$policy"
run /bin/bash -c "dokku ps:report $TEST_APP --ps-computed-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "$policy"
done
}
@test "(ps:restart-policy) ps:set restart-policy unset" {
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy on-failure:5"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:report $TEST_APP --ps-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "on-failure:5"
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:report $TEST_APP --ps-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output ""
run /bin/bash -c "dokku ps:report $TEST_APP --ps-computed-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "on-failure:10"
}
@test "(ps:restart-policy) invalid policy" {
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy bogus"
echo "output: $output"
echo "status: $status"
assert_failure
assert_output_contains "Invalid restart-policy specified"
}
@test "(ps:restart-policy) global policy" {
run /bin/bash -c "dokku ps:set --global restart-policy always"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:report $TEST_APP --ps-global-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "always"
run /bin/bash -c "dokku ps:report $TEST_APP --ps-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output ""
run /bin/bash -c "dokku ps:report $TEST_APP --ps-computed-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "always"
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy no"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:report $TEST_APP --ps-computed-restart-policy"
echo "output: $output"
echo "status: $status"
assert_output "no"
run /bin/bash -c "dokku ps:set --global restart-policy"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(ps:restart-policy) deployed policy" {
test_restart_policy="on-failure:20"
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy $test_restart_policy"
@@ -478,6 +560,22 @@ web
echo "output: $output"
echo "status: $status"
assert_output "$test_restart_policy"
run /bin/bash -c "dokku ps:set $TEST_APP restart-policy"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
CID=$(<$DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect -f '{{ .HostConfig.RestartPolicy.Name }}:{{ .HostConfig.RestartPolicy.MaximumRetryCount }}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "on-failure:10"
}
procfile_line_endings_to_windows() {