L'installation du projet nécessitait plusieurs commandes manuelles et le Makefile listait les commandes dans un bloc help statique, difficile à maintenir et susceptible de devenir obsolète. Le Makefile utilise maintenant le pattern "## description" qui génère automatiquement l'aide à partir des commentaires inline. Le README est simplifié avec un `make install` unique qui orchestre tout le setup.
190 lines
6.2 KiB
Makefile
190 lines
6.2 KiB
Makefile
.DEFAULT_GOAL := help
|
|
|
|
# =============================================================================
|
|
# Docker
|
|
# =============================================================================
|
|
|
|
.PHONY: up
|
|
up: ## Lancer tous les services
|
|
docker compose up -d
|
|
|
|
.PHONY: down
|
|
down: ## Arrêter tous les services
|
|
docker compose down
|
|
|
|
.PHONY: restart
|
|
restart: ## Redémarrer tous les services
|
|
docker compose down
|
|
docker compose up -d
|
|
|
|
.PHONY: rebuild
|
|
rebuild: ## Reconstruire et relancer les services (sans cache)
|
|
docker compose down
|
|
docker compose build --no-cache
|
|
docker compose up -d
|
|
|
|
.PHONY: build
|
|
build: ## Reconstruire les images Docker (sans cache)
|
|
docker compose build --no-cache
|
|
|
|
.PHONY: logs
|
|
logs: ## Voir les logs de tous les services (Ctrl+C pour quitter)
|
|
docker compose logs -f
|
|
|
|
.PHONY: ps
|
|
ps: ## Afficher le statut des services
|
|
docker compose ps
|
|
|
|
.PHONY: clean
|
|
clean: ## Supprimer volumes et images locales
|
|
docker compose down -v --rmi local
|
|
|
|
# =============================================================================
|
|
# Shell
|
|
# =============================================================================
|
|
|
|
.PHONY: shell
|
|
shell: ## Ouvrir un shell dans le container PHP
|
|
docker compose exec php sh
|
|
|
|
.PHONY: bash
|
|
bash: shell ## Alias pour 'make shell'
|
|
|
|
.PHONY: console
|
|
console: ## Exécuter une commande Symfony (ex: make console c='debug:router')
|
|
docker compose exec php php bin/console $(c)
|
|
|
|
.PHONY: shell-frontend
|
|
shell-frontend: ## Ouvrir un shell dans le container frontend
|
|
docker compose exec frontend sh
|
|
|
|
# =============================================================================
|
|
# Backend - Qualité
|
|
# =============================================================================
|
|
|
|
.PHONY: phpstan
|
|
phpstan: ## Analyse statique PHPStan (level 9)
|
|
docker compose exec php composer phpstan
|
|
|
|
.PHONY: arch
|
|
arch: ## Tests d'architecture PHPat
|
|
docker compose exec php composer arch
|
|
|
|
.PHONY: cs-fix
|
|
cs-fix: ## Corriger le code style PHP (PHP-CS-Fixer)
|
|
docker compose exec php composer cs-fix
|
|
|
|
.PHONY: cs-check
|
|
cs-check: ## Vérifier le code style PHP sans corriger
|
|
docker compose exec php composer cs-check
|
|
|
|
.PHONY: test-php
|
|
test-php: ## Lancer les tests PHPUnit
|
|
docker compose exec php composer test
|
|
|
|
.PHONY: warmup
|
|
warmup: ## Préchauffer le cache Symfony
|
|
docker compose exec php php bin/console cache:warmup
|
|
|
|
# =============================================================================
|
|
# Frontend - Qualité
|
|
# =============================================================================
|
|
|
|
.PHONY: lint
|
|
lint: ## Lancer ESLint sur le frontend
|
|
docker compose exec frontend pnpm run lint
|
|
|
|
.PHONY: check-types
|
|
check-types: ## Vérifier les types TypeScript (svelte-check)
|
|
docker compose exec frontend pnpm run check
|
|
|
|
.PHONY: test-js
|
|
test-js: ## Lancer les tests Vitest
|
|
docker compose exec frontend pnpm run test
|
|
|
|
.PHONY: e2e
|
|
e2e: ## Lancer les tests E2E Playwright
|
|
docker compose exec frontend pnpm run test:e2e
|
|
|
|
# =============================================================================
|
|
# Tout-en-un
|
|
# =============================================================================
|
|
|
|
.PHONY: test
|
|
test: test-php test-js ## Lancer tous les tests (PHPUnit + Vitest)
|
|
|
|
.PHONY: check
|
|
check: phpstan cs-check lint check-types ## Lancer tous les linters et checks
|
|
|
|
# =============================================================================
|
|
# Scripts
|
|
# =============================================================================
|
|
|
|
.PHONY: check-bc
|
|
check-bc: ## Vérifier l'isolation des Bounded Contexts
|
|
./scripts/check-bc-isolation.sh
|
|
|
|
.PHONY: check-naming
|
|
check-naming: ## Vérifier les conventions de nommage
|
|
./scripts/check-naming.sh
|
|
|
|
.PHONY: check-tenants
|
|
check-tenants: ## Vérifier que les tenants répondent
|
|
./scripts/check-tenants.sh
|
|
|
|
# =============================================================================
|
|
# Setup initial
|
|
# =============================================================================
|
|
|
|
.PHONY: install
|
|
install: up jwt-keys warmup ## Installation complète après clone
|
|
|
|
.PHONY: jwt-keys
|
|
jwt-keys: ## Générer les clés JWT (requis après clone)
|
|
@echo "Génération des clés JWT..."
|
|
@docker compose exec php mkdir -p config/jwt
|
|
@docker compose exec php openssl genpkey -out config/jwt/private.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -pass pass:$${JWT_PASSPHRASE:-classeo_jwt_passphrase_change_me}
|
|
@docker compose exec php openssl pkey -in config/jwt/private.pem -out config/jwt/public.pem -pubout -passin pass:$${JWT_PASSPHRASE:-classeo_jwt_passphrase_change_me}
|
|
@echo "Clés JWT générées dans backend/config/jwt/"
|
|
|
|
# =============================================================================
|
|
# Dev helpers
|
|
# =============================================================================
|
|
|
|
.PHONY: token
|
|
token: ## Créer un token d'activation (interactif). Options: email=, role=, tenant=, minor=1
|
|
docker compose exec php php bin/console app:dev:create-test-activation-token \
|
|
$(if $(email),--email=$(email),) \
|
|
$(if $(role),--role=$(role),) \
|
|
$(if $(tenant),--tenant=$(tenant),) \
|
|
$(if $(minor),--minor,) \
|
|
--base-url=http://localhost:5174
|
|
|
|
.PHONY: token-alpha
|
|
token-alpha: ## Créer un token sur ecole-alpha. Options: email=, role=, minor=1
|
|
docker compose exec -T php php bin/console app:dev:create-test-activation-token -n \
|
|
--tenant=ecole-alpha --base-url=http://ecole-alpha.classeo.local:5174 \
|
|
$(if $(email),--email=$(email),--email=alpha@test.com) \
|
|
$(if $(role),--role=$(role),) \
|
|
$(if $(minor),--minor,)
|
|
|
|
.PHONY: token-beta
|
|
token-beta: ## Créer un token sur ecole-beta. Options: email=, role=, minor=1
|
|
docker compose exec -T php php bin/console app:dev:create-test-activation-token -n \
|
|
--tenant=ecole-beta --base-url=http://ecole-beta.classeo.local:5174 \
|
|
$(if $(email),--email=$(email),--email=beta@test.com) \
|
|
$(if $(role),--role=$(role),) \
|
|
$(if $(minor),--minor,)
|
|
|
|
# =============================================================================
|
|
# Help
|
|
# =============================================================================
|
|
|
|
.PHONY: help
|
|
help: ## Afficher cette aide
|
|
@echo ""
|
|
@echo " Classeo - Commandes disponibles"
|
|
@echo ""
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
@echo ""
|