Initial commit
This commit is contained in:
15
.claude-plugin/plugin.json
Normal file
15
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "github",
|
||||||
|
"description": "Gestion GitHub : issues, PR, analyse d'impact avec skills spécialisés",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"author": {
|
||||||
|
"name": "Aurélien Tournayre",
|
||||||
|
"email": "aurelien.tournayre@gmail.com"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
"./skills"
|
||||||
|
],
|
||||||
|
"commands": [
|
||||||
|
"./commands"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# github
|
||||||
|
|
||||||
|
Gestion GitHub : issues, PR, analyse d'impact avec skills spécialisés
|
||||||
98
commands/fix.md
Normal file
98
commands/fix.md
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
model: claude-sonnet-4-5-20250929
|
||||||
|
allowed-tools: [Bash, Read, Write, Edit, Grep, Glob, Task]
|
||||||
|
description: "Corriger une issue GitHub avec workflow simplifié et efficace"
|
||||||
|
argument-hint: "[issue-number]"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Correction d'Issue GitHub
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
Corriger une issue GitHub de manière structurée et efficace, en se concentrant sur l'essentiel.
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
ISSUE_NUMBER: $1 (obligatoire)
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
- Utilise les outils Bash pour les opérations Git et GitHub CLI
|
||||||
|
- Focus sur la résolution rapide et efficace du problème
|
||||||
|
- Applique les standards du projet NEO
|
||||||
|
|
||||||
|
## Relevant Files
|
||||||
|
- Issues GitHub du repository
|
||||||
|
- Code source pertinent selon l'issue
|
||||||
|
- Documentation technique si nécessaire
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
### 1. Analyse de l'issue
|
||||||
|
- Récupérer les détails de l'issue via `gh issue view $ISSUE_NUMBER`
|
||||||
|
- Analyser le problème : type (bug, feature, enhancement), priorité, description
|
||||||
|
- Identifier les fichiers/modules concernés
|
||||||
|
- Vérifier les éventuels liens Sentry pour plus de contexte
|
||||||
|
|
||||||
|
### 2. Préparation de l'environnement
|
||||||
|
- Vérifier le statut git actuel
|
||||||
|
- S'assurer d'être sur la bonne branche de base (develop/main)
|
||||||
|
- Créer une branche de travail : `issue/$ISSUE_NUMBER-{description-courte}`
|
||||||
|
- Exemple : `issue/966-stockage-epuration-historique`
|
||||||
|
|
||||||
|
### 3. Investigation du code
|
||||||
|
- Localiser les fichiers concernés par l'issue
|
||||||
|
- Comprendre le code existant et identifier la cause du problème
|
||||||
|
- Analyser l'impact de la modification sur les autres parties du système
|
||||||
|
- Identifier les dépendances et side-effects potentiels
|
||||||
|
|
||||||
|
### 4. Implémentation de la solution
|
||||||
|
- Implémenter la correction en respectant :
|
||||||
|
- Standards PHP 8.2+ avec typage strict
|
||||||
|
- Conditions Yoda (`null === $value`)
|
||||||
|
- Documentation des exceptions avec `@throws`
|
||||||
|
- Conventions de nommage françaises
|
||||||
|
- Éviter les changements inutiles ou trop larges
|
||||||
|
- Maintenir la cohérence avec l'architecture existante
|
||||||
|
|
||||||
|
### 5. Validation et tests
|
||||||
|
- Exécuter les tests existants : `make run-unit-php`
|
||||||
|
- Ajouter des tests si nécessaire pour couvrir le nouveau code
|
||||||
|
- Vérifier avec PHPStan : ZÉRO erreur acceptée
|
||||||
|
- Tester la solution manuellement si applicable
|
||||||
|
|
||||||
|
### 6. Finalisation
|
||||||
|
- Informer l'utilisateur
|
||||||
|
- Ne pas faire de commit
|
||||||
|
|
||||||
|
## Report
|
||||||
|
- Issue analysée avec titre et type
|
||||||
|
- Branche créée avec nom approprié
|
||||||
|
- Fichiers modifiés avec résumé des changements
|
||||||
|
- Tests exécutés avec résultats
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
- ✅ `ISSUE_NUMBER` doit être fourni et exister sur GitHub
|
||||||
|
- ✅ Branche de travail créée avec convention de nommage
|
||||||
|
- ✅ Solution implémentée respectant les standards
|
||||||
|
- ✅ PHPStan passe sans erreur (CRITIQUE)
|
||||||
|
- ✅ Tests unitaires passent
|
||||||
|
|
||||||
|
## Expertise
|
||||||
|
Standards de qualité NEO :
|
||||||
|
- PHP 8.2+ avec typage strict obligatoire
|
||||||
|
- Conditions Yoda pour toutes les comparaisons
|
||||||
|
- Exceptions documentées avec `@throws`
|
||||||
|
- Nommage en français pour les concepts métier
|
||||||
|
- PHPStan niveau 9 sans erreur
|
||||||
|
- Tests unitaires pour nouveau code
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
```bash
|
||||||
|
# Correction d'un bug
|
||||||
|
/github:fix 966
|
||||||
|
|
||||||
|
# Résultat attendu :
|
||||||
|
# 1. Analyse issue #966 "STOCKAGE - Épuration historique"
|
||||||
|
# 2. Création branche : issue/966-stockage-epuration-historique
|
||||||
|
# 3. Investigation du code de gestion des devis/alertes
|
||||||
|
# 4. Implémentation de l'épuration automatique
|
||||||
|
# 5. Tests et validation PHPStan
|
||||||
|
```
|
||||||
6
commands/impact.md
Normal file
6
commands/impact.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
description: Analyses le détail des modifications git. Fournis 2 rapports d'impact - un rapport métier et un rapport technique. Ajoutes ce rapport à la description de la PR.
|
||||||
|
argument-hint: <pr-number>
|
||||||
|
---
|
||||||
|
|
||||||
|
You must use the Skill tool to invoke the "github-impact" skill with the following arguments.
|
||||||
57
plugin.lock.json
Normal file
57
plugin.lock.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:atournayre/claude-marketplace:github",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "16f6c7c57563658e5638bb836807b6c9332b5538",
|
||||||
|
"treeHash": "0e55622b41e944063011166167336b27bf8f55a7e8a0c882e4dbabaa5581039e",
|
||||||
|
"generatedAt": "2025-11-28T10:13:59.988471Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "github",
|
||||||
|
"description": "Gestion GitHub : issues, PR, analyse d'impact avec skills spécialisés",
|
||||||
|
"version": "1.1.0"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "6957f587f81b1909d110917b387442f1294ef7a0231d895699be4c649e37bdb0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "9f1ca9f04843ecfd8901a30c432e6487d529f2c154a3e47dd47136da963b5924"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/fix.md",
|
||||||
|
"sha256": "ff1004a5ac9681416a48af03a3c616c2a4e57eb54ca510fe3ffa3136594c7145"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/impact.md",
|
||||||
|
"sha256": "4644d3dd63e7c46af7eb0b77960501266de2bb2400027602ed95398dd1d3ff97"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/github-impact/README.md",
|
||||||
|
"sha256": "ec5e61bf492f86fe24a4ba94807ecb526c60bbe61f09ef63574b025bf2dc0885"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/github-impact/SKILL.md",
|
||||||
|
"sha256": "606d49c8cfbca3d6de77377efc3775eb4e8a34758c52afaee18537deb2e281d8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "0e55622b41e944063011166167336b27bf8f55a7e8a0c882e4dbabaa5581039e"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
50
skills/github-impact/README.md
Normal file
50
skills/github-impact/README.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# GitHub Impact Analysis Skill
|
||||||
|
|
||||||
|
Génère automatiquement deux rapports d'impact (métier et technique) pour une PR GitHub et les intègre dans la description.
|
||||||
|
|
||||||
|
## Fonctionnalités
|
||||||
|
|
||||||
|
- Analyse complète des modifications PR
|
||||||
|
- Détection automatique des dépendances (PHP, JS, templates)
|
||||||
|
- Analyse de couverture de tests
|
||||||
|
- Génération de 2 rapports distincts (métier + technique)
|
||||||
|
- Intégration automatique dans la description PR
|
||||||
|
- Sauvegarde locale pour référence
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Via la commande délégante :
|
||||||
|
```bash
|
||||||
|
/github:impact <pr-number>
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou directement via le skill :
|
||||||
|
```bash
|
||||||
|
# Utiliser l'outil Task avec le skill github-impact
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rapports générés
|
||||||
|
|
||||||
|
### Rapport Métier
|
||||||
|
- Vue d'ensemble des changements fonctionnels
|
||||||
|
- Impact utilisateur
|
||||||
|
- Risques identifiés
|
||||||
|
- Recommandations déploiement
|
||||||
|
|
||||||
|
### Rapport Technique
|
||||||
|
- Métriques détaillées (fichiers, lignes, commits)
|
||||||
|
- Analyse par type de fichier
|
||||||
|
- Changements architecturaux
|
||||||
|
- Analyse de sécurité
|
||||||
|
- Couverture de tests
|
||||||
|
|
||||||
|
## Fichiers générés
|
||||||
|
|
||||||
|
- `.analysis-reports/impact_pr_<number>.md` - Rapports combinés
|
||||||
|
- Description PR mise à jour avec marqueurs `<!-- IMPACT-REPORTS-START/END -->`
|
||||||
|
|
||||||
|
## Dépendances
|
||||||
|
|
||||||
|
- `gh` CLI configuré et authentifié
|
||||||
|
- Accès en lecture à la PR
|
||||||
|
- Accès en écriture pour mise à jour description
|
||||||
443
skills/github-impact/SKILL.md
Normal file
443
skills/github-impact/SKILL.md
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
---
|
||||||
|
name: github-impact
|
||||||
|
description: >
|
||||||
|
Génère automatiquement deux rapports d'impact (métier et technique) pour une PR GitHub
|
||||||
|
et les intègre dans la description. Analyse les modifications, dépendances, tests,
|
||||||
|
sécurité et performance.
|
||||||
|
allowed-tools: [Bash, Read, Write, TodoWrite, Grep, Glob]
|
||||||
|
model: claude-opus-4-1-20250805
|
||||||
|
---
|
||||||
|
|
||||||
|
# GitHub PR Impact Analysis Skill
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ARGUMENTS="$ARGUMENTS" # Numéro de PR passé en argument
|
||||||
|
PR_NUMBER=""
|
||||||
|
CURRENT_BRANCH=""
|
||||||
|
BASE_BRANCH=""
|
||||||
|
MODIFIED_FILES=""
|
||||||
|
COMMIT_COUNT=""
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
### Étape 0: Timing
|
||||||
|
```bash
|
||||||
|
START_TIME=$(date +%s)
|
||||||
|
date
|
||||||
|
```
|
||||||
|
|
||||||
|
### Étape 1: Parsing Arguments
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PR_NUMBER="$ARGUMENTS"
|
||||||
|
|
||||||
|
# Validation
|
||||||
|
if [ -z "$PR_NUMBER" ]; then
|
||||||
|
echo "❌ ERREUR: Numéro de PR requis"
|
||||||
|
echo "Usage: /github:impact <pr-number>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Étape 2: TodoWrite Initialisation
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
todos:
|
||||||
|
- content: "Récupérer informations PR"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Récupération des informations PR"
|
||||||
|
- content: "Identifier fichiers modifiés"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Identification des fichiers modifiés"
|
||||||
|
- content: "Analyser dépendances et templates"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Analyse des dépendances et templates"
|
||||||
|
- content: "Analyser tests"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Analyse des tests"
|
||||||
|
- content: "Générer rapport métier"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Génération du rapport métier"
|
||||||
|
- content: "Générer rapport technique"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Génération du rapport technique"
|
||||||
|
- content: "Ajouter rapports à la PR"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Ajout des rapports à la PR"
|
||||||
|
- content: "Sauvegarder localement"
|
||||||
|
status: "pending"
|
||||||
|
activeForm: "Sauvegarde locale"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Étape 3: Récupération Informations PR
|
||||||
|
|
||||||
|
Marquer todo #1 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Récupérer infos PR
|
||||||
|
gh pr view $PR_NUMBER --json number,headRefName,baseRefName,state,title
|
||||||
|
|
||||||
|
# Extraire branches
|
||||||
|
CURRENT_BRANCH=$(gh pr view $PR_NUMBER --json headRefName -q .headRefName)
|
||||||
|
BASE_BRANCH=$(gh pr view $PR_NUMBER --json baseRefName -q .baseRefName)
|
||||||
|
|
||||||
|
# Vérifier existence
|
||||||
|
if [ -z "$CURRENT_BRANCH" ]; then
|
||||||
|
echo "❌ ERREUR: PR #$PR_NUMBER introuvable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Analyse de la PR #$PR_NUMBER"
|
||||||
|
echo " Branche: $CURRENT_BRANCH → $BASE_BRANCH"
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #1 `completed`.
|
||||||
|
|
||||||
|
### Étape 4: Identification Modifications
|
||||||
|
|
||||||
|
Marquer todo #2 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Récupérer diff PR
|
||||||
|
gh pr diff $PR_NUMBER --name-status
|
||||||
|
gh pr diff $PR_NUMBER --stat
|
||||||
|
|
||||||
|
# Liste fichiers modifiés
|
||||||
|
MODIFIED_FILES=$(gh pr diff $PR_NUMBER --name-only)
|
||||||
|
|
||||||
|
# Compter commits
|
||||||
|
COMMIT_COUNT=$(gh pr view $PR_NUMBER --json commits -q '.commits | length')
|
||||||
|
|
||||||
|
echo "📊 Statistiques PR #$PR_NUMBER:"
|
||||||
|
echo " - Fichiers modifiés: $(echo "$MODIFIED_FILES" | wc -l)"
|
||||||
|
echo " - Commits: $COMMIT_COUNT"
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #2 `completed`.
|
||||||
|
|
||||||
|
### Étape 5: Analyse Dépendances et Templates
|
||||||
|
|
||||||
|
Marquer todo #3 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
FILES=$(gh pr diff $PR_NUMBER --name-only)
|
||||||
|
|
||||||
|
# PHP dependencies
|
||||||
|
echo "$FILES" | grep "\.php$" | while read file; do
|
||||||
|
grep "use.*;" "$file" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
# JS/TS dependencies
|
||||||
|
echo "$FILES" | grep -E "\.(js|ts|jsx|tsx)$" | while read file; do
|
||||||
|
grep -E "import|require" "$file" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
# Templates (Twig, Blade, Vue, etc.)
|
||||||
|
TEMPLATE_FILES=$(echo "$FILES" | grep -E "\.(twig|blade\.php|vue|svelte|hbs|handlebars|mustache|ejs|pug|jade)$")
|
||||||
|
if [ -n "$TEMPLATE_FILES" ]; then
|
||||||
|
echo "📄 Templates modifiés:"
|
||||||
|
echo "$TEMPLATE_FILES" | while read file; do
|
||||||
|
echo " - $file"
|
||||||
|
case "$file" in
|
||||||
|
*.twig)
|
||||||
|
grep -E "\{\{|\{%" "$file" 2>/dev/null | head -10 || true
|
||||||
|
;;
|
||||||
|
*.blade.php)
|
||||||
|
grep -E "@[a-zA-Z]+|\{\{" "$file" 2>/dev/null | head -10 || true
|
||||||
|
;;
|
||||||
|
*.vue)
|
||||||
|
grep -E "v-|@|:\w+" "$file" 2>/dev/null | head -10 || true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Styles
|
||||||
|
STYLE_FILES=$(echo "$FILES" | grep -E "\.(css|scss|sass|less|styl)$")
|
||||||
|
if [ -n "$STYLE_FILES" ]; then
|
||||||
|
echo "🎨 Fichiers styles modifiés:"
|
||||||
|
echo "$STYLE_FILES"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Config
|
||||||
|
CONFIG_FILES=$(echo "$FILES" | grep -E "\.(json|yaml|yml|env|ini|conf|xml|toml)$")
|
||||||
|
if [ -n "$CONFIG_FILES" ]; then
|
||||||
|
echo "⚙️ Fichiers config modifiés:"
|
||||||
|
echo "$CONFIG_FILES"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Assets
|
||||||
|
ASSET_FILES=$(echo "$FILES" | grep -E "\.(png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$")
|
||||||
|
if [ -n "$ASSET_FILES" ]; then
|
||||||
|
echo "🖼️ Assets modifiés:"
|
||||||
|
echo "$ASSET_FILES"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #3 `completed`.
|
||||||
|
|
||||||
|
### Étape 6: Analyse Tests
|
||||||
|
|
||||||
|
Marquer todo #4 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier tests ajoutés/modifiés
|
||||||
|
gh pr diff $PR_NUMBER --name-only | grep -E "(test|spec)\.(php|js|ts)$"
|
||||||
|
|
||||||
|
# Vérifier couverture
|
||||||
|
for file in $(gh pr diff $PR_NUMBER --name-only | grep -E "\.(php|js|ts)$"); do
|
||||||
|
basename=$(basename "$file" | sed 's/\.[^.]*$//')
|
||||||
|
find tests/ -name "*${basename}*Test*" 2>/dev/null || echo "⚠️ Pas de test pour $file"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #4 `completed`.
|
||||||
|
|
||||||
|
### Étape 7: Génération Rapport Métier
|
||||||
|
|
||||||
|
Marquer todo #5 `in_progress`.
|
||||||
|
|
||||||
|
Créer fichier `/tmp/impact_business_report.md` avec:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## 📊 Rapport d'Impact Métier
|
||||||
|
|
||||||
|
### Vue d'Ensemble
|
||||||
|
- **Portée**: [N] fichiers sur [N] commits
|
||||||
|
- **Domaines impactés**: [Liste]
|
||||||
|
- **Risque estimé**: 🟢/🟡/🔴
|
||||||
|
|
||||||
|
### Changements Fonctionnels
|
||||||
|
|
||||||
|
#### Nouvelles Fonctionnalités
|
||||||
|
- [Liste]
|
||||||
|
|
||||||
|
#### Améliorations Interface Utilisateur
|
||||||
|
- **Templates**: [Pages/composants]
|
||||||
|
- **Styles**: [Changements visuels]
|
||||||
|
- **Assets**: [Nouvelles images/icônes]
|
||||||
|
|
||||||
|
#### Améliorations Fonctionnelles
|
||||||
|
- [Liste]
|
||||||
|
|
||||||
|
#### Corrections
|
||||||
|
- **Bugs interface**: [Liste]
|
||||||
|
- **Bugs fonctionnels**: [Liste]
|
||||||
|
|
||||||
|
### Impact Utilisateur
|
||||||
|
- **UX**: [Changements visibles]
|
||||||
|
- **Performance**: [Améliorations/dégradations]
|
||||||
|
- **Compatibilité**: [Breaking changes]
|
||||||
|
|
||||||
|
### Risques Identifiés
|
||||||
|
1. [Risque + mitigation]
|
||||||
|
2. [Risque + mitigation]
|
||||||
|
|
||||||
|
### Recommandations
|
||||||
|
- **Tests recommandés**: [Scénarios]
|
||||||
|
- **Communication**: [Points à communiquer]
|
||||||
|
- **Déploiement**: [Stratégie]
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #5 `completed`.
|
||||||
|
|
||||||
|
### Étape 8: Génération Rapport Technique
|
||||||
|
|
||||||
|
Marquer todo #6 `in_progress`.
|
||||||
|
|
||||||
|
Créer fichier `/tmp/impact_technical_report.md` avec:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## 🔧 Rapport d'Impact Technique
|
||||||
|
|
||||||
|
### Métriques
|
||||||
|
- Fichiers: [N]
|
||||||
|
- Ajouts: +[N]
|
||||||
|
- Suppressions: -[N]
|
||||||
|
- Commits: [N]
|
||||||
|
|
||||||
|
### Analyse par Type
|
||||||
|
|
||||||
|
| Type | Fichiers | Ajouts | Suppressions | Impact Métier | Impact Technique |
|
||||||
|
|-----------|----------|--------|--------------|---------------|------------------|
|
||||||
|
| PHP | [N] | +[N] | -[N] | Backend | [Score] |
|
||||||
|
| JS/TS | [N] | +[N] | -[N] | Interface | [Score] |
|
||||||
|
| Templates | [N] | +[N] | -[N] | Interface/UX | Moyen |
|
||||||
|
| CSS/SCSS | [N] | +[N] | -[N] | Apparence | Faible |
|
||||||
|
| Config | [N] | +[N] | -[N] | Infra | Critique |
|
||||||
|
| Assets | [N] | +[N] | -[N] | Visuel | Faible |
|
||||||
|
|
||||||
|
### Changements Architecturaux
|
||||||
|
|
||||||
|
#### Classes/Modules Modifiés
|
||||||
|
- `[Class]`: [Description]
|
||||||
|
|
||||||
|
#### Dépendances
|
||||||
|
##### Ajoutées
|
||||||
|
- [Package]: [Version] - [Raison]
|
||||||
|
|
||||||
|
##### Modifiées
|
||||||
|
- [Package]: [Old] → [New]
|
||||||
|
|
||||||
|
##### Supprimées
|
||||||
|
- [Package]: [Raison]
|
||||||
|
|
||||||
|
### Analyse Sécurité
|
||||||
|
- **Vulnérabilités corrigées**: [Liste]
|
||||||
|
- **Nouveaux vecteurs**: [Analyse]
|
||||||
|
- **Validations ajoutées**: [Liste]
|
||||||
|
|
||||||
|
### Couverture Tests
|
||||||
|
- Tests ajoutés: [N]
|
||||||
|
- Tests modifiés: [N]
|
||||||
|
- Couverture estimée: [%]%
|
||||||
|
- Fichiers non testés: [Liste]
|
||||||
|
|
||||||
|
### Points d'Attention
|
||||||
|
|
||||||
|
1. **Performance**:
|
||||||
|
- [Impact requêtes DB]
|
||||||
|
- [Impact mémoire]
|
||||||
|
- [Impact temps réponse]
|
||||||
|
|
||||||
|
2. **Compatibilité**:
|
||||||
|
- [Breaking changes APIs]
|
||||||
|
- [Changements schéma DB]
|
||||||
|
- [Modifications config]
|
||||||
|
|
||||||
|
3. **Dette Technique**:
|
||||||
|
- [Dette ajoutée]
|
||||||
|
- [Dette remboursée]
|
||||||
|
- [Refactoring nécessaire]
|
||||||
|
|
||||||
|
### Checklist Revue
|
||||||
|
- [ ] Tous fichiers ont tests
|
||||||
|
- [ ] Standards de code respectés
|
||||||
|
- [ ] Documentation à jour
|
||||||
|
- [ ] Migrations DB réversibles
|
||||||
|
- [ ] Variables env documentées
|
||||||
|
- [ ] Logs appropriés
|
||||||
|
- [ ] Gestion erreur complète
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #6 `completed`.
|
||||||
|
|
||||||
|
### Étape 9: Ajout Rapports à PR
|
||||||
|
|
||||||
|
Marquer todo #7 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "Mise à jour PR #$PR_NUMBER..."
|
||||||
|
|
||||||
|
# Récupérer description actuelle
|
||||||
|
gh pr view $PR_NUMBER --json body -q .body > /tmp/pr_current_body.md
|
||||||
|
|
||||||
|
# Vérifier si rapports existent déjà
|
||||||
|
if grep -q "📊 Rapport d'Impact Métier" /tmp/pr_current_body.md; then
|
||||||
|
echo "⚠️ Rapports existent, mise à jour..."
|
||||||
|
sed -i '/<!-- IMPACT-REPORTS-START -->/,/<!-- IMPACT-REPORTS-END -->/d' /tmp/pr_current_body.md
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Créer nouveau contenu
|
||||||
|
cat /tmp/pr_current_body.md > /tmp/pr_new_body.md
|
||||||
|
echo "" >> /tmp/pr_new_body.md
|
||||||
|
echo "<!-- IMPACT-REPORTS-START -->" >> /tmp/pr_new_body.md
|
||||||
|
echo "---" >> /tmp/pr_new_body.md
|
||||||
|
echo "" >> /tmp/pr_new_body.md
|
||||||
|
cat /tmp/impact_business_report.md >> /tmp/pr_new_body.md
|
||||||
|
echo "" >> /tmp/pr_new_body.md
|
||||||
|
cat /tmp/impact_technical_report.md >> /tmp/pr_new_body.md
|
||||||
|
echo "" >> /tmp/pr_new_body.md
|
||||||
|
echo "<!-- IMPACT-REPORTS-END -->" >> /tmp/pr_new_body.md
|
||||||
|
|
||||||
|
# Mettre à jour PR
|
||||||
|
gh pr edit $PR_NUMBER --body-file /tmp/pr_new_body.md
|
||||||
|
|
||||||
|
echo "✅ Rapports ajoutés à PR #$PR_NUMBER"
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #7 `completed`.
|
||||||
|
|
||||||
|
### Étape 10: Sauvegarde Locale
|
||||||
|
|
||||||
|
Marquer todo #8 `in_progress`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p .analysis-reports
|
||||||
|
|
||||||
|
# Combiner rapports
|
||||||
|
cat /tmp/impact_business_report.md > ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
echo "" >> ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
cat /tmp/impact_technical_report.md >> ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
|
||||||
|
# Timestamp
|
||||||
|
echo "" >> ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
echo "---" >> ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
echo "*Analyse générée le $(date '+%Y-%m-%d à %H:%M:%S')*" >> ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
|
||||||
|
echo "📁 Rapport sauvegardé: .analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
```
|
||||||
|
|
||||||
|
Marquer todo #8 `completed`.
|
||||||
|
|
||||||
|
### Étape 11: Rapport Final
|
||||||
|
|
||||||
|
```bash
|
||||||
|
END_TIME=$(date +%s)
|
||||||
|
DURATION=$((END_TIME - START_TIME))
|
||||||
|
|
||||||
|
if [ $DURATION -lt 60 ]; then
|
||||||
|
DURATION_STR="${DURATION}s"
|
||||||
|
elif [ $DURATION -lt 3600 ]; then
|
||||||
|
MINUTES=$((DURATION / 60))
|
||||||
|
SECONDS=$((DURATION % 60))
|
||||||
|
DURATION_STR="${MINUTES}m ${SECONDS}s"
|
||||||
|
else
|
||||||
|
HOURS=$((DURATION / 3600))
|
||||||
|
MINUTES=$(((DURATION % 3600) / 60))
|
||||||
|
SECONDS=$((DURATION % 60))
|
||||||
|
DURATION_STR="${HOURS}h ${MINUTES}m ${SECONDS}s"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "⏱️ Durée: $DURATION_STR"
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
analysis_completed: true
|
||||||
|
reports_generated:
|
||||||
|
- type: "business"
|
||||||
|
risk_level: "[low|medium|high]"
|
||||||
|
functional_impacts: [count]
|
||||||
|
- type: "technical"
|
||||||
|
files_modified: [count]
|
||||||
|
lines_changed: [total]
|
||||||
|
test_coverage: "[%]%"
|
||||||
|
|
||||||
|
pr_update:
|
||||||
|
status: "success"
|
||||||
|
pr_number: $PR_NUMBER
|
||||||
|
|
||||||
|
local_save:
|
||||||
|
path: ".analysis-reports/impact_pr_${PR_NUMBER}.md"
|
||||||
|
|
||||||
|
recommendations:
|
||||||
|
- category: "testing"
|
||||||
|
priority: "[high|medium|low]"
|
||||||
|
- category: "deployment"
|
||||||
|
strategy: "[description]"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- Template PR absent → ARRÊT (exit 1)
|
||||||
|
- PR introuvable → ARRÊT (exit 1)
|
||||||
|
- Échec mise à jour PR → WARNING (non bloquant)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Utilise `gh` CLI pour GitHub
|
||||||
|
- Parser JSON via `jq` ou équivalent
|
||||||
|
- Marquer CHAQUE todo completed immédiatement après succès
|
||||||
Reference in New Issue
Block a user