veza/veza-backend-api/Makefile
2025-12-03 20:29:37 +01:00

185 lines
6.4 KiB
Makefile

# Makefile pour Veza Backend API
# Ce Makefile facilite le développement et la maintenance du backend Go
.PHONY: help build test clean lint format vet tidy deps install run dev docker-build docker-run
# Variables
BINARY_NAME=veza-backend-api
DOCKER_IMAGE=veza-backend-api
DOCKER_TAG=latest
GO_VERSION=1.21
LINT_VERSION=1.54.2
# Couleurs pour les messages
GREEN=\033[0;32m
YELLOW=\033[1;33m
RED=\033[0;31m
NC=\033[0m # No Color
# Aide par défaut
help: ## Affiche cette aide
@echo "$(GREEN)Veza Backend API - Makefile$(NC)"
@echo ""
@echo "$(YELLOW)Commandes disponibles:$(NC)"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Développement
build: ## Compile l'application
@echo "$(GREEN)🔨 Compilation de l'application...$(NC)"
@go build -o bin/$(BINARY_NAME) ./cmd/modern-server/main.go
@echo "$(GREEN)✅ Compilation terminée: bin/$(BINARY_NAME)$(NC)"
build-linux: ## Compile l'application pour Linux
@echo "$(GREEN)🔨 Compilation pour Linux...$(NC)"
@GOOS=linux GOARCH=amd64 go build -o bin/$(BINARY_NAME)-linux ./cmd/modern-server/main.go
@echo "$(GREEN)✅ Compilation Linux terminée: bin/$(BINARY_NAME)-linux$(NC)"
# Tests
test: ## Exécute tous les tests
@echo "$(GREEN)🧪 Exécution des tests...$(NC)"
@go test -v ./...
test-coverage: ## Exécute les tests avec couverture
@echo "$(GREEN)🧪 Tests avec couverture...$(NC)"
@go test -coverprofile=coverage.out ./...
@go tool cover -html=coverage.out -o coverage.html
@echo "$(GREEN)✅ Rapport de couverture généré: coverage.html$(NC)"
test-race: ## Exécute les tests avec détection de race conditions
@echo "$(GREEN)🧪 Tests avec détection de race conditions...$(NC)"
@go test -race ./...
# Qualité du code
lint: ## Exécute golangci-lint
@echo "$(GREEN)🔍 Vérification avec golangci-lint...$(NC)"
@if command -v golangci-lint >/dev/null 2>&1; then \
golangci-lint run; \
else \
echo "$(YELLOW)⚠️ golangci-lint non installé. Installation...$(NC)"; \
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v$(LINT_VERSION); \
golangci-lint run; \
fi
format: ## Formate le code Go
@echo "$(GREEN)🎨 Formatage du code...$(NC)"
@go fmt ./...
@if command -v goimports >/dev/null 2>&1; then \
find . -name "*.go" -not -path "./vendor/*" | xargs goimports -w; \
else \
echo "$(YELLOW)⚠️ goimports non installé. Installation...$(NC)"; \
go install golang.org/x/tools/cmd/goimports@latest; \
find . -name "*.go" -not -path "./vendor/*" | xargs goimports -w; \
fi
@echo "$(GREEN)✅ Code formaté$(NC)"
vet: ## Exécute go vet
@echo "$(GREEN)🔍 Vérification avec go vet...$(NC)"
@go vet ./...
# Dépendances
deps: ## Installe les dépendances
@echo "$(GREEN)📦 Installation des dépendances...$(NC)"
@go mod download
@go mod tidy
@echo "$(GREEN)✅ Dépendances installées$(NC)"
install: ## Installe l'application
@echo "$(GREEN)📦 Installation de l'application...$(NC)"
@go install ./cmd/modern-server/main.go
@echo "$(GREEN)✅ Application installée$(NC)"
# Nettoyage
clean: ## Nettoie les fichiers générés
@echo "$(GREEN)🧹 Nettoyage...$(NC)"
@rm -rf bin/
@rm -f coverage.out coverage.html
@go clean
@echo "$(GREEN)✅ Nettoyage terminé$(NC)"
# Exécution
run: build ## Compile et exécute l'application
@echo "$(GREEN)🚀 Démarrage de l'application...$(NC)"
@./bin/$(BINARY_NAME)
dev: ## Exécute l'application en mode développement
@echo "$(GREEN)🚀 Mode développement...$(NC)"
@go run ./cmd/modern-server/main.go
# Docker
docker-build: ## Construit l'image Docker
@echo "$(GREEN)🐳 Construction de l'image Docker...$(NC)"
@docker build -t $(DOCKER_IMAGE):$(DOCKER_TAG) .
@echo "$(GREEN)✅ Image Docker construite: $(DOCKER_IMAGE):$(DOCKER_TAG)$(NC)"
docker-run: docker-build ## Construit et exécute l'image Docker
@echo "$(GREEN)🐳 Exécution de l'image Docker...$(NC)"
@docker run -p 8080:8080 $(DOCKER_IMAGE):$(DOCKER_TAG)
# Outils de développement
install-tools: ## Installe les outils de développement
@echo "$(GREEN)🛠️ Installation des outils de développement...$(NC)"
@go install golang.org/x/tools/cmd/goimports@latest
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@v$(LINT_VERSION)
@go install github.com/securecodewarrior/gosec/v2/cmd/gosec@latest
@go install honnef.co/go/tools/cmd/staticcheck@latest
@echo "$(GREEN)✅ Outils installés$(NC)"
# Sécurité
security: ## Exécute les vérifications de sécurité
@echo "$(GREEN)🔒 Vérifications de sécurité...$(NC)"
@if command -v gosec >/dev/null 2>&1; then \
gosec ./...; \
else \
echo "$(YELLOW)⚠️ gosec non installé. Installation...$(NC)"; \
go install github.com/securecodewarrior/gosec/v2/cmd/gosec@latest; \
gosec ./...; \
fi
# Performance
benchmark: ## Exécute les benchmarks
@echo "$(GREEN)⚡ Exécution des benchmarks...$(NC)"
@go test -bench=. ./...
# Documentation
docs: ## Génère la documentation
@echo "$(GREEN)📚 Génération de la documentation...$(NC)"
@go doc -all ./... > docs.txt
@echo "$(GREEN)✅ Documentation générée: docs.txt$(NC)"
# Scripts personnalisés
cleanup: ## Exécute le script de nettoyage
@echo "$(GREEN)🧹 Exécution du script de nettoyage...$(NC)"
@./scripts/cleanup-go.sh
# CI/CD
ci: deps lint test build ## Pipeline CI complet
@echo "$(GREEN)✅ Pipeline CI terminé$(NC)"
# Déploiement
deploy-staging: build-linux ## Déploie en staging
@echo "$(GREEN)🚀 Déploiement en staging...$(NC)"
@echo "$(YELLOW)⚠️ Déploiement en staging non implémenté$(NC)"
deploy-production: build-linux ## Déploie en production
@echo "$(GREEN)🚀 Déploiement en production...$(NC)"
@echo "$(YELLOW)⚠️ Déploiement en production non implémenté$(NC)"
# Monitoring
health: ## Vérifie la santé de l'application
@echo "$(GREEN)🏥 Vérification de la santé...$(NC)"
@curl -f http://localhost:8080/health || echo "$(RED)❌ Application non accessible$(NC)"
# Base de données
migrate: ## Exécute les migrations de base de données
@echo "$(GREEN)🗄️ Exécution des migrations...$(NC)"
@go run cmd/migrate_tool/main.go
@echo "$(GREEN)✅ Migrations terminées$(NC)"
db-migrate: migrate ## Alias pour migrate
db-seed: ## Peuple la base de données avec des données de test
@echo "$(GREEN)🌱 Peuplement de la base de données...$(NC)"
@echo "$(YELLOW)⚠️ Seeding non implémenté$(NC)"
# Par défaut
.DEFAULT_GOAL := help