#!/bin/bash # Likwid Development Environment Starter # Starts PostgreSQL (Podman), backend (Rust), and frontend (Astro) set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" STATE_DIR="$SCRIPT_DIR/.dev" STATE_FILE="$STATE_DIR/state.json" BACKEND_LOG="$STATE_DIR/backend.log" FRONTEND_LOG="$STATE_DIR/frontend.log" mkdir -p "$STATE_DIR" # Environment defaults export POSTGRES_USER="${POSTGRES_USER:-likwid}" export POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-likwid}" export POSTGRES_DB="${POSTGRES_DB:-likwid}" export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}" # Check if already running if [ -f "$STATE_FILE" ]; then BACKEND_PID=$(jq -r '.backendPid // empty' "$STATE_FILE" 2>/dev/null) if [ -n "$BACKEND_PID" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then echo "Already running (backend PID $BACKEND_PID). Run dev-stop.sh first." exit 0 fi fi # Start PostgreSQL echo "Starting PostgreSQL..." podman-compose -f "$ROOT_DIR/compose/dev.yml" up -d 2>/dev/null || true # Wait for PostgreSQL echo "Waiting for PostgreSQL..." for i in {1..30}; do if nc -z 127.0.0.1 5432 2>/dev/null; then break fi sleep 1 done # Start backend echo "Starting backend..." cd "$ROOT_DIR/backend" cargo run > "$BACKEND_LOG" 2>&1 & BACKEND_PID=$! # Start frontend echo "Starting frontend..." cd "$ROOT_DIR/frontend" PUBLIC_API_BASE="http://127.0.0.1:3000" npm run dev > "$FRONTEND_LOG" 2>&1 & FRONTEND_PID=$! # Save state cat > "$STATE_FILE" << EOF { "backendPid": $BACKEND_PID, "frontendPid": $FRONTEND_PID, "startedAt": "$(date -Iseconds)" } EOF sleep 3 # Status report echo "" echo "=== Likwid Dev Environment ===" if kill -0 "$BACKEND_PID" 2>/dev/null; then echo "Backend: Running (PID $BACKEND_PID) - http://127.0.0.1:3000" else echo "Backend: FAILED - check $BACKEND_LOG" fi if kill -0 "$FRONTEND_PID" 2>/dev/null; then echo "Frontend: Running (PID $FRONTEND_PID) - http://localhost:4321" else echo "Frontend: FAILED - check $FRONTEND_LOG" fi echo "PostgreSQL: Running on port 5432" echo "" echo "Logs: $STATE_DIR" echo "Stop: ./scripts/dev-stop.sh"