AkurAI Build
Menu

Public repository / cdb76dabfe609da099e234fc0801460fe4aa1181

AkurAI-Platform / scripts/check-live.sh

Latest change cdb76dabfe609da099e234fc0801460fe4aa1181 - feat: deterministic Framework artifact, remove legacy deploy, add HTTPS smoke (AKURAI-PLATFORM-20, AKURAI-PLATFORM-21) by Ólafur Búi Ólafsson

#!/usr/bin/env bash
# AkurAI-Platform — production smoke check
# Run against the deployed public surface; all requests use HTTPS.
# Exits 0 when every check passes; exits non-zero on the first failure.
set -euo pipefail

DOMAIN="${AKURAI_PLATFORM_DOMAIN:-platform.olibuijr.com}"
BASE="https://${DOMAIN}"
TIMEOUT=10
FAIL=0

fail() { echo "FAIL [$*]" >&2; FAIL=1; }
pass() { echo " ok  $*"; }

# -- helpers --------------------------------------------------
check_url() {
  local label="$1" url="$2" expected="${3:-200}"
  local code
  code="$(curl -fsSI -o /dev/null -w '%{http_code}' --max-time "$TIMEOUT" -L "$url" 2>/dev/null || echo "000")"
  if [[ "$code" == "$expected" ]]; then
    pass "$label ($code)"
  else
    fail "$label — wanted $expected, got $code ($url)"
  fi
}

check_content() {
  local label="$1" url="$2" grep_pattern="$3"
  local body
  body="$(curl -fsS --max-time "$TIMEOUT" -L "$url" 2>/dev/null || true)"
  if echo "$body" | grep -qF "$grep_pattern"; then
    pass "$label"
  else
    fail "$label — missing '$grep_pattern' ($url)"
  fi
}

check_json_field() {
  local label="$1" url="$2" field="$3" expected="$4"
  local val
  val="$(curl -fsS --max-time "$TIMEOUT" -L "$url" 2>/dev/null | python3 -c "
import json, sys
d = json.load(sys.stdin)
parts = '$field'.split('.')
for p in parts: d = d[p]
print(json.dumps(d))
" 2>/dev/null || echo "PARSE_ERROR")"
  if [[ "$val" == "$expected" ]]; then
    pass "$label ($val)"
  else
    fail "$label — wanted $expected, got $val ($url)"
  fi
}

echo "=== AkurAI-Platform smoke ($BASE) ==="
echo ""

# --- DNS -----------------------------------------------------
echo "-- DNS --"
IP="$(dig +short "$DOMAIN" A 2>/dev/null | head -1 || true)"
if [[ -n "$IP" ]]; then
  pass "DNS resolves ($IP)"
else
  fail "DNS resolution for $DOMAIN"
fi

# --- public app links ----------------------------------------
echo ""
echo "-- public app links --"
check_url "AkurAI Mail"               "https://mail.olibuijr.com"
check_url "AkurAI IDP"                "https://auth.olibuijr.com"
check_url "AkurAI VPN"                "https://akurai-vpn.olibuijr.com"
check_url "AkurAI PassVault"          "https://akurai-passvault.olibuijr.com"
check_url "AkurAI Drive"              "https://akurai-drive.olibuijr.com"
check_url "AkurAI Notes"              "https://akurai-notes.olibuijr.com"
check_url "AkurAI Tasks"              "https://akurai-tasks.olibuijr.com"
check_url "AkurAI Router (health)"    "https://akurai-router.olibuijr.com/health"
check_url "AkurAI Monitor"            "https://monitor.olibuijr.com"
check_url "AkurAI Build"              "https://akurai-build.olibuijr.com"
check_url "AkurAI Framework"          "https://akurai-framework.olibuijr.com"
check_url "AkurAI Platform (self)"    "$BASE"

# --- source/build repository links ---------------------------
echo ""
echo "-- source/build repository links --"
check_url "Build: AkurAI-Mail"        "https://akurai-build.olibuijr.com/repos/AkurAI-Mail"
check_url "Build: AkurAI-MailAPI"     "https://akurai-build.olibuijr.com/repos/AkurAI-MailAPI"
check_url "Build: AkurAI-IDP"         "https://akurai-build.olibuijr.com/repos/AkurAI-IDP"
check_url "Build: AkurAI-VPN"         "https://akurai-build.olibuijr.com/repos/AkurAI-VPN"
check_url "Build: AkurAI-PassVault"   "https://akurai-build.olibuijr.com/repos/AkurAI-PassVault"
check_url "Build: AkurAI-Drive"       "https://akurai-build.olibuijr.com/repos/AkurAI-Drive"
check_url "Build: AkurAI-Notes"       "https://akurai-build.olibuijr.com/repos/AkurAI-Notes"
check_url "Build: AkurAI-CRM"         "https://akurai-build.olibuijr.com/repos/AkurAI-CRM"
check_url "Build: AkurAI-Tasks"       "https://akurai-build.olibuijr.com/repos/akurai-tasks"
check_url "Build: AkurAI-Router"      "https://akurai-build.olibuijr.com/repos/AkurAI-Router"
check_url "Build: AkurAI-Monitor"     "https://akurai-build.olibuijr.com/repos/AkurAI-Monitor"
check_url "Build: AkurAI-DNS"         "https://akurai-build.olibuijr.com/repos/AkurAI-DNS"
check_url "Build: AkurAI-Build"       "https://akurai-build.olibuijr.com/repos/AkurAI-Build"
check_url "Build: AkurAI-Framework"   "https://akurai-build.olibuijr.com/repos/AkurAI-Framework"
check_url "Build: AkurAI-Platform"    "https://akurai-build.olibuijr.com/repos/AkurAI-Platform"

# --- theme assets --------------------------------------------
echo ""
echo "-- theme assets --"
check_content "themes.css"     "$BASE/themes.css" '--bg'
check_content "themes.json"    "$BASE/themes.json" '['

# --- health endpoints ----------------------------------------
echo ""
echo "-- health endpoints --"
check_json_field "Platform /api/health"     "$BASE/api/health"     'status' '"ok"'
check_json_field "Payments /api/health"     "$BASE/api/payments/health" 'ok' 'true'

# --- locale parity -------------------------------------------
echo ""
echo "-- locale parity --"
check_content "English locale active"   "$BASE/" 'App directory'
check_content "Icelandic locale active" "$BASE/?lang=is" 'Forritaskrá'

# --- checkout degraded state ---------------------------------
echo ""
echo "-- checkout degraded state --"
check_content "checkout disabled (en)"    "$BASE/" 'myPOS'
check_content "checkout disabled (is)"    "$BASE/?lang=is" 'myPOS'

# --- direct edge route ---------------------------------------
echo ""
echo "-- direct edge --"
if [[ -n "${AKURAI_PLATFORM_IP:-}" ]]; then
  check_url "direct edge" "https://${AKURAI_PLATFORM_IP}/" 200
else
  echo " skip direct edge (AKURAI_PLATFORM_IP not set)"
fi

# --- summary -------------------------------------------------
echo ""
if [[ "$FAIL" -eq 0 ]]; then
  echo "=== all checks passed ==="
  exit 0
else
  echo "=== $FAIL check(s) failed ===" >&2
  exit 1
fi