Every Go-implemented plugin's `:report --format json` now emits keys without the redundant `<plugin>-` head segment, matching the shape bash plugins have always emitted. The CLI flag names and `:set` semantics are unchanged. For backwards compatibility during the 0.38.x patch series, the legacy `<plugin>-<property>` keys are emitted side-by-side with the new keys, and a future major release will drop the legacy keys. `common.ReportSingleApp` is refactored to accept a `ReportSingleAppInput` struct with a `Validate()` method so the input is checked before any work runs, which also catches the latent `"docker options"` reportType bug at the API boundary.
375 lines
11 KiB
Bash
375 lines
11 KiB
Bash
#!/usr/bin/env bats
|
|
load test_helper
|
|
|
|
setup_file() {
|
|
install_pack
|
|
}
|
|
|
|
setup() {
|
|
global_setup
|
|
create_app
|
|
}
|
|
|
|
teardown() {
|
|
destroy_app
|
|
global_teardown
|
|
}
|
|
|
|
@test "(app-json) app.json scripts" {
|
|
run deploy_app python
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing predeploy task from app.json: touch /app/predeploy.test"
|
|
assert_output_contains "Executing postdeploy task from app.json in ephemeral container: touch /app/postdeploy.test"
|
|
assert_output_contains "Executing prebuild task from app.json in ephemeral container: touch /app/prebuild.test" 0
|
|
|
|
run docker inspect "${TEST_APP}.web.1" --format "{{json .Config.Cmd}}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output '["/start","web"]'
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/prebuild.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/predeploy.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/postdeploy.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
}
|
|
|
|
@test "(app-json) app.json scripts postdeploy" {
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app-heroku-postdeploy.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/heroku-postdeploy.test"
|
|
assert_output_contains "python3 -u release.py"
|
|
}
|
|
|
|
@test "(app-json) app.json scripts missing" {
|
|
run deploy_app nodejs-express-noappjson
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(app-json) app.json herokuish release" {
|
|
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing release task from Procfile"
|
|
assert_output_contains "SECRET_KEY: fjdkslafjdk"
|
|
|
|
run /bin/bash -c "curl $(dokku url $TEST_APP)/env"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"'
|
|
assert_output_contains '"SECRET_KEY": "fjdkslafjdk"'
|
|
}
|
|
|
|
@test "(app-json) app.json cnb release" {
|
|
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected pack"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing release task from Procfile"
|
|
assert_output_contains "SECRET_KEY: fjdkslafjdk"
|
|
|
|
run /bin/bash -c "curl $(dokku url $TEST_APP)/env"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"'
|
|
assert_output_contains '"SECRET_KEY": "fjdkslafjdk"'
|
|
}
|
|
|
|
@test "(app-json) tini test" {
|
|
if ! dokku plugin:installed postgres; then
|
|
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-postgres.git"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
fi
|
|
|
|
if ! dokku plugin:installed redis; then
|
|
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-redis.git"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
fi
|
|
|
|
run /bin/bash -c "dokku config:set $TEST_APP SECRET_KEY_BASE=derp OTP_SECRET=1234 LOCAL_DOMAIN=dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:create $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:link $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:create $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:link $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku git:from-image $TEST_APP tootsuite/mastodon:v3.3.0"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:unlink $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:unlink $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku --force postgres:destroy $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku --force redis:destroy $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(app-json:set)" {
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP copy_app_json_to_sub_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app-nonexistent.json"
|
|
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
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app2.json"
|
|
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
|
|
assert_output_contains "touch /app/predeploy2.test"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
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
|
|
assert_output_contains "touch /app/predeploy.test"
|
|
assert_output_contains "touch /app/predeploy2.test" 0
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir sub-app"
|
|
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
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
assert_output_contains "touch /app/predeploy2.test"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app3.json"
|
|
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
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
assert_output_contains "touch /app/predeploy2.test" 0
|
|
assert_output_contains "touch /app/predeploy3.test"
|
|
}
|
|
|
|
@test "(app-json:report) appjson-path round-trip" {
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app2.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app2.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app2.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output ""
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --format json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
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":""'
|
|
assert_output_contains '"appjson-path":"app2.json"'
|
|
assert_output_contains '"computed-appjson-path":"app2.json"'
|
|
assert_output_contains '"global-appjson-path":""'
|
|
assert_output_contains "app-json-selected" 0
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-selected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
assert_output_contains "Invalid flag passed"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output ""
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app.json"
|
|
}
|
|
|
|
@test "(app-json:report) appjson-path raw vs computed vs global" {
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path app.global.json"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app.app.json"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
assert_success
|
|
assert_output "app.app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path"
|
|
assert_success
|
|
}
|
|
|
|
copy_app_json_to_sub_app() {
|
|
local APP="$1"
|
|
local APP_REPO_DIR="$2"
|
|
[[ -z "$APP" ]] && local APP="$TEST_APP"
|
|
cp "$APP_REPO_DIR/app2.json" "$APP_REPO_DIR/sub-app/app.json"
|
|
cp "$APP_REPO_DIR/app3.json" "$APP_REPO_DIR/sub-app/app3.json"
|
|
}
|