mirror of
https://github.com/dokku/dokku.git
synced 2026-07-10 20:40:43 +02:00
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.
416 lines
11 KiB
Bash
416 lines
11 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load test_helper
|
|
|
|
setup() {
|
|
create_app
|
|
}
|
|
|
|
teardown() {
|
|
dokku builder:set --global skip-cleanup >/dev/null 2>/dev/null || true
|
|
destroy_app
|
|
}
|
|
|
|
@test "(builder) builder-detect [set]" {
|
|
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
|
|
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
|
|
|
|
# test project.toml
|
|
run touch "$TMP/project.toml"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected pack"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "pack"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected pack"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "pack"
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected other"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "pack"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "other"
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "pack"
|
|
}
|
|
|
|
@test "(builder) builder-detect [pack]" {
|
|
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
|
|
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
|
|
|
|
# test project.toml
|
|
run touch "$TMP/project.toml"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "pack"
|
|
|
|
sudo rm -rf $TMP/*
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(builder) builder-detect [dockerfile]" {
|
|
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
|
|
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
|
|
|
|
run touch "$TMP/Dockerfile"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "dockerfile"
|
|
}
|
|
|
|
@test "(builder) builder-detect [herokuish]" {
|
|
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
|
|
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
|
|
|
|
touch "$TMP/Dockerfile"
|
|
|
|
# test buildpacks
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "touch $TMP/.buildpacks"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "herokuish"
|
|
|
|
sudo rm -rf $TMP/*
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
# test .env
|
|
run /bin/bash -c "echo BUILDPACK_URL=null > $TMP/.env"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "herokuish"
|
|
|
|
sudo rm -rf $TMP/*
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
# test BUILDPACK_URL env var
|
|
run /bin/bash -c "dokku config:set $TEST_APP BUILDPACK_URL=null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
chown -R dokku:dokku "$TMP"
|
|
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_line 0 "herokuish"
|
|
}
|
|
|
|
@test "(builder:report) --global --format json" {
|
|
run /bin/bash -c "dokku builder:set --global selected dockerfile"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -e ."
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -r '.\"builder-global-selected\"'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "dockerfile"
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -r '.\"global-selected\"'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "dockerfile"
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -r 'has(\"builder-selected\")'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "false"
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -r 'has(\"selected\") and has(\"builder-global-selected\")'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "false"
|
|
|
|
run /bin/bash -c "dokku builder:report --global --format json | jq -r 'has(\"computed-skip-cleanup\") and has(\"builder-computed-skip-cleanup\")'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "true"
|
|
|
|
run /bin/bash -c "dokku builder:report --global"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(builder:report) selected raw vs computed vs global" {
|
|
run /bin/bash -c "dokku builder:set --global selected"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-selected"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected dockerfile"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
|
|
assert_success
|
|
assert_output "dockerfile"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
|
|
assert_success
|
|
assert_output "dockerfile"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected herokuish"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-selected"
|
|
assert_success
|
|
assert_output "herokuish"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
|
|
assert_success
|
|
assert_output "dockerfile"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
|
|
assert_success
|
|
assert_output "herokuish"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set --global selected"
|
|
assert_success
|
|
}
|
|
|
|
@test "(builder:report) build-dir raw vs computed vs global" {
|
|
run /bin/bash -c "dokku builder:set --global build-dir"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-build-dir"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:set --global build-dir global/subdir"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
|
|
assert_success
|
|
assert_output "global/subdir"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
|
|
assert_success
|
|
assert_output "global/subdir"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir app/subdir"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-build-dir"
|
|
assert_success
|
|
assert_output "app/subdir"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
|
|
assert_success
|
|
assert_output "global/subdir"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
|
|
assert_success
|
|
assert_output "app/subdir"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set --global build-dir"
|
|
assert_success
|
|
}
|
|
|
|
@test "(builder:report) skip-cleanup raw vs computed vs global" {
|
|
run /bin/bash -c "dokku builder:set --global skip-cleanup"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-skip-cleanup"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-skip-cleanup"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-skip-cleanup"
|
|
assert_success
|
|
assert_output "false"
|
|
|
|
run /bin/bash -c "dokku builder:set --global skip-cleanup true"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-skip-cleanup"
|
|
assert_success
|
|
assert_output "true"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-skip-cleanup"
|
|
assert_success
|
|
assert_output "true"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP skip-cleanup false"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-skip-cleanup"
|
|
assert_success
|
|
assert_output "false"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-skip-cleanup"
|
|
assert_success
|
|
assert_output "true"
|
|
|
|
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-skip-cleanup"
|
|
assert_success
|
|
assert_output "false"
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP skip-cleanup"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set --global skip-cleanup"
|
|
assert_success
|
|
}
|
|
|
|
@test "(builder:set)" {
|
|
run deploy_app python
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir nonexistent-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_failure
|
|
|
|
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 'SECRET_KEYS:'
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir"
|
|
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 'SECRET_KEY:'
|
|
}
|