#!/usr/bin/env bash set -euo pipefail BASE_URL="${1:-}" if [ -z "${BASE_URL}" ]; then echo "Usage: $0 " >&2 exit 1 fi URL="${BASE_URL%/}/api/health" TMP_FILE="$(mktemp)" MAX_ATTEMPTS=20 SLEEP_SECONDS=3 trap 'rm -f "${TMP_FILE}"' EXIT for attempt in $(seq 1 "${MAX_ATTEMPTS}"); do HTTP_CODE=$(curl -sS -o "${TMP_FILE}" -w "%{http_code}" "${URL}" || echo "000") if [ "${HTTP_CODE}" = "200" ]; then if node -e "const fs=require('fs');const d=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));if(d?.ok!==true||typeof d?.service!=='string'){process.exit(1)}" "${TMP_FILE}"; then echo "Smoke check passed: ${URL} (attempt ${attempt}/${MAX_ATTEMPTS})" exit 0 fi fi if [ "${attempt}" -lt "${MAX_ATTEMPTS}" ]; then sleep "${SLEEP_SECONDS}" fi done echo "Smoke check failed after ${MAX_ATTEMPTS} attempts: ${URL}" >&2 cat "${TMP_FILE}" >&2 || true exit 1