veza/scripts/archive/generate-weekly-report.sh
2025-12-12 21:34:34 -05:00

268 lines
8.5 KiB
Bash

#!/bin/bash
# Script de génération du rapport hebdomadaire
# Génère automatiquement un rapport de progression pour la semaine
set -e
# Configuration
REPORTS_DIR="REPORTS"
TEMPLATE_DIR="templates"
CURRENT_WEEK=$(date +%Y-W%U)
CURRENT_DATE=$(date +%Y-%m-%d)
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
echo -e "${CYAN}📊 Génération du rapport hebdomadaire pour la semaine ${CURRENT_WEEK}${NC}"
# Créer le répertoire des rapports s'il n'existe pas
mkdir -p "$REPORTS_DIR"
# Nom du fichier de rapport
REPORT_FILE="$REPORTS_DIR/weekly_${CURRENT_WEEK}.md"
# Fonction pour compter les tâches dans CURSOR_TODO.md
count_tasks() {
local section="$1"
local file="CURSOR_TODO.md"
if [ ! -f "$file" ]; then
echo "0"
return
fi
case "$section" in
"done")
grep -c "^- \[x\]" "$file" || echo "0"
;;
"in_progress")
grep -c "^- \[ \].*NOW\|En cours" "$file" || echo "0"
;;
"blocked")
grep -c "BLOCKED\|Bloqué" "$file" || echo "0"
;;
"total")
grep -c "^- \[" "$file" || echo "0"
;;
*)
echo "0"
;;
esac
}
# Fonction pour obtenir les métriques du projet
get_project_metrics() {
echo "## 📊 Métriques du Projet"
echo ""
echo "### Code"
echo "- **Lignes de code** : $(find . -name '*.go' -o -name '*.rs' -o -name '*.ts' -o -name '*.tsx' | xargs wc -l | tail -1 | awk '{print $1}')"
echo "- **Fichiers Go** : $(find . -name '*.go' | wc -l)"
echo "- **Fichiers Rust** : $(find . -name '*.rs' | wc -l)"
echo "- **Fichiers TypeScript** : $(find . -name '*.ts' -o -name '*.tsx' | wc -l)"
echo "- **Fichiers Markdown** : $(find . -name '*.md' | wc -l)"
echo ""
echo "### Tests"
if [ -f "veza-backend-api/coverage.out" ]; then
echo "- **Couverture Backend** : $(go tool cover -func=veza-backend-api/coverage.out | tail -1 | awk '{print $3}')"
else
echo "- **Couverture Backend** : Non disponible"
fi
echo ""
echo "### Dépendances"
echo "- **Modules Go** : $(find . -name 'go.mod' | wc -l)"
echo "- **Crates Rust** : $(find . -name 'Cargo.toml' | wc -l)"
echo "- **Packages Node** : $(find . -name 'package.json' | wc -l)"
echo ""
}
# Fonction pour obtenir les commits de la semaine
get_weekly_commits() {
echo "## 📝 Commits de la Semaine"
echo ""
echo "### Derniers commits"
echo '```bash'
git log --oneline --since="1 week ago" --pretty=format:"%h %ad %s" --date=short | head -10
echo '```'
echo ""
echo "### Statistiques des commits"
echo "- **Total commits** : $(git log --since="1 week ago" --oneline | wc -l)"
echo "- **Auteurs** : $(git log --since="1 week ago" --pretty=format:"%an" | sort -u | wc -l)"
echo "- **Fichiers modifiés** : $(git diff --name-only HEAD~7 HEAD | wc -l)"
echo ""
}
# Fonction pour obtenir les métriques des agents
get_agents_metrics() {
echo "## 🤖 Métriques des Agents IA"
echo ""
echo "### Statut des Agents"
for agent in planner researcher implementer qa docs maintainer; do
if [ -f ".cursor/agents/$agent/status.txt" ]; then
status=$(cat ".cursor/agents/$agent/status.txt")
echo "- **$agent** : $status"
else
echo "- **$agent** : Non actif"
fi
done
echo ""
}
# Générer le rapport
{
echo "# 📊 Rapport Hebdomadaire - Semaine ${CURRENT_WEEK}"
echo ""
echo "**Période** : $(date -d 'monday' +%Y-%m-%d) - $(date -d 'sunday' +%Y-%m-%d)"
echo "**Généré le** : ${CURRENT_DATE}"
echo "**Généré par** : Script automatique"
echo ""
echo "## 🎯 Vue d'Ensemble"
echo ""
local total_tasks=$(count_tasks "total")
local done_tasks=$(count_tasks "done")
local in_progress_tasks=$(count_tasks "in_progress")
local blocked_tasks=$(count_tasks "blocked")
echo "### Métriques Clés"
echo "- **Tâches Total** : ${total_tasks}"
echo "- **Tâches Terminées** : ${done_tasks} ($(( done_tasks * 100 / total_tasks ))%)"
echo "- **Tâches En Cours** : ${in_progress_tasks}"
echo "- **Tâches Bloquées** : ${blocked_tasks}"
echo ""
if [ $done_tasks -gt 0 ]; then
echo "### Tâches Terminées Cette Semaine"
echo ""
# Extraire les tâches terminées de cette semaine
grep -A 1 "✅ 2024-" CURSOR_TODO.md | grep -v "✅ 2024-" | head -10 | while read -r line; do
if [ -n "$line" ]; then
echo "- $line"
fi
done
echo ""
fi
if [ $in_progress_tasks -gt 0 ]; then
echo "### Tâches En Cours"
echo ""
grep -A 1 "NOW\|En cours" CURSOR_TODO.md | grep -v "NOW\|En cours" | head -5 | while read -r line; do
if [ -n "$line" ]; then
echo "- $line"
fi
done
echo ""
fi
if [ $blocked_tasks -gt 0 ]; then
echo "### Tâches Bloquées"
echo ""
grep -A 1 "BLOCKED\|Bloqué" CURSOR_TODO.md | grep -v "BLOCKED\|Bloqué" | head -5 | while read -r line; do
if [ -n "$line" ]; then
echo "- $line"
fi
done
echo ""
fi
get_project_metrics
get_weekly_commits
get_agents_metrics
echo "## 🎯 Objectifs Semaine Prochaine"
echo ""
echo "### Priorité 1 (P0)"
echo "- [ ] Stabiliser WebSocket chat"
echo "- [ ] Implémenter OAuth2 Google"
echo "- [ ] Ajouter tests E2E"
echo ""
echo "### Priorité 2 (P1)"
echo "- [ ] Implémenter OAuth2 GitHub"
echo "- [ ] Optimiser performance streaming"
echo "- [ ] Améliorer monitoring"
echo ""
echo "### Priorité 3 (P2)"
echo "- [ ] Documenter API"
echo "- [ ] Sécuriser communications"
echo "- [ ] Améliorer UI/UX"
echo ""
echo "## 📈 Tendances"
echo ""
echo "### Progression"
echo "- **Vélocité** : $done_tasks tâches/semaine"
echo "- **Efficacité** : $(( done_tasks * 100 / (done_tasks + in_progress_tasks) ))%"
echo "- **Blocages** : $(( blocked_tasks * 100 / total_tasks ))%"
echo ""
echo "## 🚨 Alertes"
echo ""
if [ $blocked_tasks -gt 2 ]; then
echo "⚠️ **Trop de tâches bloquées** : $blocked_tasks tâches en attente"
fi
if [ $in_progress_tasks -gt 5 ]; then
echo "⚠️ **Trop de tâches en cours** : $in_progress_tasks tâches simultanées"
fi
if [ $done_tasks -lt 3 ]; then
echo "⚠️ **Faible vélocité** : Seulement $done_tasks tâches terminées"
fi
if [ $blocked_tasks -eq 0 ] && [ $in_progress_tasks -le 3 ] && [ $done_tasks -ge 5 ]; then
echo "✅ **Excellent rythme** : Progression constante et efficace"
fi
echo ""
echo "## 📝 Notes"
echo ""
echo "### Succès de la Semaine"
echo "- Documentation dual-track opérationnelle"
echo "- Environnement de développement assisté par IA configuré"
echo "- Pipeline CI/CD complet mis en place"
echo "- Système ADR et agents IA opérationnels"
echo ""
echo "### Défis Identifiés"
echo "- WebSocket chat nécessite stabilisation"
echo "- OAuth2 en cours d'implémentation"
echo "- Tests E2E à ajouter"
echo ""
echo "### Actions Correctives"
echo "1. **Prioriser WebSocket** : Tests et debugging intensifs"
echo "2. **Accélérer OAuth2** : Focus sur Google et GitHub"
echo "3. **Ajouter tests** : Playwright pour E2E"
echo "4. **Monitoring** : Alertes proactives"
echo ""
echo "---"
echo ""
echo "*Rapport généré automatiquement le ${CURRENT_DATE}*"
echo "*Prochain rapport : $(date -d '+1 week' +%Y-%m-%d)*"
} > "$REPORT_FILE"
echo -e "${GREEN}✅ Rapport hebdomadaire généré : ${REPORT_FILE}${NC}"
# Afficher un résumé
echo -e "${BLUE}📋 Résumé du rapport :${NC}"
echo "- Tâches totales : $total_tasks"
echo "- Tâches terminées : $done_tasks"
echo "- Tâches en cours : $in_progress_tasks"
echo "- Tâches bloquées : $blocked_tasks"
echo "- Commits cette semaine : $(git log --since="1 week ago" --oneline | wc -l)"
# Optionnel : ouvrir le rapport
if command -v code &> /dev/null; then
echo -e "${YELLOW}📖 Ouverture du rapport dans VSCode...${NC}"
code "$REPORT_FILE"
fi
echo -e "${GREEN}🎉 Génération du rapport terminée !${NC}"