← back to Wallco Ai
scripts/await_cf_zone.sh
47 lines
#!/bin/zsh
# One-shot watcher: poll CF API every 20s for wallco.ai zone.
# When it appears → cascade: dns records → ns swap → certbot → ssl strict → smoke.
# Caps at 90 attempts (~30 min) then exits.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
LOG="$ROOT/logs/await_cf.log"
mkdir -p "$ROOT/logs"
cd "$ROOT"
TOK=$(grep -hE "^CLOUDFLARE_API_TOKEN=" "$HOME/Projects/secrets-manager/.env" 2>/dev/null | head -1 | sed -E 's/^[^=]+=//;s/^"//;s/"$//')
[[ -z "$TOK" ]] && { echo "$(date '+%F %T') no CF token" >> "$LOG"; exit 2; }
DOMAIN="wallco.ai"
MAX_TRIES=90
SLEEP=20
echo "$(date '+%F %T') === await_cf_zone start ===" >> "$LOG"
for i in $(seq 1 $MAX_TRIES); do
RESP=$(curl -sf -H "Authorization: Bearer $TOK" "https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}" 2>/dev/null || echo '{"result":[]}')
ZID=$(echo "$RESP" | python3 -c "import json,sys; r=json.load(sys.stdin).get('result',[]); print(r[0]['id'] if r else '')" 2>/dev/null || echo "")
if [[ -n "$ZID" ]]; then
NS=$(echo "$RESP" | python3 -c "import json,sys; r=json.load(sys.stdin)['result'][0]; print(','.join(r.get('name_servers',[])))" 2>/dev/null)
echo "$(date '+%F %T') ZONE FOUND id=$ZID ns=$NS" >> "$LOG"
echo "$(date '+%F %T') --- cascade: dns ---" >> "$LOG"
bash scripts/golive.sh dns >> "$LOG" 2>&1 || echo "$(date '+%F %T') dns step had issues" >> "$LOG"
echo "$(date '+%F %T') --- cascade: ns-swap ---" >> "$LOG"
bash scripts/golive.sh ns-swap >> "$LOG" 2>&1 || echo "$(date '+%F %T') ns-swap had issues" >> "$LOG"
echo "$(date '+%F %T') --- waiting 5 min for NS propagation ---" >> "$LOG"
sleep 300
echo "$(date '+%F %T') --- cascade: cert ---" >> "$LOG"
bash scripts/golive.sh cert >> "$LOG" 2>&1 || echo "$(date '+%F %T') cert had issues — DNS may need more time" >> "$LOG"
echo "$(date '+%F %T') --- cascade: cf-ssl ---" >> "$LOG"
bash scripts/golive.sh cf-ssl >> "$LOG" 2>&1 || true
echo "$(date '+%F %T') --- cascade: smoke ---" >> "$LOG"
bash scripts/golive.sh smoke >> "$LOG" 2>&1 || true
echo "$(date '+%F %T') === cascade complete ===" >> "$LOG"
exit 0
fi
echo "$(date '+%F %T') attempt $i/$MAX_TRIES — zone not visible yet, sleeping ${SLEEP}s" >> "$LOG"
sleep "$SLEEP"
done
echo "$(date '+%F %T') TIMEOUT after $MAX_TRIES tries — wallco.ai not added to CF" >> "$LOG"
exit 1