Skip to content

Commit 19d0b92

Browse files
committed
scripts: setup-server start logic
1 parent b471d03 commit 19d0b92

1 file changed

Lines changed: 47 additions & 26 deletions

File tree

scripts/setup-server.sh

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,58 @@
11
#!/usr/bin/env bash
2-
# setup-server.sh — provision a surreal binary; no-op if already present
2+
# setup-server.sh — provision + start a surreal server on 127.0.0.1:$PORT
3+
# Idempotent: no-op if a server is already listening on the port.
34
set -euo pipefail
45

5-
if command -v surreal &>/dev/null; then
6-
echo "[setup-server] surreal found at $(command -v surreal) — nothing to do"
7-
exit 0
8-
fi
9-
10-
OS="$(uname -s)"
6+
PORT="${SURREALDB_PORT:-8000}"
7+
USER="${SURREALDB_USER:-root}"
8+
PASS="${SURREALDB_PASS:-root}"
9+
IMAGE="${SURREALDB_IMAGE:-surrealdb/surrealdb:latest}"
10+
READY_TIMEOUT="${SURREALDB_READY_TIMEOUT:-30}"
1111

12-
if [ "${CI:-}" = "true" ]; then
13-
echo "[setup-server] CI environment — pulling surrealdb/surrealdb:latest via docker"
14-
docker pull surrealdb/surrealdb:latest
15-
mkdir -p "$HOME/.local/bin"
16-
cat > "$HOME/.local/bin/surreal" <<'WRAPPER'
17-
#!/usr/bin/env bash
18-
exec docker run --rm -it \
19-
-p 8000:8000 \
20-
surrealdb/surrealdb:latest \
21-
"$@"
22-
WRAPPER
23-
chmod +x "$HOME/.local/bin/surreal"
24-
echo "[setup-server] wrapper written to $HOME/.local/bin/surreal"
25-
echo "[setup-server] ensure \$HOME/.local/bin is on PATH"
12+
# Already running? Done.
13+
if nc -z 127.0.0.1 "$PORT" 2>/dev/null; then
14+
echo "[setup-server] surreal already listening on :$PORT — nothing to do"
2615
exit 0
2716
fi
2817

29-
if [ "$OS" = "Darwin" ]; then
30-
echo "[setup-server] surreal not found — install with:"
31-
echo " brew install surrealdb/tap/surreal"
18+
# Docker path: CI uses it; locally opt-in via SURREALDB_BACKEND=docker for CI parity.
19+
if [ "${CI:-}" = "true" ] || [ "${SURREALDB_BACKEND:-}" = "docker" ]; then
20+
echo "[setup-server] starting $IMAGE via docker on :$PORT"
21+
docker pull "$IMAGE"
22+
docker run -d --rm --name surreal-ci \
23+
-p "$PORT:8000" \
24+
"$IMAGE" \
25+
start --user "$USER" --pass "$PASS" --bind 0.0.0.0:8000 memory
26+
# Local path: native binary if available.
27+
elif command -v surreal &>/dev/null; then
28+
echo "[setup-server] starting native surreal on :$PORT (pid logged to /tmp/surreal-$PORT.pid)"
29+
surreal start --user "$USER" --pass "$PASS" --bind "127.0.0.1:$PORT" memory \
30+
> "/tmp/surreal-$PORT.log" 2>&1 &
31+
echo $! > "/tmp/surreal-$PORT.pid"
32+
# Local path: no binary. Tell the user how to get one.
33+
elif [ "$(uname -s)" = "Darwin" ]; then
34+
echo "[setup-server] surreal not found — install with:" >&2
35+
echo " brew install surrealdb/tap/surreal" >&2
3236
exit 1
3337
else
34-
echo "[setup-server] surreal not found — install with:"
35-
echo " curl -sSf https://install.surrealdb.com | sh"
38+
echo "[setup-server] surreal not found — install with:" >&2
39+
echo " curl -sSf https://install.surrealdb.com | sh" >&2
3640
exit 1
3741
fi
42+
43+
# Wait for the port to accept connections. Bounded — failed startup shouldn't
44+
# hang the workflow indefinitely.
45+
echo "[setup-server] waiting for :$PORT (timeout ${READY_TIMEOUT}s)..."
46+
for _ in $(seq 1 "$READY_TIMEOUT"); do
47+
if nc -z 127.0.0.1 "$PORT" 2>/dev/null; then
48+
echo "[setup-server] ready"
49+
exit 0
50+
fi
51+
sleep 1
52+
done
53+
54+
echo "[setup-server] timed out waiting for :$PORT" >&2
55+
if [ "${CI:-}" = "true" ]; then
56+
docker logs surreal-ci 2>&1 | tail -50 >&2 || true
57+
fi
58+
exit 1

0 commit comments

Comments
 (0)