Files
home_stock/Makefile
2026-01-28 19:22:30 +01:00

134 lines
4.2 KiB
Makefile

.PHONY: help dev test lint fmt clean docker-up docker-down install migrate
# Variables
BACKEND_DIR = backend
FRONTEND_DIR = frontend
PYTHON = python3
UV = uv
NPM = npm
help: ## Affiche cette aide
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
# === Développement ===
dev: ## Lance l'environnement de développement complet (backend + frontend)
docker compose up --build
dev-backend: ## Lance uniquement le backend en mode dev
cd $(BACKEND_DIR) && $(UV) run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
dev-frontend: ## Lance uniquement le frontend en mode dev
cd $(FRONTEND_DIR) && $(NPM) run dev
# === Installation ===
install: install-backend install-frontend ## Installe toutes les dépendances
install-backend: ## Installe les dépendances Python (backend)
cd $(BACKEND_DIR) && $(UV) sync
install-frontend: ## Installe les dépendances Node (frontend)
cd $(FRONTEND_DIR) && $(NPM) install
# === Tests ===
test: test-backend test-frontend ## Lance tous les tests
test-backend: ## Lance les tests backend (pytest)
cd $(BACKEND_DIR) && $(UV) run pytest
test-backend-cov: ## Lance les tests backend avec couverture
cd $(BACKEND_DIR) && $(UV) run pytest --cov=app --cov-report=html --cov-report=term
test-frontend: ## Lance les tests frontend (vitest)
cd $(FRONTEND_DIR) && $(NPM) run test
# === Linting & Formatage ===
lint: lint-backend lint-frontend ## Lance tous les linters
lint-backend: ## Lint le code backend (ruff + mypy)
cd $(BACKEND_DIR) && $(UV) run ruff check .
cd $(BACKEND_DIR) && $(UV) run mypy .
lint-frontend: ## Lint le code frontend (eslint)
cd $(FRONTEND_DIR) && $(NPM) run lint
fmt: fmt-backend fmt-frontend ## Formate tout le code
fmt-backend: ## Formate le code backend (ruff)
cd $(BACKEND_DIR) && $(UV) run ruff check --fix .
cd $(BACKEND_DIR) && $(UV) run ruff format .
fmt-frontend: ## Formate le code frontend (prettier)
cd $(FRONTEND_DIR) && $(NPM) run fmt
# === Base de données ===
migrate: ## Crée et applique une nouvelle migration Alembic
cd $(BACKEND_DIR) && $(UV) run alembic revision --autogenerate -m "$(msg)"
cd $(BACKEND_DIR) && $(UV) run alembic upgrade head
migrate-up: ## Applique les migrations en attente
cd $(BACKEND_DIR) && $(UV) run alembic upgrade head
migrate-down: ## Rollback de la dernière migration
cd $(BACKEND_DIR) && $(UV) run alembic downgrade -1
migrate-history: ## Affiche l'historique des migrations
cd $(BACKEND_DIR) && $(UV) run alembic history
db-reset: ## Réinitialise la base de données (ATTENTION: supprime toutes les données!)
rm -f data/homestock.db
$(MAKE) migrate-up
# === Docker ===
docker-up: ## Démarre les conteneurs Docker
docker compose up -d
docker-down: ## Arrête les conteneurs Docker
docker compose down
docker-logs: ## Affiche les logs des conteneurs
docker compose logs -f
docker-rebuild: ## Rebuild et redémarre les conteneurs
docker compose up --build -d
docker-clean: ## Nettoie les conteneurs, volumes et images Docker
docker compose down -v
docker system prune -f
# === Nettoyage ===
clean: ## Nettoie les fichiers temporaires
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
find . -type d -name ".ruff_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".mypy_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name "node_modules" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name "dist" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete
rm -rf $(BACKEND_DIR)/htmlcov
rm -rf $(FRONTEND_DIR)/coverage
clean-all: clean docker-clean ## Nettoie tout (fichiers + Docker)
rm -rf data/homestock.db
rm -rf uploads/*
# === Utilitaires ===
shell-backend: ## Ouvre un shell Python dans l'environnement backend
cd $(BACKEND_DIR) && $(UV) run python
shell-db: ## Ouvre un shell SQLite sur la base de données
sqlite3 data/homestock.db
check: lint test ## Vérifie la qualité du code (lint + tests)
init: install migrate-up ## Initialise le projet pour la première fois
@echo "✅ Projet initialisé avec succès!"
@echo "👉 Lancez 'make dev' pour démarrer le développement"