run-market-and-orly.sh raw
1 #!/usr/bin/env bash
2 set -euo pipefail
3
4 # run-relay-and-seed.sh
5 # Starts the ORLY relay with specified settings, then runs `bun dev:seed` in a
6 # provided Market repository to observe how the app interacts with the relay.
7 #
8 # Usage:
9 # scripts/run-relay-and-seed.sh /path/to/market
10 # MARKET_DIR=/path/to/market scripts/run-relay-and-seed.sh
11 #
12 # Notes:
13 # - This script removes /tmp/plebeian before starting the relay.
14 # - The relay listens on 0.0.0.0:3334
15 # - ORLY_ADMINS is intentionally empty and ACL is set to 'none'.
16 # - Requires: go, bun, curl
17
18 # ---------- Config ----------
19 RELAY_HOST="127.0.0.1"
20 RELAY_PORT="10547"
21 RELAY_DATA_DIR="/tmp/plebeian"
22 LOG_PREFIX="[relay]"
23 WAIT_TIMEOUT="120" # seconds - increased for slow startup
24
25 # ---------- Resolve repo root ----------
26 SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
27 REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
28 cd "${REPO_ROOT}"
29
30 # ---------- Resolve Market directory ----------
31 MARKET_DIR="${1:-${MARKET_DIR:-}}"
32 if [[ -z "${MARKET_DIR}" ]]; then
33 echo "ERROR: Market repository directory not provided. Set MARKET_DIR env or pass as first arg." >&2
34 echo "Example: MARKET_DIR=$HOME/src/market scripts/run-relay-and-seed.sh" >&2
35 exit 1
36 fi
37 if [[ ! -d "${MARKET_DIR}" ]]; then
38 echo "ERROR: MARKET_DIR does not exist: ${MARKET_DIR}" >&2
39 exit 1
40 fi
41
42 # ---------- Prerequisites ----------
43 command -v go >/dev/null 2>&1 || { echo "ERROR: 'go' not found in PATH" >&2; exit 1; }
44 command -v bun >/dev/null 2>&1 || { echo "ERROR: 'bun' not found in PATH. Install Bun: https://bun.sh" >&2; exit 1; }
45 command -v curl >/dev/null 2>&1 || { echo "ERROR: 'curl' not found in PATH" >&2; exit 1; }
46
47 # ---------- Cleanup handler ----------
48 RELAY_PID=""
49 cleanup() {
50 set +e
51 if [[ -n "${RELAY_PID}" ]]; then
52 echo "${LOG_PREFIX} stopping relay (pid=${RELAY_PID})" >&2
53 kill "${RELAY_PID}" 2>/dev/null || true
54 wait "${RELAY_PID}" 2>/dev/null || true
55 fi
56 }
57 trap cleanup EXIT INT TERM
58
59 # ---------- Start relay ----------
60 reset || true
61 rm -rf "${RELAY_DATA_DIR}"
62
63 # Run go relay in background with required environment variables
64 (
65 export ORLY_LOG_LEVEL="trace"
66 export ORLY_LISTEN="0.0.0.0"
67 export ORLY_PORT="${RELAY_PORT}"
68 export ORLY_ADMINS=""
69 export ORLY_ACL_MODE="none"
70 export ORLY_DATA_DIR="${RELAY_DATA_DIR}"
71 # Important: run from repo root
72 cd "${REPO_ROOT}"
73 # Prefix relay logs so they are distinguishable
74 stdbuf -oL -eL go run . 2>&1 | sed -u "s/^/${LOG_PREFIX} /"
75 ) &
76 RELAY_PID=$!
77 echo "${LOG_PREFIX} started (pid=${RELAY_PID}), waiting for readiness on ${RELAY_HOST}:${RELAY_PORT} …"
78
79 # ---------- Wait for readiness ----------
80 start_ts=$(date +%s)
81 while true; do
82 if curl -fsS "http://${RELAY_HOST}:${RELAY_PORT}/" >/dev/null 2>&1; then
83 break
84 fi
85 now=$(date +%s)
86 if (( now - start_ts > WAIT_TIMEOUT )); then
87 echo "ERROR: relay did not become ready within ${WAIT_TIMEOUT}s" >&2
88 exit 1
89 fi
90 sleep 1
91 done
92 echo "${LOG_PREFIX} ready. Running Market seeding…"
93
94 # ---------- Run market seeding ----------
95 (
96 cd "${MARKET_DIR}"
97 # Stream bun output with clear prefix
98 stdbuf -oL -eL bun dev:seed 2>&1 | sed -u 's/^/[market] /'
99 )
100 #
101 ## After seeding completes, keep the relay up briefly for inspection
102 #echo "${LOG_PREFIX} seeding finished. Relay is still running for inspection. Press Ctrl+C to stop."
103 ## Wait indefinitely until interrupted, to allow observing relay logs/behavior
104 #while true; do sleep 3600; done
105