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