Files
adamlamers 078ea8931b
Continuous Integration / backend-tests (push) Successful in 49s
Continuous Integration / frontend-check (push) Successful in 25s
Continuous Integration / e2e-tests (push) Successful in 6m14s
exclusion list apply logic
2026-05-04 20:16:47 -04:00

120 lines
3.6 KiB
Makefile

# 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/