Files
PecHub/Makefile
T
2026-03-18 17:30:13 +01:00

142 lines
5.4 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## PecFlow Developer Commands
.PHONY: dev down build test migrate seed lint format clean logs ps help
# Variabili
COMPOSE = docker compose
BACKEND = $(COMPOSE) exec backend
PYTEST = $(BACKEND) python -m pytest
help: ## Mostra questo help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
# ─── Stack locale ────────────────────────────────────────────────────────────
dev: ## Avvia l'intero stack in background
$(COMPOSE) up -d --build
@echo ""
@echo " ✅ Stack avviato:"
@echo " 📡 API: http://localhost:8000"
@echo " 📖 Docs: http://localhost:8000/docs"
@echo " 🗄️ MinIO: http://localhost:9001 (admin/password)"
@echo " 📊 PgAdmin: http://localhost:5050 (admin@pecflow.it / admin)"
@echo ""
down: ## Ferma e rimuove i container (preserva i volumi)
$(COMPOSE) down
down-v: ## Ferma e rimuove TUTTO inclusi i volumi (reset completo)
$(COMPOSE) down -v
build: ## Rebuilda le immagini senza usare la cache
$(COMPOSE) build --no-cache
logs: ## Segui i log di tutti i servizi
$(COMPOSE) logs -f
logs-backend: ## Segui i log del backend
$(COMPOSE) logs -f backend
logs-worker: ## Segui i log del worker IMAP
$(COMPOSE) logs -f worker
ps: ## Stato dei container
$(COMPOSE) ps
# ─── Database ────────────────────────────────────────────────────────────────
migrate: ## Esegui le migrazioni Alembic pendenti
$(BACKEND) alembic upgrade head
migrate-down: ## Rollback dell'ultima migrazione
$(BACKEND) alembic downgrade -1
migrate-status: ## Stato migrazioni
$(BACKEND) alembic current
makemigration: ## Genera una nuova migrazione (usa: make makemigration MSG="descrizione")
$(BACKEND) alembic revision --autogenerate -m "$(MSG)"
seed: ## Esegui seed dati di sviluppo (tenant demo + admin)
$(COMPOSE) exec db psql -U pecflow -d pecflow -f /docker-entrypoint-initdb.d/seeds/dev_tenant.sql
@echo " ✅ Seed completato"
reset-db: ## Reset completo DB (down-v + dev + migrate + seed)
$(MAKE) down-v
$(MAKE) dev
@sleep 5
$(MAKE) migrate
$(MAKE) seed
# ─── Test ────────────────────────────────────────────────────────────────────
test: ## Esegui tutti i test (unit + integration)
$(PYTEST) -v --tb=short
test-unit: ## Solo unit test
$(PYTEST) backend/tests/unit -v
test-integration: ## Solo integration test
$(PYTEST) backend/tests/integration -v
test-cov: ## Test con coverage report
$(PYTEST) --cov=app --cov-report=term-missing --cov-report=html:/app/htmlcov -v
# ─── Worker ──────────────────────────────────────────────────────────────────
WORKER = $(COMPOSE) exec worker
PYTEST_WORKER = $(WORKER) python -m pytest
test-worker: ## Esegui tutti i test del worker
$(PYTEST_WORKER) -v --tb=short
test-worker-unit: ## Solo unit test del worker (no infra richiesta)
$(PYTEST_WORKER) tests/unit -v
test-imap: ## Test integrazione IMAP con GreenMail (avvia GreenMail prima)
$(PYTEST_WORKER) tests/integration -v
greenmail-up: ## Avvia GreenMail (server IMAP/SMTP mock per test)
$(COMPOSE) --profile greenmail up -d greenmail
@echo " ✅ GreenMail avviato:"
@echo " 📬 IMAP: localhost:3143"
@echo " 📨 SMTP: localhost:3025"
@echo " 🌐 API: http://localhost:8080"
greenmail-down: ## Ferma GreenMail
$(COMPOSE) --profile greenmail stop greenmail
shell-worker: ## Shell nel container worker
$(WORKER) bash
worker-health: ## Verifica health del worker (tramite arq job)
$(WORKER) python -c "import asyncio; from arq import create_pool; from arq.connections import RedisSettings; \
async def main(): pool = await create_pool(RedisSettings()); r = await pool.enqueue_job('health_check'); print(await r.result(timeout=10)); \
asyncio.run(main())"
# ─── Code quality ─────────────────────────────────────────────────────────────
lint: ## Esegui linting (ruff + mypy)
$(BACKEND) ruff check app tests
$(BACKEND) mypy app --ignore-missing-imports
format: ## Formatta il codice con ruff
$(BACKEND) ruff format app tests
$(BACKEND) ruff check --fix app tests
# ─── Utility ─────────────────────────────────────────────────────────────────
shell-backend: ## Shell nel container backend
$(BACKEND) bash
shell-db: ## psql nel container database
$(COMPOSE) exec db psql -U pecflow -d pecflow
clean: ## Rimuovi file temporanei Python
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true
find . -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
find . -name ".mypy_cache" -exec rm -rf {} + 2>/dev/null || true
find . -name "htmlcov" -exec rm -rf {} + 2>/dev/null || true