#!/usr/bin/env bash set -euo pipefail ROOT=$(cd "$(dirname "$0")/.." && pwd) COMPOSE_FILE="${COMPOSE_FILE:-$ROOT/devops/orchestrator/docker-compose.orchestrator.yml}" STATE_DIR="${STATE_DIR:-$ROOT/out/orchestrator-smoke}" usage() { cat <<'USAGE' Orchestrator infra smoke test - Starts postgres + mongo + nats via docker-compose - Verifies basic connectivity and prints ready endpoints Env/flags: COMPOSE_FILE path to compose file (default: ops/devops/orchestrator/docker-compose.orchestrator.yml) STATE_DIR path for logs (default: out/orchestrator-smoke) SKIP_UP set to 1 to skip compose up (assumes already running) USAGE } if [[ ${1:-} == "-h" || ${1:-} == "--help" ]]; then usage; exit 0; fi mkdir -p "$STATE_DIR" if [[ "${SKIP_UP:-0}" != "1" ]]; then docker compose -f "$COMPOSE_FILE" up -d fi log() { echo "[smoke] $*"; } log "waiting for postgres..." for i in {1..12}; do if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-postgres pg_isready -U orch >/dev/null 2>&1; then break; fi sleep 5; done log "waiting for mongo..." for i in {1..12}; do if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-mongo mongosh --quiet --eval "db.adminCommand('ping')" >/dev/null 2>&1; then break; fi sleep 5; done log "waiting for nats..." for i in {1..12}; do if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-nats nats --server localhost:4222 ping >/dev/null 2>&1; then break; fi sleep 5; done log "postgres DSN: postgres://orch:orchpass@localhost:55432/orchestrator" log "mongo uri: mongodb://localhost:57017" log "nats uri: nats://localhost:4222" # Write readiness summary cat > "$STATE_DIR/readiness.txt" <