server/dev.sh
vegard 4b8da64fc5 Fix: worker sender Authorization-header til AI Gateway
Uten nøkkelen returnerte LiteLLM 401, og AI-jobber feilet etter 3 forsøk.
Ny CLI-param --ai-gateway-key (env: AI_GATEWAY_KEY). dev.sh leser
LITELLM_MASTER_KEY fra .env.local og eksporterer som AI_GATEWAY_KEY.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 03:17:21 +01:00

87 lines
2.9 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"
export AI_GATEWAY_KEY=$(grep LITELLM_MASTER_KEY "$ROOT/.env.local" | cut -d= -f2)
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