244 lines
7 KiB
Bash
244 lines
7 KiB
Bash
|
|
#!/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
|
||
|
|
|