-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrun-dev.sh
More file actions
70 lines (61 loc) · 2.02 KB
/
run-dev.sh
File metadata and controls
70 lines (61 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/sh
# Dev process launcher — sourced by docker-entrypoint.sh
# Runs all processes as root for simplicity in development.
# Variables available from entrypoint: OC_CONFIG, OC_ENV, OC_PASSWORD
# --- Start air (Go hot-reload) in background ---
echo "Starting air (Go hot-reload)..."
air &
AIR_PID=$!
# --- Start Vite dev server in background ---
echo "Starting Vite dev server on :5173..."
(cd admin-ui && npx vite --host 0.0.0.0 --port 5173) &
VITE_PID=$!
# Wait for MCP HTTP server to be listening (up to 30 seconds — first build may be slow)
echo "Waiting for MCP HTTP server on port 3100..."
MCP_READY=0
for i in $(seq 1 60); do
if nc -z 127.0.0.1 3100 2>/dev/null; then
MCP_READY=1
break
fi
sleep 0.5
done
if [ "$MCP_READY" -ne 1 ]; then
echo "WARNING: MCP HTTP server not ready after 30s, starting OpenCode anyway"
else
echo "MCP HTTP server ready, starting OpenCode..."
fi
# --- Launch OpenCode with restart loop (as root in dev mode) ---
start_opencode() {
while true; do
echo "Starting opencode serve on port 4098..."
# Run from / so OpenCode uses the "global" project scope (matching production)
(cd / && env \
OPENCODE_CONFIG_CONTENT="$OC_CONFIG" \
PATH="$PATH" \
LANG="${LANG:-C.UTF-8}" \
TERM="${TERM:-xterm}" \
${OC_PASSWORD:+OPENCODE_SERVER_PASSWORD=$OC_PASSWORD} \
$OC_ENV \
opencode serve --port 4098 --hostname 0.0.0.0)
echo "opencode exited ($?), restarting in 2s..."
sleep 2
done
}
start_opencode &
OPENCODE_PID=$!
# Clean up all processes on exit
cleanup() {
echo "Stopping opencode (pid $OPENCODE_PID)..."
kill $OPENCODE_PID 2>/dev/null
echo "Stopping air (pid $AIR_PID)..."
kill $AIR_PID 2>/dev/null
echo "Stopping Vite (pid $VITE_PID)..."
kill $VITE_PID 2>/dev/null
wait $OPENCODE_PID 2>/dev/null
wait $AIR_PID 2>/dev/null
wait $VITE_PID 2>/dev/null
}
trap cleanup EXIT INT TERM
# Wait for air (main dev process)
wait $AIR_PID