#!/bin/bash # Script pour exécuter les tests un par un et calculer la couverture totale # Version ultra-légère pour éviter les problèmes de RAM set +e # Continuer même en cas d'erreur BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$BASE_DIR" COVERAGE_DIR="coverage_groups" TOTAL_COVERAGE="coverage_total.out" # Créer le dossier pour les fichiers de couverture mkdir -p "$COVERAGE_DIR" rm -f "$COVERAGE_DIR"/*.out echo "📦 Récupération de la liste des packages..." PACKAGES=$(go list ./internal/... 2>/dev/null) TOTAL=$(echo "$PACKAGES" | wc -l) echo " Total: $TOTAL packages" echo "" # Compteurs SUCCESS=0 FAILED=0 NO_TESTS=0 PACKAGE_NUM=0 echo "🧪 Exécution des tests package par package..." echo "" for pkg in $PACKAGES; do PACKAGE_NUM=$((PACKAGE_NUM + 1)) PKG_NAME=$(basename "$pkg") echo "[$PACKAGE_NUM/$TOTAL] Testing $PKG_NAME..." COVERAGE_FILE="$COVERAGE_DIR/$(echo "$pkg" | tr '/' '_').out" # Exécuter les tests pour ce package uniquement (avec timeout court) if timeout 30 go test -coverprofile="$COVERAGE_FILE" -short "$pkg" 2>&1 | grep -q "PASS\|FAIL\|ok\|FAIL"; then if [ -f "$COVERAGE_FILE" ] && [ -s "$COVERAGE_FILE" ]; then SUCCESS=$((SUCCESS + 1)) echo " ✅ OK" else # Vérifier si c'est parce qu'il n'y a pas de tests if go test -short "$pkg" 2>&1 | grep -q "no test files"; then NO_TESTS=$((NO_TESTS + 1)) echo " ⚠️ Pas de tests" else FAILED=$((FAILED + 1)) echo " ❌ Échec" fi fi else FAILED=$((FAILED + 1)) echo " ❌ Échec" fi # Nettoyer après chaque package pour libérer la mémoire go clean -testcache 2>/dev/null || true # Petite pause sleep 0.5 done echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📊 Résumé" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " ✅ Réussis: $SUCCESS" echo " ❌ Échoués: $FAILED" echo " ⚠️ Sans tests: $NO_TESTS" echo " 📦 Total: $TOTAL" echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📊 Combinaison des fichiers de couverture..." echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" # Compter les fichiers de couverture valides COVERAGE_FILES=$(find "$COVERAGE_DIR" -name "*.out" -type f -size +0 2>/dev/null | wc -l) echo " Fichiers de couverture: $COVERAGE_FILES" # Combiner tous les fichiers de couverture valides if [ $COVERAGE_FILES -gt 0 ]; then echo "mode: set" > "$TOTAL_COVERAGE" for file in "$COVERAGE_DIR"/*.out; do if [ -f "$file" ] && [ -s "$file" ]; then # Ignorer la première ligne (mode: set) de chaque fichier tail -n +2 "$file" >> "$TOTAL_COVERAGE" 2>/dev/null || true fi done echo "✅ Couverture totale générée: $TOTAL_COVERAGE" # Calculer le pourcentage de couverture echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📈 Statistiques de couverture" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" if [ -f "$TOTAL_COVERAGE" ] && [ -s "$TOTAL_COVERAGE" ]; then go tool cover -func="$TOTAL_COVERAGE" 2>/dev/null | tail -1 echo "" echo "Pour voir le rapport HTML:" echo " go tool cover -html=$TOTAL_COVERAGE" else echo "❌ Aucun fichier de couverture valide généré" fi else echo "❌ Aucun fichier de couverture généré" fi