118 lines
4.4 KiB
Bash
118 lines
4.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Script pour exécuter les tests par groupes et calculer la couverture totale
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
cd "$BASE_DIR"
|
||
|
|
|
||
|
|
# Nombre de packages par groupe (réduit pour éviter les problèmes de RAM)
|
||
|
|
GROUP_SIZE=3
|
||
|
|
COVERAGE_DIR="coverage_groups"
|
||
|
|
TOTAL_COVERAGE="coverage_total.out"
|
||
|
|
|
||
|
|
# Créer le dossier pour les fichiers de couverture par groupe
|
||
|
|
mkdir -p "$COVERAGE_DIR"
|
||
|
|
rm -f "$COVERAGE_DIR"/*.out
|
||
|
|
|
||
|
|
echo "📦 Récupération de la liste des packages..."
|
||
|
|
PACKAGES=$(go list ./internal/...)
|
||
|
|
TOTAL=$(echo "$PACKAGES" | wc -l)
|
||
|
|
echo " Total: $TOTAL packages"
|
||
|
|
|
||
|
|
# Diviser en groupes
|
||
|
|
GROUP_NUM=1
|
||
|
|
CURRENT_GROUP=0
|
||
|
|
CURRENT_PACKAGES=""
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "🧪 Exécution des tests par groupes de $GROUP_SIZE packages..."
|
||
|
|
|
||
|
|
for pkg in $PACKAGES; do
|
||
|
|
CURRENT_PACKAGES="$CURRENT_PACKAGES $pkg"
|
||
|
|
CURRENT_GROUP=$((CURRENT_GROUP + 1))
|
||
|
|
|
||
|
|
if [ $CURRENT_GROUP -ge $GROUP_SIZE ]; then
|
||
|
|
echo ""
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "📦 Groupe $GROUP_NUM ($CURRENT_GROUP packages)"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
|
||
|
|
COVERAGE_FILE="$COVERAGE_DIR/group_${GROUP_NUM}.out"
|
||
|
|
|
||
|
|
# Exécuter les tests pour ce groupe (avec timeout et limite mémoire)
|
||
|
|
if timeout 60 go test -coverprofile="$COVERAGE_FILE" -short $CURRENT_PACKAGES 2>&1; then
|
||
|
|
echo "✅ Groupe $GROUP_NUM terminé"
|
||
|
|
if [ -f "$COVERAGE_FILE" ]; then
|
||
|
|
LINES=$(wc -l < "$COVERAGE_FILE")
|
||
|
|
echo " Couverture: $LINES lignes"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "⚠️ Groupe $GROUP_NUM a des échecs (continuons...)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
GROUP_NUM=$((GROUP_NUM + 1))
|
||
|
|
CURRENT_GROUP=0
|
||
|
|
CURRENT_PACKAGES=""
|
||
|
|
|
||
|
|
# Pause plus longue pour libérer la mémoire
|
||
|
|
sleep 2
|
||
|
|
|
||
|
|
# Nettoyer la mémoire Go si possible
|
||
|
|
go clean -cache -testcache 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Traiter le dernier groupe s'il reste des packages
|
||
|
|
if [ $CURRENT_GROUP -gt 0 ]; then
|
||
|
|
echo ""
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "📦 Groupe $GROUP_NUM ($CURRENT_GROUP packages)"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
|
||
|
|
COVERAGE_FILE="$COVERAGE_DIR/group_${GROUP_NUM}.out"
|
||
|
|
|
||
|
|
if timeout 60 go test -coverprofile="$COVERAGE_FILE" -short $CURRENT_PACKAGES 2>&1; then
|
||
|
|
echo "✅ Groupe $GROUP_NUM terminé"
|
||
|
|
if [ -f "$COVERAGE_FILE" ]; then
|
||
|
|
LINES=$(wc -l < "$COVERAGE_FILE")
|
||
|
|
echo " Couverture: $LINES lignes"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "⚠️ Groupe $GROUP_NUM a des échecs"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "📊 Combinaison des fichiers de couverture..."
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
|
||
|
|
# Combiner tous les fichiers de couverture
|
||
|
|
echo "mode: set" > "$TOTAL_COVERAGE"
|
||
|
|
for file in "$COVERAGE_DIR"/group_*.out; do
|
||
|
|
if [ -f "$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" ]; then
|
||
|
|
go tool cover -func="$TOTAL_COVERAGE" | tail -1
|
||
|
|
echo ""
|
||
|
|
echo "Pour voir le rapport HTML:"
|
||
|
|
echo " go tool cover -html=$TOTAL_COVERAGE"
|
||
|
|
else
|
||
|
|
echo "❌ Aucun fichier de couverture généré"
|
||
|
|
fi
|
||
|
|
|
||
|
|
|