veza/scripts/validate-feature.sh
2025-12-03 22:56:50 +01:00

243 lines
7 KiB
Bash
Executable file

#!/bin/bash
# Script de validation automatique pour les features
# Usage: ./scripts/validate-feature.sh [feature-name]
set -e
FEATURE_NAME="${1:-unknown}"
VALIDATION_DIR="docs/validations"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
VALIDATION_FILE="${VALIDATION_DIR}/${FEATURE_NAME}_${TIMESTAMP}.md"
# Couleurs pour l'output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}🔍 Validation de la feature: ${FEATURE_NAME}${NC}"
echo ""
# Créer le répertoire de validation si nécessaire
mkdir -p "${VALIDATION_DIR}"
# Fonction pour vérifier si une commande existe
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Fonction pour vérifier le statut d'un service
check_service() {
local service=$1
local port=$2
if command_exists curl; then
if curl -s "http://localhost:${port}/api/v1/health" > /dev/null 2>&1; then
echo -e "${GREEN}${service} est accessible sur le port ${port}${NC}"
return 0
else
echo -e "${RED}${service} n'est pas accessible sur le port ${port}${NC}"
return 1
fi
else
echo -e "${YELLOW}⚠️ curl n'est pas installé, impossible de vérifier ${service}${NC}"
return 1
fi
}
# Fonction pour vérifier les tests
check_tests() {
local test_type=$1
local test_command=$2
echo -e "${YELLOW}🧪 Exécution des tests ${test_type}...${NC}"
if eval "$test_command" > /dev/null 2>&1; then
echo -e "${GREEN}✅ Tests ${test_type} passent${NC}"
return 0
else
echo -e "${RED}❌ Tests ${test_type} échouent${NC}"
return 1
fi
}
# Fonction pour vérifier la compilation
check_compilation() {
local project=$1
local compile_command=$2
echo -e "${YELLOW}🔨 Vérification de la compilation ${project}...${NC}"
if eval "$compile_command" > /dev/null 2>&1; then
echo -e "${GREEN}${project} compile sans erreurs${NC}"
return 0
else
echo -e "${RED}${project} ne compile pas${NC}"
return 1
fi
}
# Fonction pour vérifier les linters
check_linter() {
local project=$1
local linter_command=$2
echo -e "${YELLOW}🔍 Vérification du linter ${project}...${NC}"
if eval "$linter_command" > /dev/null 2>&1; then
echo -e "${GREEN}${project} passe le linter${NC}"
return 0
else
echo -e "${RED}${project} ne passe pas le linter${NC}"
return 1
fi
}
# Initialiser le fichier de validation
cat > "${VALIDATION_FILE}" << EOF
# Validation: ${FEATURE_NAME}
**Date**: $(date)
**Validateur**: Automatique (script)
## Résultats de validation
EOF
# Vérifications Backend
echo -e "\n${YELLOW}📦 Vérifications Backend${NC}"
echo ""
BACKEND_OK=true
# Vérifier la compilation Go
if check_compilation "Backend Go" "cd veza-backend-api && go build -o /dev/null ./..."; then
echo "- [x] Backend compile sans erreurs" >> "${VALIDATION_FILE}"
else
echo "- [ ] Backend compile sans erreurs" >> "${VALIDATION_FILE}"
BACKEND_OK=false
fi
# Vérifier le linter Go
if check_linter "Backend Go" "cd veza-backend-api && golangci-lint run --timeout=5m" 2>/dev/null; then
echo "- [x] Backend passe le linter" >> "${VALIDATION_FILE}"
else
echo "- [ ] Backend passe le linter (optionnel)" >> "${VALIDATION_FILE}"
fi
# Vérifier les tests Go
if check_tests "Backend" "cd veza-backend-api && go test ./... -short"; then
echo "- [x] Tests backend passent" >> "${VALIDATION_FILE}"
else
echo "- [ ] Tests backend passent" >> "${VALIDATION_FILE}"
BACKEND_OK=false
fi
# Vérifier que le backend est accessible
if check_service "Backend API" "8080"; then
echo "- [x] Backend API accessible" >> "${VALIDATION_FILE}"
else
echo "- [ ] Backend API accessible" >> "${VALIDATION_FILE}"
BACKEND_OK=false
fi
# Vérifications Frontend
echo -e "\n${YELLOW}🎨 Vérifications Frontend${NC}"
echo ""
FRONTEND_OK=true
# Vérifier la compilation TypeScript
if check_compilation "Frontend" "cd apps/web && npm run build" 2>/dev/null; then
echo "- [x] Frontend compile sans erreurs" >> "${VALIDATION_FILE}"
else
echo "- [ ] Frontend compile sans erreurs" >> "${VALIDATION_FILE}"
FRONTEND_OK=false
fi
# Vérifier le linter TypeScript
if check_linter "Frontend" "cd apps/web && npm run lint" 2>/dev/null; then
echo "- [x] Frontend passe le linter" >> "${VALIDATION_FILE}"
else
echo "- [ ] Frontend passe le linter (optionnel)" >> "${VALIDATION_FILE}"
fi
# Vérifier les tests Frontend
if check_tests "Frontend" "cd apps/web && npm test -- --passWithNoTests" 2>/dev/null; then
echo "- [x] Tests frontend passent" >> "${VALIDATION_FILE}"
else
echo "- [ ] Tests frontend passent" >> "${VALIDATION_FILE}"
FRONTEND_OK=false
fi
# Vérifier que le frontend est accessible
if check_service "Frontend" "3000"; then
echo "- [x] Frontend accessible" >> "${VALIDATION_FILE}"
else
echo "- [ ] Frontend accessible" >> "${VALIDATION_FILE}"
FRONTEND_OK=false
fi
# Vérifications Services
echo -e "\n${YELLOW}🔧 Vérifications Services${NC}"
echo ""
SERVICES_OK=true
# Vérifier PostgreSQL
if command_exists psql; then
if psql -h localhost -U veza_user -d veza_db -c "SELECT 1;" > /dev/null 2>&1; then
echo -e "${GREEN}✅ PostgreSQL est accessible${NC}"
echo "- [x] PostgreSQL accessible" >> "${VALIDATION_FILE}"
else
echo -e "${RED}❌ PostgreSQL n'est pas accessible${NC}"
echo "- [ ] PostgreSQL accessible" >> "${VALIDATION_FILE}"
SERVICES_OK=false
fi
else
echo -e "${YELLOW}⚠️ psql n'est pas installé, impossible de vérifier PostgreSQL${NC}"
echo "- [ ] PostgreSQL accessible (psql non disponible)" >> "${VALIDATION_FILE}"
fi
# Vérifier Redis
if check_service "Redis" "6379"; then
echo "- [x] Redis accessible" >> "${VALIDATION_FILE}"
else
echo "- [ ] Redis accessible" >> "${VALIDATION_FILE}"
SERVICES_OK=false
fi
# Résumé
echo -e "\n${YELLOW}📊 Résumé${NC}"
echo ""
cat >> "${VALIDATION_FILE}" << EOF
## Résumé
- Backend: $([ "$BACKEND_OK" = true ] && echo "✅ OK" || echo "❌ ÉCHEC")
- Frontend: $([ "$FRONTEND_OK" = true ] && echo "✅ OK" || echo "❌ ÉCHEC")
- Services: $([ "$SERVICES_OK" = true ] && echo "✅ OK" || echo "❌ ÉCHEC")
## Notes
⚠️ **IMPORTANT**: Cette validation automatique ne remplace PAS la validation manuelle dans le navigateur.
Vous DEVEZ tester la feature manuellement avant de la marquer comme complétée.
Consultez \`docs/ORIGIN/ORIGIN_FEATURE_VALIDATION_STRATEGY.md\` pour la checklist complète.
EOF
if [ "$BACKEND_OK" = true ] && [ "$FRONTEND_OK" = true ] && [ "$SERVICES_OK" = true ]; then
echo -e "${GREEN}✅ Toutes les vérifications automatiques sont passées${NC}"
echo -e "${YELLOW}⚠️ N'oubliez pas de tester manuellement dans le navigateur !${NC}"
echo ""
echo "Fichier de validation créé: ${VALIDATION_FILE}"
exit 0
else
echo -e "${RED}❌ Certaines vérifications ont échoué${NC}"
echo ""
echo "Fichier de validation créé: ${VALIDATION_FILE}"
exit 1
fi