# TapeHoard Justfile # Install `just` to run these commands easily (e.g. `brew install just` or `cargo install just`) set shell := ["bash", "-c"] default: @just --list # --- Development --- # Run both the FastAPI backend and Svelte frontend in development mode dev: db-upgrade @echo "Starting Backend (FastAPI) and Frontend (SvelteKit)..." @trap 'kill %1' SIGINT; \ (cd backend && uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8000} --reload) & \ (cd frontend && VITE_API_URL=http://localhost:${PORT:-8000} npm run dev) # Run just the backend backend: db-upgrade cd backend && uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8000} --reload # Run just the frontend frontend: cd frontend && npm run dev # --- Quality Control --- # Run all linters and type checkers (Ruff, ty, Svelte Check) lint: @echo "Linting Python (Ruff)..." cd backend && uv run ruff check . @echo "Type checking Python (ty)..." cd backend && uv run ty check @echo "Type checking Svelte..." cd frontend && npm run check @echo "Running pre-commit hooks..." git hook run pre-commit # Run all backend tests pytest: @echo "Running backend tests..." cd backend && COVERAGE_CORE=sysmon uv run pytest # Run all tests and linting test: lint pytest playwright @echo "Running tests..." # Auto-format all code (Ruff Format) format: @echo "Formatting Python (Ruff)..." cd backend && uv run ruff format . # --- Database --- # Apply all pending Alembic database migrations db-upgrade: @echo "Upgrading Database..." cd backend && uv run alembic upgrade head # Autogenerate a new migration (Usage: just db-migrate "message") db-migrate message: @echo "Generating Migration..." cd backend && uv run alembic revision --autogenerate -m "{{message}}" # --- Code Generation --- # Export the OpenAPI spec JSON without regenerating the TypeScript client export-openapi: @echo "Exporting OpenAPI spec..." @cd backend && uv run python scripts/generate_openapi.py /tmp/tapehoard_openapi.json # Generate the TypeScript API client from the FastAPI OpenAPI spec generate-client: db-upgrade @echo "Generating TypeScript API client..." @cd backend && uv run python scripts/generate_openapi.py /tmp/tapehoard_openapi.json @cd frontend && npx @hey-api/openapi-ts -i /tmp/tapehoard_openapi.json -o src/lib/api -c @hey-api/client-fetch # Full regeneration workflow after schema changes: migrate, upgrade, generate client, lint regenerate message: db-upgrade @echo "Running full regeneration workflow..." cd backend && uv run alembic revision --autogenerate -m "{{message}}" cd backend && uv run alembic upgrade head @just generate-client @just lint # --- Docker --- # Build the production Docker image docker-build: @echo "Building TapeHoard Docker image..." docker build -t tapehoard:latest -f docker/Dockerfile . # Start the production stack using Docker Compose docker-up: @echo "Starting TapeHoard stack..." cd docker && docker-compose up -d # Stop the production stack docker-down: @echo "Stopping TapeHoard stack..." cd docker && docker-compose down # --- End-to-End Testing --- # Run playwright tests (automatically starts mock backend) playwright: @echo "Running Playwright E2E Tests..." cd frontend && npx playwright test playwright-ui: @echo "Starting playweight UI..." cd frontend && npx playwright test --ui # Clean test artifacts and kill stale test servers clean-test: @echo "Cleaning test artifacts..." pkill -f "start_test_server" 2>/dev/null || true rm -f backend/e2e_test.db backend/e2e_test.db-* rm -rf frontend/test-results/