Files

56 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT_DIR}"
if [ ! -d "web/node_modules" ]; then
echo "[web] Missing dependencies. Run: npm --prefix web install"
exit 1
fi
if [ -f ".env" ]; then
set -a
# shellcheck disable=SC1091
source ".env"
set +a
fi
if [ -x "${ROOT_DIR}/.venv/bin/python" ] && \
"${ROOT_DIR}/.venv/bin/python" -c "import uvicorn" >/dev/null 2>&1; then
PYTHON_BIN="${ROOT_DIR}/.venv/bin/python"
elif python3 -c "import uvicorn" >/dev/null 2>&1; then
PYTHON_BIN="python3"
else
echo "[api] Missing dependency: uvicorn."
echo " Install with: python3 -m venv .venv && source .venv/bin/activate && python -m pip install -r api/requirements.txt"
exit 1
fi
cleanup() {
trap - INT TERM EXIT
if [ -n "${WEB_PID:-}" ] && kill -0 "${WEB_PID}" 2>/dev/null; then
kill "${WEB_PID}" 2>/dev/null || true
fi
if [ -n "${API_PID:-}" ] && kill -0 "${API_PID}" 2>/dev/null; then
kill "${API_PID}" 2>/dev/null || true
fi
}
trap cleanup INT TERM EXIT
echo "[api] Starting FastAPI at ${API_HOST:-0.0.0.0}:${API_PORT:-8000}"
"${PYTHON_BIN}" -m uvicorn api.app.main:app \
--reload \
--host "${API_HOST:-0.0.0.0}" \
--port "${API_PORT:-8000}" &
API_PID=$!
echo "[web] Starting Next.js on :3000"
npm --workspace web run dev &
WEB_PID=$!
wait -n "${API_PID}" "${WEB_PID}"