chart/bin/wait-deploy

43 lines
1.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Block until the deployed site is serving the commit at local HEAD.
#
# git push && bin/wait-deploy
#
# Works from any machine — it only reads the public /api/version endpoint, so
# no Coolify token and no SSH tunnel are needed.
set -uo pipefail
URL=${URL:-https://chart.amow.com}
TIMEOUT=${TIMEOUT:-300}
want=$(git rev-parse HEAD) || exit 1
short=${want:0:8}
echo "waiting for $URL to serve $short (timeout ${TIMEOUT}s)"
start=$(date +%s)
last=""
while :; do
now=$(date +%s)
elapsed=$(( now - start ))
if [ "$elapsed" -ge "$TIMEOUT" ]; then
echo "TIMEOUT after ${elapsed}s — still serving ${last:-unknown}"
echo "check the build log: https://chart.amow.com is fine but Coolify may have failed"
exit 1
fi
# 502 during the rolling container swap is normal; keep polling.
got=$(curl -fsS -m 5 "$URL/api/version" 2>/dev/null \
| sed -n 's/.*"commit"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
if [ "$got" = "$want" ]; then
echo "deployed ${short} after ${elapsed}s"
exit 0
fi
if [ "$got" != "$last" ]; then
echo " ${elapsed}s: serving ${got:-unreachable}"
last="$got"
fi
sleep 3
done