86 lines
2.8 KiB
Bash
Executable file
86 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Sidelinja — start alt for lokal utvikling
|
|
# Bruk: ./dev.sh [--clean]
|
|
# --clean Sletter SpacetimeDB-data og starter blankt
|
|
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
SPACETIME_URL="http://127.0.0.1:3000"
|
|
SPACETIME_MODULE="sidelinja-realtime"
|
|
SPACETIME_SERVER="local"
|
|
|
|
# === Rens ved behov ===
|
|
if [[ "${1:-}" == "--clean" ]]; then
|
|
echo "=== Renser SpacetimeDB-data ==="
|
|
docker compose -f "$ROOT/docker-compose.dev.yml" --env-file "$ROOT/.env.local" \
|
|
rm -sf spacetimedb 2>/dev/null || true
|
|
rm -rf "$ROOT/.docker-data/spacetimedb"
|
|
mkdir -p "$ROOT/.docker-data/spacetimedb"
|
|
fi
|
|
|
|
# === 1. Docker-tjenester ===
|
|
echo "=== Starter Docker-tjenester ==="
|
|
docker compose -f "$ROOT/docker-compose.dev.yml" --env-file "$ROOT/.env.local" up -d
|
|
|
|
# === 2. Vent på SpacetimeDB ===
|
|
echo "=== Venter på SpacetimeDB ==="
|
|
timeout 30 bash -c "until curl -sf $SPACETIME_URL/v1/ping > /dev/null 2>&1; do sleep 1; done" \
|
|
|| { echo "FEIL: SpacetimeDB svarte ikke innen 30s"; exit 1; }
|
|
echo "SpacetimeDB klar"
|
|
|
|
# === 3. Konfigurer spacetime CLI (håndterer ny fingerprint automatisk) ===
|
|
echo "=== Konfigurerer SpacetimeDB CLI ==="
|
|
spacetime server remove "$SPACETIME_SERVER" 2>/dev/null || true
|
|
spacetime server add "$SPACETIME_SERVER" --url "$SPACETIME_URL" --default 2>/dev/null || true
|
|
# Ved --clean har SpacetimeDB ny identity — re-login for å unngå 401
|
|
if [[ "${1:-}" == "--clean" ]]; then
|
|
spacetime login --server-issued-login "$SPACETIME_SERVER" 2>/dev/null || true
|
|
fi
|
|
|
|
# === 4. Publiser modul ===
|
|
echo "=== Publiserer SpacetimeDB-modul ==="
|
|
cd "$ROOT/spacetimedb"
|
|
spacetime publish "$SPACETIME_MODULE" --server "$SPACETIME_SERVER" 2>&1 \
|
|
| grep -v "wasm-opt\|Would you like\|WARNING.*UNSTABLE" || true
|
|
echo "Modul publisert"
|
|
|
|
# === 5. Generer TypeScript-bindinger ===
|
|
echo "=== Genererer TypeScript-bindinger ==="
|
|
spacetime generate --lang typescript \
|
|
--out-dir "$ROOT/web/src/lib/chat/module_bindings" \
|
|
--module-path .
|
|
echo "Bindinger generert"
|
|
|
|
# === 6. Start worker + frontend ===
|
|
echo ""
|
|
echo "=== Starter worker + frontend ==="
|
|
|
|
cd "$ROOT/worker"
|
|
cargo run -- --spacetimedb-url "$SPACETIME_URL" --sync-interval 1 --warmup-limit 100 2>&1 | sed 's/^/[worker] /' &
|
|
WORKER_PID=$!
|
|
|
|
cd "$ROOT/web"
|
|
npm run dev 2>&1 | sed 's/^/[frontend] /' &
|
|
FRONTEND_PID=$!
|
|
|
|
cleanup() {
|
|
echo ""
|
|
echo "Stopper worker og frontend..."
|
|
kill $WORKER_PID $FRONTEND_PID 2>/dev/null
|
|
wait $WORKER_PID $FRONTEND_PID 2>/dev/null
|
|
echo "Stoppet. Docker-tjenester kjører fortsatt (bruk 'docker compose down' for å stoppe)."
|
|
}
|
|
trap cleanup EXIT INT TERM
|
|
|
|
echo ""
|
|
echo "Alt kjører:"
|
|
echo " Frontend: http://localhost:5173"
|
|
echo " SpacetimeDB: $SPACETIME_URL"
|
|
echo " PostgreSQL: localhost:5432"
|
|
echo " Worker PID: $WORKER_PID"
|
|
echo ""
|
|
echo "Ctrl+C for å stoppe worker + frontend."
|
|
echo ""
|
|
|
|
wait
|