dev: one-command local stack via dev.sh

Starts the Go API and the Vite dev server as background jobs; 'wait -n'
returns when the first one exits and the EXIT trap kills the rest, so
one Ctrl-C (or either server crashing) stops everything. Installs
web/node_modules on first run. Verified: both ports respond, SIGINT
leaves no orphan processes.
This commit is contained in:
Justin Visser 2026-06-10 13:57:35 +02:00
parent 7c16e6ea4f
commit a57e729c10
2 changed files with 29 additions and 1 deletions

View file

@ -17,7 +17,13 @@ Status: milestone 2, thin API + parity page done.
## Development
Two terminals:
One command (installs frontend deps on first run, Ctrl-C stops everything):
```sh
./dev.sh
```
Or manually, in two terminals:
```sh
go run ./cmd/spreadlab # API on localhost:8080

22
dev.sh Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Local dev stack in one command:
# - Go API on localhost:8080
# - Vite dev server on localhost:5173 (proxies /api to the Go server)
# One Ctrl-C stops everything; if either server dies, the other is stopped.
set -euo pipefail
cd "$(dirname "$0")"
if [ ! -d web/node_modules ]; then
echo "dev.sh: first run, installing frontend dependencies..."
(cd web && npm install)
fi
# On exit (Ctrl-C included), stop whichever background job is still running.
trap 'kill $(jobs -p) 2>/dev/null' EXIT
go run ./cmd/spreadlab &
(cd web && npm run dev) &
# wait -n returns when the FIRST job exits; the trap then cleans up the rest.
wait -n