| .PHONY: help dev up down migrate seed lint test clean |
|
|
| help: ## Show this help |
| @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' |
|
|
| |
|
|
| dev: ## Start all services for development |
| docker compose up -d db redis |
| @echo "⏳ Waiting for services..." |
| @sleep 3 |
| @echo "✅ DB and Redis running" |
| @echo "Run 'make backend' and 'make frontend' in separate terminals" |
|
|
| backend: ## Run backend dev server (uv) |
| cd backend && uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 |
|
|
| frontend: ## Run frontend dev server |
| cd frontend && pnpm dev |
|
|
| worker: ## Run Celery worker (uv) |
| cd backend && uv run celery -A app.worker.celery_config.celery_app worker --loglevel=info |
|
|
| beat: ## Run Celery beat scheduler (uv) |
| cd backend && uv run celery -A app.worker.celery_config.celery_app beat --loglevel=info |
|
|
| up: ## Start everything with Docker Compose |
| docker compose up -d |
|
|
| down: ## Stop all Docker containers |
| docker compose down |
|
|
| logs: ## Tail all container logs |
| docker compose logs -f |
|
|
| |
|
|
| migrate: ## Create a new migration (usage: make migrate msg="add users table") |
| cd backend && uv run alembic revision --autogenerate -m "$(msg)" |
|
|
| upgrade: ## Run all pending migrations |
| cd backend && uv run alembic upgrade head |
|
|
| downgrade: ## Rollback last migration |
| cd backend && uv run alembic downgrade -1 |
|
|
| seed: ## Seed database with sample data |
| cd backend && uv run python -m app.scripts.seed |
|
|
| |
|
|
| lint: ## Run linters |
| cd backend && uv run ruff check . && uv run ruff format --check . |
| cd frontend && pnpm lint |
|
|
| format: ## Auto-format code |
| cd backend && uv run ruff check --fix . && uv run ruff format . |
| cd frontend && pnpm lint --fix |
|
|
| typecheck: ## Run type checking |
| cd backend && uv run mypy app/ |
| cd frontend && pnpm tsc --noEmit |
|
|
| test: ## Run all tests |
| cd backend && uv run pytest -v --cov=app |
| cd frontend && pnpm test |
|
|
| test-backend: ## Run backend tests only |
| cd backend && uv run pytest -v --cov=app --cov-report=term-missing |
|
|
| test-e2e: ## Run end-to-end tests |
| cd frontend && uv run pytest e2e/ --base-url http://localhost:3000 |
|
|
| |
|
|
| install: ## Install all dependencies with uv |
| @echo "📦 Installing backend dependencies with uv..." |
| cd backend && uv sync |
| @echo "📦 Installing frontend dependencies with pnpm..." |
| cd frontend && pnpm install |
| @echo "📦 Installing playwright browsers..." |
| cd backend && uv run playwright install chromium |
| @echo "✅ All dependencies installed!" |
|
|
| install-dev: ## Install with dev dependencies |
| cd backend && uv sync --all-extras |
| cd frontend && pnpm install |
|
|
| setup: ## Full first-time setup |
| @echo "🚀 Setting up JobPortal..." |
| @command -v uv >/dev/null 2>&1 || { echo "Installing uv..."; curl -LsSf https://astral.sh/uv/install.sh | sh; } |
| @command -v pnpm >/dev/null 2>&1 || { echo "Installing pnpm..."; npm install -g pnpm; } |
| cp .env.example .env |
| $(MAKE) install |
| docker compose up -d db redis |
| @sleep 3 |
| $(MAKE) upgrade |
| $(MAKE) seed |
| @echo "" |
| @echo "✅ Setup complete!" |
| @echo " Run 'make dev' to start DB & Redis" |
| @echo " Then 'make backend' and 'make frontend' in separate terminals" |
| @echo "" |
| @echo " Demo login: demo@jobportal.dev / demo123" |
| @echo " Admin login: admin@jobportal.dev / admin123" |
|
|
| |
|
|
| lock: ## Update uv lock file |
| cd backend && uv lock |
|
|
| add: ## Add a dependency (usage: make add pkg=fastapi) |
| cd backend && uv add $(pkg) |
|
|
| add-dev: ## Add a dev dependency (usage: make add-dev pkg=pytest) |
| cd backend && uv add --dev $(pkg) |
|
|
| remove: ## Remove a dependency (usage: make remove pkg=fastapi) |
| cd backend && uv remove $(pkg) |
|
|
| |
|
|
| build: ## Build production images |
| docker compose -f docker-compose.prod.yml build |
|
|
| deploy: ## Deploy to production |
| ./deploy/deploy.sh all |
|
|
| deploy-backend: ## Deploy backend only |
| ./deploy/deploy.sh backend |
|
|
| deploy-frontend: ## Deploy frontend only |
| ./deploy/deploy.sh frontend |
|
|
| |
|
|
| clean: ## Remove all generated files and volumes |
| docker compose down -v |
| find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true |
| find . -type d -name .next -exec rm -rf {} + 2>/dev/null || true |
| find . -type d -name node_modules -exec rm -rf {} + 2>/dev/null || true |
| find . -type d -name .venv -exec rm -rf {} + 2>/dev/null || true |
| rm -f backend/uv.lock 2>/dev/null || true |
|
|