#!/usr/bin/env bash # Builds and starts the production stack under a throwaway project name with # generated secrets, checks it, then removes it (containers and volumes). # deploy/check.sh from the repository root or deploy/ # Exits non-zero if any check fails. Needs Docker with Compose v2. set -euo pipefail cd "$(dirname "$0")" project="deadhead-check" env_file="$(mktemp)" secret() { node -e 'console.log(require("crypto").randomBytes(+process.argv[1]).toString("base64url"))' "$1"; } cat > "$env_file" </dev/null 2>&1 || true rm -f "$env_file" } trap cleanup EXIT echo "Building and starting the stack…" compose up -d --build --wait --wait-timeout 180 fail=0 check() { local name="$1" url="$2" expect="$3" body body="$(compose exec -T server node -e "fetch('$url').then(r => r.text().then(t => console.log(r.status + ' ' + t)))")" if [[ "$body" == $expect ]]; then echo "ok $name: $body" else echo "FAIL $name: $body" fail=1 fi } # Step 13.1: the server, with migrations applied, answers health and time. check "health" "http://127.0.0.1:3000/api/health" '200 {"status":"ok"}' check "server time" "http://127.0.0.1:3000/api/time" '200 {"realTime":*' exit "$fail"