#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" find_lab_root(){ if [[ -n "${AZEROTHAI_PLAYABLE_ROOT:-}" && -d "$AZEROTHAI_PLAYABLE_ROOT" ]]; then printf '%s' "$AZEROTHAI_PLAYABLE_ROOT"; return fi for root in "$HOME/azerothai-pc-lab" "$HOME/azerothai-playable"; do if [[ -d "$root" ]]; then printf '%s' "$root"; return; fi done printf '%s' "$HOME/azerothai-pc-lab" } LAB_ROOT="$(find_lab_root)" RUNTIME_ENV="$LAB_ROOT/runtime.env" NODE_BIN="$(command -v node)" RUN_USER="$(id -un)" RUN_GROUP="$(id -gn)" SERVICE_NAME="azerothai-ale-relay.service" SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME" if [[ ! -f "$RUNTIME_ENV" ]]; then echo "Missing $RUNTIME_ENV" >&2 exit 2 fi grep -q '^ALE_BRIDGE_TOKEN=' "$RUNTIME_ENV" || { echo "ALE_BRIDGE_TOKEN missing from $RUNTIME_ENV" >&2; exit 3; } grep -q '^DOCKER_DB_ROOT_PASSWORD=' "$RUNTIME_ENV" || { echo "DOCKER_DB_ROOT_PASSWORD missing from $RUNTIME_ENV" >&2; exit 3; } # shellcheck disable=SC1090 source "$RUNTIME_ENV" : "${ALE_BRIDGE_TOKEN:?ALE_BRIDGE_TOKEN missing from runtime environment}" : "${DOCKER_DB_ROOT_PASSWORD:?DOCKER_DB_ROOT_PASSWORD missing from runtime environment}" command -v docker >/dev/null 2>&1 || { echo "docker is required" >&2; exit 4; } mkdir -p "$LAB_ROOT" touch "$LAB_ROOT/ale-relay.log" chown "$RUN_USER:$RUN_GROUP" "$LAB_ROOT/ale-relay.log" echo "==> Installing durable ALE database relay service" sudo tee "$SERVICE_FILE" >/dev/null </dev/null sudo systemctl restart "$SERVICE_NAME" for _ in {1..20}; do if docker exec ac-database mysql -uroot -p"$DOCKER_DB_ROOT_PASSWORD" -Nse "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='acore_auth' AND table_name IN ('azerothai_command_inbox','azerothai_event_outbox','azerothai_result_outbox')" 2>/dev/null | grep -qx '3'; then break fi sleep 1 done if ! sudo systemctl is-active --quiet "$SERVICE_NAME"; then echo "ALE relay service failed to start." >&2 sudo systemctl status "$SERVICE_NAME" --no-pager -l >&2 || true tail -80 "$LAB_ROOT/ale-relay.log" >&2 || true exit 5 fi TABLE_COUNT="$(docker exec ac-database mysql -uroot -p"$DOCKER_DB_ROOT_PASSWORD" -Nse "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='acore_auth' AND table_name IN ('azerothai_command_inbox','azerothai_event_outbox','azerothai_result_outbox')" 2>/dev/null || echo 0)" if [[ "$TABLE_COUNT" != "3" ]]; then echo "ALE relay is running but durable spool tables were not created." >&2 tail -80 "$LAB_ROOT/ale-relay.log" >&2 || true exit 6 fi PID="$(sudo systemctl show -p MainPID --value "$SERVICE_NAME")" echo "ALE relay service: active (PID $PID)" echo "Durable spool tables: ready" echo "Transport: AzerothAI D1 <-> host relay <-> acore_auth spool <-> ALE"