mirror of
https://github.com/dokku/dokku.git
synced 2026-02-24 04:00:36 +01:00
The jq binary doesn't support jsonc, so we can't modify it for testing purposes. Instead, just create an app.json with the correct heroku.postdeploy task.
266 lines
7.4 KiB
Bash
266 lines
7.4 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"
|
|
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"
|
|
}
|
|
|
|
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"
|
|
}
|