269 lines
8.5 KiB
Bash
269 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}"
|