#!/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