.PHONY: up down restart logs migrate seed test lint fmt check clean test-infra-up test-infra-down # ── Development environment ────────────────────────────────────────── up: docker compose up -d down: docker compose down restart: docker compose restart logs: docker compose logs -f logs-api: docker compose logs -f api # ── Database ───────────────────────────────────────────────────────── migrate: docker compose exec api alembic upgrade head migrate-offline: cd apps/api && DATABASE_URL=postgresql+asyncpg://consentos:consentos@localhost:5432/consentos alembic upgrade head seed: migrate docker compose exec api python -m src.cli.seed_known_cookies --clear rollback: docker compose exec api alembic downgrade -1 # ── Testing ────────────────────────────────────────────────────────── test-infra-up: docker compose -f docker-compose.test.yml up -d docker compose -f docker-compose.test.yml exec -T postgres-test sh -c 'until pg_isready -U consentos_test; do sleep 1; done' test-infra-down: docker compose -f docker-compose.test.yml down -v test: cd apps/api && python -m pytest tests/ -v --tb=short test-cov: cd apps/api && python -m pytest tests/ -v --cov=src --cov-report=term-missing --tb=short # ── Code quality ───────────────────────────────────────────────────── lint: cd apps/api && ruff check src/ tests/ alembic/ fmt: cd apps/api && ruff check --fix src/ tests/ alembic/ cd apps/api && ruff format src/ tests/ check: lint test # ── Cleanup ────────────────────────────────────────────────────────── clean: docker compose down -v docker compose -f docker-compose.test.yml down -v find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true find . -type d -name .pytest_cache -exec rm -rf {} + 2>/dev/null || true