Files

176 lines
5.2 KiB
Makefile

.PHONY: help install test lint format security clean run-dev docker-build docker-up migrate shell
help: ## Show this help message
@echo 'Usage: make [target]'
@echo ''
@echo 'Available targets:'
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
# Development Setup
install: ## Install all dependencies
pip install -r requirements.txt
cd backend && pip install -r requirements.txt
install-dev: ## Install development dependencies
pip install -r requirements.txt
cd backend && pip install -r requirements.txt
pip install pytest pytest-asyncio pytest-cov black ruff mypy pre-commit
setup-pre-commit: ## Setup pre-commit hooks
pre-commit install
# Code Quality
lint: ## Run linting checks
@echo "Running ruff..."
ruff check backend/
@echo "Running mypy..."
mypy backend/app --ignore-missing-imports
format: ## Format code with black and ruff
@echo "Formatting with black..."
black backend/
@echo "Fixing with ruff..."
ruff check backend/ --fix
format-check: ## Check code formatting without changing files
black backend/ --check
ruff check backend/
# Testing
test: ## Run all tests
pytest backend/tests/ -v
test-cov: ## Run tests with coverage report
pytest backend/tests/ -v --cov=backend/app --cov-report=html --cov-report=term
test-unit: ## Run unit tests only
pytest backend/tests/unit/ -v
test-integration: ## Run integration tests only
pytest backend/tests/integration/ -v
test-watch: ## Run tests in watch mode
pytest-watch backend/tests/ -v
# Security
security: ## Run security checks
@echo "Running bandit..."
bandit -r backend/app -ll
@echo "Running safety..."
safety check --json
security-full: ## Run comprehensive security scan
@echo "Running bandit..."
bandit -r backend/app -ll
@echo "Running safety..."
safety check
@echo "Checking for secrets..."
detect-secrets scan --all-files
# Database
migrate: ## Run database migrations
cd backend && alembic upgrade head
migrate-down: ## Rollback last migration
cd backend && alembic downgrade -1
migrate-create: ## Create a new migration (use name=your_migration_name)
cd backend && alembic revision --autogenerate -m "$(name)"
migrate-history: ## Show migration history
cd backend && alembic history
migrate-current: ## Show current migration version
cd backend && alembic current
db-reset: ## Reset database (DANGER: deletes all data!)
cd backend && alembic downgrade base
cd backend && alembic upgrade head
# Docker
docker-build: ## Build Docker images
docker-compose build
docker-up: ## Start Docker containers
docker-compose up -d
docker-down: ## Stop Docker containers
docker-compose down
docker-logs: ## Show Docker logs
docker-compose logs -f
docker-restart: ## Restart Docker containers
docker-compose restart
docker-clean: ## Remove all Docker containers, images, and volumes
docker-compose down -v
docker system prune -af
# Running
run-dev: ## Run backend in development mode
cd backend && uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
run-worker: ## Run Celery worker
cd backend && celery -A app.core.celery_app worker --loglevel=info
run-beat: ## Run Celery beat scheduler
cd backend && celery -A app.core.celery_app beat --loglevel=info
run-flower: ## Run Flower (Celery monitoring)
cd backend && celery -A app.core.celery_app flower --port=5555
run-legacy: ## Run legacy inboxconverge script
python inboxconverge.py
# Database Shell
shell: ## Open database shell
docker-compose exec db psql -U postgres -d inbox_converge
shell-python: ## Open Python shell with app context
cd backend && python -c "from app.core.database import SessionLocal; db = SessionLocal(); print('Database session available as db')"
# Cleanup
clean: ## Clean up temporary files
find . -type d -name "__pycache__" -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
find . -type f -name "*.pyo" -delete
find . -type d -name "*.egg-info" -exec rm -rf {} +
find . -type d -name ".pytest_cache" -exec rm -rf {} +
find . -type d -name ".ruff_cache" -exec rm -rf {} +
find . -type d -name ".mypy_cache" -exec rm -rf {} +
rm -rf htmlcov/
rm -rf .coverage
clean-all: clean docker-clean ## Clean everything including Docker
# CI/CD
ci-test: format-check lint security test-cov ## Run all CI checks
# Documentation
docs-serve: ## Serve documentation locally
@echo "Documentation available in docs/ directory"
@echo "Open docs/ARCHITECTURE.md, docs/CODING_PATTERNS.md, etc."
# Environment
env-check: ## Check if required environment variables are set
@echo "Checking environment variables..."
@python -c "import os; required=['DATABASE_URL','SECRET_KEY','ENCRYPTION_KEY']; missing=[v for v in required if not os.getenv(v)]; print('✅ All required vars set' if not missing else f'❌ Missing: {missing}')"
# Development helpers
init-dev: install-dev setup-pre-commit docker-up migrate ## Initialize development environment
@echo "✅ Development environment initialized!"
@echo "Run 'make run-dev' to start the backend"
quick-test: format lint test ## Quick quality check before commit
# Release
version: ## Show current version
@echo "Version information:"
@git describe --tags --always
tag: ## Create a new version tag (use v=1.0.0)
@echo "Creating tag $(v)..."
git tag -a $(v) -m "Release $(v)"
git push origin $(v)