Git:Release Report
by atournayre
Nom de la release pour le fichier (optionnel)
Skill Details
Repository Files
1 file in this skill directory
name: git:release-report description: Génère un rapport HTML d'analyse d'impact entre deux branches argument-hint: [nom-release] version: 1.0.0 license: MIT arguments:
- name: branche-source description: Branche source à analyser (ex release/v27.0.0) required: true
- name: branche-cible description: Branche de référence (ex main ou develop) required: true
- name: nom-release description: Nom de la release pour le fichier (optionnel) required: false
Configuration de sortie
Instructions à Exécuter
IMPORTANT : Exécute ce workflow étape par étape :
IMPORTANT : Cette skill génère un rapport HTML et nécessite un format de sortie spécifique.
Lis le frontmatter de cette skill. Si un champ output-style est présent, exécute immédiatement :
/output-style <valeur-du-champ>
Note : Une fois que le champ output-style sera supporté nativement par Claude Code, cette instruction pourra être supprimée.
Générer rapport d'analyse de release
Génère un rapport HTML détaillé comparant deux branches pour analyser l'impact d'une release.
Usage
/git:release-report <branche-source> <branche-cible> [nom-release]
Exemples :
/git:release-report release/v27.0.0 main/git:release-report release/v27.0.0 develop v27.0.0/git:release-report feature/new-module main "Module XYZ"
Description
Cette commande génère un rapport HTML orienté Product Owner qui analyse :
- Statistiques globales : fichiers modifiés, lignes ajoutées/supprimées, commits
- Répartition par type de fichier : PHP, Twig, JS, etc.
- Fonctionnalités principales : extraction depuis les commits
- Impact métier : par domaine fonctionnel
- Qualité & maintenabilité : évolution du code
Le rapport est généré dans REPORT_PATH/impact_<nom-release>.html
Variables
REPORT_PATH: .claude/reports
Variables à extraire des arguments :
$BRANCH_SOURCE: Branche source à analyser (ex: release/v27.0.0)$BRANCH_TARGET: Branche de référence (ex: main ou develop)$RELEASE_NAME: Nom de la release pour le fichier (ex: v27.0.0)
Si $RELEASE_NAME n'est pas fourni, utiliser le nom de $BRANCH_SOURCE en retirant le préfixe "release/"
Workflow
0. Vérification des arguments obligatoires
AVANT TOUTE EXÉCUTION, vérifier que les arguments obligatoires sont fournis :
-
Si
$BRANCH_SOURCEest manquant :- Utiliser
AskUserQuestionpour demander la branche source - Question : "Quelle est la branche source à analyser ?"
- Proposer les branches récentes de type
release/*oufeature/*
- Utiliser
-
Si
$BRANCH_TARGETest manquant :- Utiliser
AskUserQuestionpour demander la branche cible - Question : "Quelle est la branche de référence ?"
- Options suggérées :
main,develop,master
- Utiliser
Ne pas continuer tant que les deux arguments obligatoires ne sont pas fournis.
1. Validation des paramètres
# Vérifier que les branches existent
git rev-parse --verify $BRANCH_SOURCE
git rev-parse --verify $BRANCH_TARGET
# Vérifier qu'il y a des différences
DIFF_COUNT=$(git rev-list --count $BRANCH_TARGET..$BRANCH_SOURCE)
if [ $DIFF_COUNT -eq 0 ]; then
echo "Aucune différence entre les branches"
exit 1
fi
2. Collecte des statistiques git
Exécuter les commandes suivantes en parallèle :
# Statistiques globales
git diff --stat $BRANCH_TARGET..$BRANCH_SOURCE | tail -1
# Nombre total de fichiers modifiés et détails lignes
git diff --numstat $BRANCH_TARGET..$BRANCH_SOURCE | \
awk '{files++; added+=$1; deleted+=$2} END {print files, added, deleted}'
# Répartition par type de fichier
git diff --numstat $BRANCH_TARGET..$BRANCH_SOURCE | python3 -c "
import sys
from collections import defaultdict
stats = defaultdict(lambda: {'count': 0, 'added': 0, 'deleted': 0})
for line in sys.stdin:
parts = line.strip().split('\t')
if len(parts) < 3:
continue
added = int(parts[0]) if parts[0] != '-' else 0
deleted = int(parts[1]) if parts[1] != '-' else 0
path = parts[2]
ext = 'autre'
if path.endswith('.php'):
ext = 'php'
elif path.endswith('.twig'):
ext = 'twig'
elif path.endswith(('.yml', '.yaml')):
ext = 'yaml'
elif path.endswith('.js'):
ext = 'js'
elif path.endswith('.scss'):
ext = 'scss'
elif path.endswith('.md'):
ext = 'md'
elif path.endswith('.json'):
ext = 'json'
elif path.endswith('.sh'):
ext = 'sh'
stats[ext]['count'] += 1
stats[ext]['added'] += added
stats[ext]['deleted'] += deleted
stats[ext]['total'] = stats[ext]['added'] + stats[ext]['deleted']
for ext in sorted(stats.items(), key=lambda x: x[1]['total'], reverse=True):
name = ext[0]
data = ext[1]
print(f'{name}|{data[\"count\"]}|{data[\"added\"]}|{data[\"deleted\"]}|{data[\"total\"]}')
"
# Types de modifications (A/M/D/R)
git diff --name-status $BRANCH_TARGET..$BRANCH_SOURCE | cut -f1 | sort | uniq -c
# Nombre de commits
git rev-list --count $BRANCH_TARGET..$BRANCH_SOURCE
# Total fichiers dans la branche cible
git ls-tree -r $BRANCH_TARGET --name-only | wc -l
# Top commits avec features/fixes
git log $BRANCH_TARGET..$BRANCH_SOURCE --oneline --no-merges | \
grep -E "(feat|feature|✨|🚀|📝|🐛|fix|♻️|refactor)" | head -50
3. Analyse des domaines fonctionnels
Analyser les commits pour identifier les domaines principaux impactés :
- Grouper par préfixe de commit (AVENANT, DOSSIER, APF, etc.)
- Identifier les patterns récurrents
- Extraire les fonctionnalités majeures avec leur impact
4. Génération du rapport HTML
Utiliser le template suivant et remplir avec les données collectées :
Structure du rapport :
-
Header avec executive summary
- Nom de la release
- Résumé en 2-3 phrases
- Chiffres clés (% code modifié, commits, variation nette)
-
KPI Grid (4 indicateurs visuels)
- % du code modifié
- Nombre de commits
- Variation nette (simplification/ajout)
- Domaine principal (ex: "70% focus AVENANTS")
-
Fonctionnalités principales (cards avec impact)
- Impact Très élevé (rouge)
- Impact Élevé (orange)
- Impact Moyen (jaune)
- Impact Faible (vert)
-
Corrections majeures
- Liste des bugs corrigés
-
Qualité & Maintenabilité
- Code simplifié
- Documentation
- Refactoring
- Interface
-
Vue d'ensemble technique
- Chart bars par type de fichier
- Métrique périmètre impacté
-
Impact business (4 axes)
- Gestion administrative
- Communication
- Performance
- Sécurité
Style CSS :
- Gradient violet (#667eea → #764ba2)
- Cards avec border-left coloré selon impact
- Progress bars animées
- KPI boxes avec fond dégradé
- Design responsive
5. Sauvegarde du fichier
OUTPUT_FILE="REPORT_PATH/impact_${RELEASE_NAME}.html"
mkdir -p REPORT_PATH
# Écrire le contenu HTML généré
echo "Rapport généré : $OUTPUT_FILE"
Format de sortie
Le rapport doit être :
- Orienté Product Owner : focus sur l'impact métier, pas les détails techniques
- Visuel : KPI, charts, couleurs par niveau d'impact
- Actionnable : lister les features, bugs corrigés, améliorations
- Comparable : même structure pour toutes les releases
Règles importantes
- NE PAS utiliser de termes techniques obscurs
- TOUJOURS expliquer l'impact utilisateur
- GROUPER les changements par domaine fonctionnel
- QUANTIFIER l'impact (%, nombre, ratio)
- PRIORISER par impact métier (Très élevé → Faible)
Exemple d'exécution
$ /git:release-report release/v27.0.0 main
Analyse de release/v27.0.0 vs main...
✓ Collecte statistiques git
✓ Analyse types de fichiers
✓ Extraction fonctionnalités
✓ Génération rapport HTML
Rapport généré : REPORT_PATH/impact_v27.0.0.html
Résumé :
- 1 250 fichiers modifiés (17.5% du codebase)
- 45 320 lignes ajoutées, 38 100 lignes supprimées
- +7 220 lignes nettes (+10.2%)
- 780 commits
- Focus principal : NOTIFICATIONS (65%)
Notes
- Le rapport est auto-suffisant (HTML avec CSS inline)
- Compatible tous navigateurs modernes
- Peut être imprimé ou converti en PDF
- Les couleurs suivent le design system du projet
Related Skills
Attack Tree Construction
Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.
Grafana Dashboards
Create and manage production Grafana dashboards for real-time visualization of system and application metrics. Use when building monitoring dashboards, visualizing metrics, or creating operational observability interfaces.
Matplotlib
Foundational plotting library. Create line plots, scatter, bar, histograms, heatmaps, 3D, subplots, export PNG/PDF/SVG, for scientific visualization and publication figures.
Scientific Visualization
Create publication figures with matplotlib/seaborn/plotly. Multi-panel layouts, error bars, significance markers, colorblind-safe, export PDF/EPS/TIFF, for journal-ready scientific plots.
Seaborn
Statistical visualization. Scatter, box, violin, heatmaps, pair plots, regression, correlation matrices, KDE, faceted plots, for exploratory analysis and publication figures.
Shap
Model interpretability and explainability using SHAP (SHapley Additive exPlanations). Use this skill when explaining machine learning model predictions, computing feature importance, generating SHAP plots (waterfall, beeswarm, bar, scatter, force, heatmap), debugging models, analyzing model bias or fairness, comparing models, or implementing explainable AI. Works with tree-based models (XGBoost, LightGBM, Random Forest), deep learning (TensorFlow, PyTorch), linear models, and any black-box model
Pydeseq2
Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.
Query Writing
For writing and executing SQL queries - from simple single-table queries to complex multi-table JOINs and aggregations
Pydeseq2
Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.
Scientific Visualization
Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib/seaborn/plotly with publication styles. For quick exploration use seaborn or plotly directly.
