86 lines
3.2 KiB
Makefile
86 lines
3.2 KiB
Makefile
# Configuration
|
|
set shell := ["bash", "-c"]
|
|
|
|
export VIRTUAL_ENV := ""
|
|
backend_dir := "backend/app"
|
|
frontend_dir := "frontend"
|
|
venv_bin := backend_dir + "/.venv/bin"
|
|
|
|
# ============================================================================
|
|
# Default: Show help
|
|
# ============================================================================
|
|
[doc("Show available recipes")]
|
|
default:
|
|
@just --list
|
|
|
|
# ============================================================================
|
|
# Setup: Initialize dependencies
|
|
# ============================================================================
|
|
|
|
[doc("Install all dependencies")]
|
|
install: install-backend install-frontend
|
|
|
|
[doc("Install backend dependencies with uv")]
|
|
install-backend:
|
|
cd {{backend_dir}} && uv sync
|
|
|
|
[doc("Install portable Node.js and frontend dependencies")]
|
|
install-frontend: install-backend
|
|
@echo "Ensuring Node.js is available..."
|
|
@if ! command -v npm >/dev/null 2>&1 && [ ! -f "{{venv_bin}}/npm" ]; then \
|
|
echo "Installing portable Node.js inside Python venv..."; \
|
|
cd {{backend_dir}} && uv pip install nodeenv && uv run nodeenv -p; \
|
|
fi
|
|
@echo "Installing frontend dependencies..."
|
|
export PATH="$PWD/{{venv_bin}}:$PATH" && cd {{frontend_dir}} && npm install
|
|
|
|
# ============================================================================
|
|
# Development: Run services
|
|
# ============================================================================
|
|
|
|
[doc("Run backend server")]
|
|
run-backend: install-backend
|
|
cd {{backend_dir}} && uv run python3 main.py
|
|
|
|
[doc("Run frontend development server")]
|
|
run-frontend: install-frontend
|
|
export PATH="$PWD/{{venv_bin}}:$PATH" && cd {{frontend_dir}} && npm start
|
|
|
|
[doc("Run both services (Backend + GUI)")]
|
|
dev: install
|
|
@echo "Starting backend and frontend..."
|
|
export PATH="$PWD/{{venv_bin}}:$PATH"; \
|
|
(cd {{backend_dir}} && uv run python3 main.py) & \
|
|
BACKEND_PID=$$!; \
|
|
sleep 2; \
|
|
(cd {{frontend_dir}} && npm start) & \
|
|
FRONTEND_PID=$$!; \
|
|
trap "kill $$BACKEND_PID $$FRONTEND_PID 2>/dev/null" EXIT INT TERM; \
|
|
wait
|
|
|
|
# ============================================================================
|
|
# Build & Clean
|
|
# ============================================================================
|
|
|
|
[doc("Build frontend")]
|
|
build-frontend: install-frontend
|
|
export PATH="$PWD/{{venv_bin}}:$PATH" && cd {{frontend_dir}} && npm run build
|
|
|
|
[doc("Clean build artifacts and all dependencies")]
|
|
clean-all:
|
|
rm -rf {{backend_dir}}/.pytest_cache
|
|
rm -rf {{backend_dir}}/__pycache__
|
|
rm -rf {{backend_dir}}/src/__pycache__
|
|
rm -rf {{frontend_dir}}/build
|
|
rm -rf {{backend_dir}}/.venv
|
|
rm -rf {{frontend_dir}}/node_modules
|
|
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
|
|
|
[doc("Check if tools are available")]
|
|
check:
|
|
@echo "Checking prerequisites..."
|
|
@command -v uv >/dev/null 2>&1 && echo "[OK] uv" || echo "[MISSING] uv"
|
|
@if command -v node >/dev/null 2>&1 || [ -f "{{venv_bin}}/node" ]; then echo "[OK] Node.js"; else echo "[MISSING] Node.js"; fi
|
|
@if command -v npm >/dev/null 2>&1 || [ -f "{{venv_bin}}/npm" ]; then echo "[OK] npm"; else echo "[MISSING] npm"; fi
|
|
@command -v python3 >/dev/null 2>&1 && echo "[OK] python3" || echo "[MISSING] python3"
|