Prevent release checks from consuming deployment input

This commit is contained in:
SimpleTest 2026-08-02 12:46:57 +03:00
parent 3f7484e798
commit 41b37ccf37
3 changed files with 24 additions and 4 deletions

View File

@ -4,7 +4,8 @@ set -euo pipefail
ROOT=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) ROOT=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)
env_file=${1:-"$ROOT/.env"} env_file=${1:-"$ROOT/.env"}
"$ROOT/scripts/compose.sh" "$env_file" run --rm --no-deps migrate \ "$ROOT/scripts/compose.sh" "$env_file" \
run --rm --no-deps --interactive=false migrate \
/app/bin/who_need_help eval ' /app/bin/who_need_help eval '
Application.ensure_all_started(:ecto_sql) Application.ensure_all_started(:ecto_sql)
{:ok, _pid} = WhoNeedHelp.Repo.start_link() {:ok, _pid} = WhoNeedHelp.Repo.start_link()

View File

@ -57,11 +57,14 @@ printf 'environment=production\n' >"$backup.metadata"
chmod 600 "$bundle" "$bundle.sha256" "$backup" "$backup.sha256" "$backup.metadata" chmod 600 "$bundle" "$bundle.sha256" "$backup" "$backup.sha256" "$backup.metadata"
for script in validate-production-env.sh check-environment-readiness.sh \ for script in validate-production-env.sh check-environment-readiness.sh \
check-database.sh verify-realtime-cluster.sh verify-beam-runtime.sh; do verify-realtime-cluster.sh verify-beam-runtime.sh; do
install -m 755 /dev/null "$fixture/scripts/$script" install -m 755 /dev/null "$fixture/scripts/$script"
printf '%s\n' '#!/bin/sh' 'exit 0' >"$fixture/scripts/$script" printf '%s\n' '#!/bin/sh' 'exit 0' >"$fixture/scripts/$script"
done done
install -m 755 "$ROOT/scripts/check-database.sh" \
"$fixture/scripts/check-database.sh"
install -m 755 /dev/null "$fixture/scripts/set-deployment-revision.sh" install -m 755 /dev/null "$fixture/scripts/set-deployment-revision.sh"
cat >"$fixture/scripts/set-deployment-revision.sh" <<'EOF' cat >"$fixture/scripts/set-deployment-revision.sh" <<'EOF'
#!/bin/sh #!/bin/sh
@ -95,6 +98,15 @@ case "$*" in
printf 'compose:%s\n' "$*" >>"$MOCK_COMMAND_LOG" printf 'compose:%s\n' "$*" >>"$MOCK_COMMAND_LOG"
exit 0 exit 0
;; ;;
'run --rm --no-deps --interactive=false migrate /app/bin/who_need_help eval '*)
printf 'compose:check-database-noninteractive\n' >>"$MOCK_COMMAND_LOG"
exit 0
;;
'run --rm --no-deps migrate /app/bin/who_need_help eval '*)
cat >/dev/null
printf 'compose:check-database-consumed-stdin\n' >>"$MOCK_COMMAND_LOG"
exit 0
;;
'up -d --no-deps --no-build --force-recreate --wait app') 'up -d --no-deps --no-build --force-recreate --wait app')
printf 'compose:%s\n' "$*" >>"$MOCK_COMMAND_LOG" printf 'compose:%s\n' "$*" >>"$MOCK_COMMAND_LOG"
if [ "${MOCK_FAIL_APP_UP:-}" = once ] && if [ "${MOCK_FAIL_APP_UP:-}" = once ] &&
@ -213,7 +225,7 @@ run_release() {
"${container_env[@]}" \ "${container_env[@]}" \
"${container_mounts[@]}" \ "${container_mounts[@]}" \
"$BASE_IMAGE" \ "$BASE_IMAGE" \
bash /runner/production-release-remote.sh \ bash -c 'bash -s -- "$@" < /runner/production-release-remote.sh' _ \
apply "$remote_root" whoneedhelp.com \ apply "$remote_root" whoneedhelp.com \
"$remote_root/output/releases/incoming/$(basename -- "$bundle")" \ "$remote_root/output/releases/incoming/$(basename -- "$bundle")" \
"$target_commit" \ "$target_commit" \
@ -230,6 +242,13 @@ grep -F 'compose:build migrate' "$fixture/mock-commands.log" >/dev/null
grep -F 'compose:stop app' "$fixture/mock-commands.log" >/dev/null grep -F 'compose:stop app' "$fixture/mock-commands.log" >/dev/null
grep -F 'compose:run --rm --no-deps --interactive=false migrate' \ grep -F 'compose:run --rm --no-deps --interactive=false migrate' \
"$fixture/mock-commands.log" >/dev/null "$fixture/mock-commands.log" >/dev/null
grep -Fx 'compose:check-database-noninteractive' \
"$fixture/mock-commands.log" >/dev/null
if grep -F 'compose:check-database-consumed-stdin' \
"$fixture/mock-commands.log" >/dev/null; then
echo "Database check consumed the streamed release script." >&2
exit 1
fi
grep -F 'compose:up -d --no-deps --no-build --force-recreate --wait app' \ grep -F 'compose:up -d --no-deps --no-build --force-recreate --wait app' \
"$fixture/mock-commands.log" >/dev/null "$fixture/mock-commands.log" >/dev/null
grep -R -F 'migration_policy=forward_only' \ grep -R -F 'migration_policy=forward_only' \

View File

@ -354,7 +354,7 @@ fi
migration_started=true migration_started=true
"$root/scripts/compose.sh" "$env_file" \ "$root/scripts/compose.sh" "$env_file" \
run --rm --no-deps --interactive=false migrate run --rm --no-deps --interactive=false migrate
"$root/scripts/check-database.sh" "$env_file" "$root/scripts/check-database.sh" "$env_file" </dev/null
"$root/scripts/compose.sh" "$env_file" \ "$root/scripts/compose.sh" "$env_file" \
up -d --no-deps --no-build --force-recreate --wait "${runtime_services[@]}" up -d --no-deps --no-build --force-recreate --wait "${runtime_services[@]}"
verify_candidate_runtime verify_candidate_runtime