localtesting.sh raw
1 #!/bin/bash
2 set -euo pipefail
3
4 # localtesting.sh - Start a local ORLY relay + smesh dev server for testing.
5 #
6 # Requires:
7 # SUPERUSER - your npub (used for ORLY_ADMINS and ORLY_OWNERS)
8 # SMESH_SRC - (optional) path to smesh source, defaults to ~/src/smesh
9 #
10 # Runs relay on ws://localhost:3334 and smesh on http://localhost:5173
11
12 TESTDIR="/tmp/orly-localtest"
13 PIDDIR="$TESTDIR/pids"
14 DATADIR="$TESTDIR/data"
15 LOGDIR="$TESTDIR/logs"
16 BINARY="$TESTDIR/orly"
17 SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
18 REPODIR="$(cd "$SCRIPTDIR/.." && pwd)"
19 SMESH_SRC="${SMESH_SRC:-$HOME/src/smesh}"
20
21 if [[ -z "${SUPERUSER:-}" ]]; then
22 echo "error: SUPERUSER environment variable not set"
23 echo "Set it to your npub, e.g.:"
24 echo " export SUPERUSER=npub1..."
25 exit 1
26 fi
27
28 if [[ ! -d "$SMESH_SRC" ]]; then
29 echo "error: smesh source not found at $SMESH_SRC"
30 echo "Set SMESH_SRC to the correct path"
31 exit 1
32 fi
33
34 # Check for existing instance
35 if [[ -f "$PIDDIR/relay.pid" ]]; then
36 pid=$(cat "$PIDDIR/relay.pid")
37 if kill -0 "$pid" 2>/dev/null; then
38 echo "error: local testing already running (relay PID $pid)"
39 echo "Run scripts/stoptesting.sh first, or scripts/updatetesting.sh to rebuild"
40 exit 1
41 fi
42 fi
43
44 mkdir -p "$PIDDIR" "$DATADIR" "$LOGDIR"
45
46 # Build relay
47 echo "Building relay..."
48 cd "$REPODIR"
49 CGO_ENABLED=0 go build -o "$BINARY" ./cmd/orly
50 echo "Relay built: $BINARY"
51
52 # Start relay launcher in background
53 echo "Starting relay..."
54 ORLY_DATA_DIR="$DATADIR" \
55 ORLY_PORT=3334 \
56 ORLY_LISTEN=127.0.0.1 \
57 ORLY_LOG_LEVEL=info \
58 ORLY_ADMINS="$SUPERUSER" \
59 ORLY_OWNERS="$SUPERUSER" \
60 ORLY_AUTH_REQUIRED=false \
61 ORLY_AUTH_TO_WRITE=false \
62 ORLY_LAUNCHER_DB_DRIVER=badger \
63 ORLY_LAUNCHER_DB_LISTEN=127.0.0.1:50061 \
64 ORLY_LAUNCHER_ACL_ENABLED=true \
65 ORLY_LAUNCHER_ACL_LISTEN=127.0.0.1:50062 \
66 ORLY_LAUNCHER_ACL_READY_TIMEOUT=600s \
67 ORLY_ACL_MODE=follows \
68 ORLY_DB_TYPE=grpc \
69 ORLY_GRPC_SERVER=127.0.0.1:50061 \
70 ORLY_ACL_TYPE=grpc \
71 ORLY_GRPC_ACL=127.0.0.1:50062 \
72 ORLY_NEGENTROPY_ENABLED=false \
73 ORLY_LAUNCHER_SYNC_NEGENTROPY_ENABLED=false \
74 ORLY_FOLLOW_LIST_FREQUENCY=1h \
75 ORLY_DB_BLOCK_CACHE_MB=256 \
76 ORLY_DB_INDEX_CACHE_MB=128 \
77 ORLY_QUERY_CACHE_DISABLED=false \
78 ORLY_QUERY_CACHE_SIZE_MB=64 \
79 ORLY_SERIAL_CACHE_PUBKEYS=50000 \
80 ORLY_SERIAL_CACHE_EVENT_IDS=200000 \
81 ORLY_GC_ENABLED=false \
82 ORLY_MAX_CONN_PER_IP=50 \
83 ORLY_QUERY_RESULT_LIMIT=256 \
84 ORLY_WEB_DISABLE=false \
85 "$BINARY" launcher > "$LOGDIR/relay.log" 2>&1 &
86
87 RELAY_PID=$!
88 echo "$RELAY_PID" > "$PIDDIR/relay.pid"
89 echo "Relay launcher started (PID $RELAY_PID), logs: $LOGDIR/relay.log"
90
91 # Start smesh dev server in background
92 echo "Starting smesh dev server..."
93 cd "$SMESH_SRC"
94 bun run dev > "$LOGDIR/smesh.log" 2>&1 &
95
96 SMESH_PID=$!
97 echo "$SMESH_PID" > "$PIDDIR/smesh.pid"
98 echo "Smesh dev server started (PID $SMESH_PID), logs: $LOGDIR/smesh.log"
99
100 # Wait for relay to be ready
101 echo -n "Waiting for relay..."
102 for i in $(seq 1 30); do
103 if curl -s -o /dev/null http://127.0.0.1:3334 2>/dev/null; then
104 echo " ready"
105 break
106 fi
107 if ! kill -0 "$RELAY_PID" 2>/dev/null; then
108 echo " failed (process exited)"
109 echo "Check logs: $LOGDIR/relay.log"
110 exit 1
111 fi
112 echo -n "."
113 sleep 1
114 done
115
116 echo ""
117 echo "Local testing environment running:"
118 echo " Relay: ws://localhost:3334"
119 echo " Smesh: http://localhost:5173"
120 echo " Owner: $SUPERUSER"
121 echo " Data: $DATADIR"
122 echo " Logs: $LOGDIR/"
123 echo ""
124 echo "Commands:"
125 echo " scripts/updatetesting.sh - rebuild and restart relay"
126 echo " scripts/stoptesting.sh - stop everything"
127