Initial commit
This commit is contained in:
326
skills/git-pr/SKILL.md
Normal file
326
skills/git-pr/SKILL.md
Normal file
@@ -0,0 +1,326 @@
|
||||
---
|
||||
name: git-pr
|
||||
description: >
|
||||
Automatise la création de Pull Requests GitHub avec workflow complet incluant:
|
||||
QA intelligente (PHP), commits structurés, assignation milestone et projet,
|
||||
code review automatique. Utilisable via /git:pr ou invocation automatique
|
||||
quand l'utilisateur demande à créer/ouvrir/faire une PR.
|
||||
allowed-tools: [Bash, Read, Write, TodoWrite, AskUserQuestion]
|
||||
model: claude-sonnet-4-5-20250929
|
||||
---
|
||||
|
||||
# Git PR Skill - Checklist d'exécution
|
||||
|
||||
## Configuration
|
||||
|
||||
```bash
|
||||
SCRIPTS_DIR="/home/atournayre/.claude/plugins/marketplaces/atournayre-claude-plugin-marketplace/git/skills/git-pr/scripts"
|
||||
PR_TEMPLATE_PATH=".github/pull_request_template.md"
|
||||
```
|
||||
|
||||
## Checklist d'exécution
|
||||
|
||||
### 1. Initialisation
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
START_TIME=$(date +%s)
|
||||
```
|
||||
|
||||
EXÉCUTER TodoWrite avec ces todos exacts :
|
||||
```yaml
|
||||
todos:
|
||||
- content: "Vérifier template PR"
|
||||
status: "pending"
|
||||
activeForm: "Vérification du template PR"
|
||||
- content: "Lancer QA intelligente"
|
||||
status: "pending"
|
||||
activeForm: "Lancement de la QA intelligente"
|
||||
- content: "Analyser changements git"
|
||||
status: "pending"
|
||||
activeForm: "Analyse des changements git"
|
||||
- content: "Confirmer branche de base"
|
||||
status: "pending"
|
||||
activeForm: "Confirmation de la branche de base"
|
||||
- content: "Générer description PR intelligente"
|
||||
status: "pending"
|
||||
activeForm: "Génération de la description PR intelligente"
|
||||
- content: "Push et création PR"
|
||||
status: "pending"
|
||||
activeForm: "Push et création de la PR"
|
||||
- content: "Assigner milestone"
|
||||
status: "pending"
|
||||
activeForm: "Assignation du milestone"
|
||||
- content: "Assigner projet GitHub"
|
||||
status: "pending"
|
||||
activeForm: "Assignation du projet GitHub"
|
||||
- content: "Code review automatique"
|
||||
status: "pending"
|
||||
activeForm: "Code review automatique"
|
||||
- content: "Nettoyage branche locale"
|
||||
status: "pending"
|
||||
activeForm: "Nettoyage de la branche locale"
|
||||
```
|
||||
|
||||
### 2. Parsing arguments
|
||||
|
||||
EXÉCUTER ce bloc pour parser $ARGUMENTS :
|
||||
```bash
|
||||
ARGS=($ARGUMENTS)
|
||||
BRANCH_BASE=""
|
||||
MILESTONE=""
|
||||
PROJECT_NAME=""
|
||||
DELETE_FLAG=""
|
||||
NO_REVIEW_FLAG=""
|
||||
|
||||
for arg in "${ARGS[@]}"; do
|
||||
case "$arg" in
|
||||
--delete) DELETE_FLAG="--delete" ;;
|
||||
--no-review) NO_REVIEW_FLAG="--no-review" ;;
|
||||
*)
|
||||
if [ -z "$BRANCH_BASE" ]; then
|
||||
BRANCH_BASE="$arg"
|
||||
elif [ -z "$MILESTONE" ]; then
|
||||
MILESTONE="$arg"
|
||||
elif [ -z "$PROJECT_NAME" ]; then
|
||||
PROJECT_NAME="$arg"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
```
|
||||
|
||||
### 3. Vérification scopes GitHub
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/check_scopes.sh
|
||||
```
|
||||
|
||||
- Exit 0 → continuer
|
||||
- Exit 1 → ARRÊT, afficher message du script
|
||||
|
||||
### 4. Template PR
|
||||
|
||||
- Marquer todo #1 in_progress
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/verify_pr_template.sh "$PR_TEMPLATE_PATH"
|
||||
```
|
||||
|
||||
- Exit 0 → marquer todo #1 completed
|
||||
- Exit 1 → ARRÊT
|
||||
|
||||
### 5. QA (si pas --no-review)
|
||||
|
||||
- Marquer todo #2 in_progress
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/smart_qa.sh
|
||||
```
|
||||
|
||||
- Exit 0 → marquer todo #2 completed
|
||||
- Exit 1 → ARRÊT
|
||||
|
||||
### 6. Analyse changements
|
||||
|
||||
- Marquer todo #3 in_progress
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/analyze_changes.sh
|
||||
```
|
||||
|
||||
- Stocker sortie JSON
|
||||
- Marquer todo #3 completed
|
||||
|
||||
### 7. Branche de base
|
||||
|
||||
- Marquer todo #4 in_progress
|
||||
|
||||
Si BRANCH_BASE fourni :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/confirm_base_branch.py --branch "$BRANCH_BASE"
|
||||
```
|
||||
|
||||
Sinon :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/confirm_base_branch.py
|
||||
```
|
||||
|
||||
Si needs_user_input: true → utiliser AskUserQuestion :
|
||||
```yaml
|
||||
questions:
|
||||
- question: "Quelle branche de base pour la PR ?"
|
||||
header: "Branche"
|
||||
multiSelect: false
|
||||
options:
|
||||
- label: "develop"
|
||||
description: "Branche développement"
|
||||
- label: "main"
|
||||
description: "Branche production"
|
||||
```
|
||||
|
||||
- Marquer todo #4 completed
|
||||
|
||||
### 8. Génération description intelligente
|
||||
|
||||
- Marquer todo "Générer description PR intelligente" in_progress
|
||||
|
||||
EXÉCUTER pour récupérer les informations :
|
||||
```bash
|
||||
BRANCH_NAME=$(git branch --show-current)
|
||||
echo "=== COMMITS ==="
|
||||
git log $BRANCH_BASE..$BRANCH_NAME --oneline
|
||||
echo ""
|
||||
echo "=== DIFF STAT ==="
|
||||
git diff $BRANCH_BASE..$BRANCH_NAME --stat
|
||||
echo ""
|
||||
echo "=== FICHIERS MODIFIÉS ==="
|
||||
git diff $BRANCH_BASE..$BRANCH_NAME --name-only
|
||||
```
|
||||
|
||||
LIRE le template PR avec Read tool : `$PR_TEMPLATE_PATH`
|
||||
|
||||
**GÉNÉRER LA DESCRIPTION** en tant que Claude :
|
||||
1. Analyser les commits et le diff
|
||||
2. Remplir intelligemment chaque section du template :
|
||||
- **Bug fix** : supprimer si pas de fix, sinon lier l'issue
|
||||
- **Description** : résumer les changements basé sur les commits
|
||||
- **Type de changement** : cocher (✔️) les types appropriés basé sur les commits
|
||||
- **Tests** : indiquer si tests ajoutés/modifiés
|
||||
- **Checklist** : cocher ce qui s'applique
|
||||
- **Actions** : cocher ce qui est nécessaire
|
||||
3. Sauvegarder dans `/tmp/pr_body_generated.md` avec Write tool
|
||||
|
||||
### 9. Création PR
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
PR_NUMBER=$(bash $SCRIPTS_DIR/create_pr.sh "$BRANCH_BASE" "/tmp/pr_body_generated.md")
|
||||
```
|
||||
|
||||
- Exit 0 → stocker PR_NUMBER, marquer todo "Générer description PR intelligente" completed, puis marquer todo "Push et création PR" completed
|
||||
- Exit 1 → ARRÊT
|
||||
|
||||
### 10. Milestone
|
||||
|
||||
- Marquer todo "Assigner milestone" in_progress
|
||||
|
||||
Si MILESTONE fourni :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/assign_milestone.py $PR_NUMBER --milestone "$MILESTONE"
|
||||
```
|
||||
|
||||
Sinon :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/assign_milestone.py $PR_NUMBER
|
||||
```
|
||||
|
||||
Si needs_user_input: true → utiliser AskUserQuestion avec milestones disponibles
|
||||
|
||||
- Marquer todo "Assigner milestone" completed (même si échec, non bloquant)
|
||||
|
||||
### 11. Projet
|
||||
|
||||
- Marquer todo "Assigner projet GitHub" in_progress
|
||||
|
||||
Si PROJECT_NAME fourni :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/assign_project.py $PR_NUMBER --project "$PROJECT_NAME"
|
||||
```
|
||||
|
||||
Sinon :
|
||||
```bash
|
||||
python3 $SCRIPTS_DIR/assign_project.py $PR_NUMBER
|
||||
```
|
||||
|
||||
Si needs_user_input: true → utiliser AskUserQuestion avec projets disponibles
|
||||
|
||||
- Marquer todo "Assigner projet GitHub" completed (même si échec, non bloquant)
|
||||
|
||||
### 12. Review intelligente (si pas --no-review)
|
||||
|
||||
- Marquer todo "Code review automatique" in_progress
|
||||
|
||||
EXÉCUTER pour récupérer les données :
|
||||
```bash
|
||||
PR_DATA=$(bash $SCRIPTS_DIR/auto_review.sh $PR_NUMBER)
|
||||
```
|
||||
|
||||
**ANALYSER EN TANT QUE CLAUDE** les données JSON retournées et générer une review intelligente :
|
||||
|
||||
1. **Conformité template PR** :
|
||||
- Vérifier que toutes les sections requises sont remplies
|
||||
- Signaler les sections manquantes ou incomplètes
|
||||
|
||||
2. **Qualité du code** :
|
||||
- Patterns suspects (code dupliqué, fonctions trop longues)
|
||||
- Problèmes de sécurité potentiels (injections, données sensibles)
|
||||
- Respect des conventions du projet
|
||||
|
||||
3. **Tests** :
|
||||
- Tests manquants pour les nouvelles fonctionnalités
|
||||
- Couverture des cas limites
|
||||
|
||||
4. **Documentation** :
|
||||
- Commentaires nécessaires absents
|
||||
- Mise à jour README si API modifiée
|
||||
|
||||
5. **Suggestions d'amélioration** :
|
||||
- Refactorisation possible
|
||||
- Performance
|
||||
- Lisibilité
|
||||
|
||||
**GÉNÉRER le commentaire de review** avec structure :
|
||||
```markdown
|
||||
## 🔍 Code Review Automatique
|
||||
|
||||
### ✅ Points positifs
|
||||
- [ce qui est bien fait]
|
||||
|
||||
### ⚠️ Points d'attention
|
||||
- [problèmes potentiels à vérifier]
|
||||
|
||||
### 💡 Suggestions
|
||||
- [améliorations possibles]
|
||||
|
||||
### 📋 Checklist conformité
|
||||
- [ ] Template PR complet
|
||||
- [ ] Tests présents
|
||||
- [ ] Documentation à jour
|
||||
|
||||
---
|
||||
*Review générée par git-pr skill*
|
||||
```
|
||||
|
||||
EXÉCUTER pour poster le commentaire :
|
||||
```bash
|
||||
gh pr comment $PR_NUMBER --body "$REVIEW_COMMENT"
|
||||
```
|
||||
|
||||
- Marquer todo "Code review automatique" completed
|
||||
|
||||
### 13. Nettoyage
|
||||
|
||||
- Marquer todo "Nettoyage branche locale" in_progress
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/cleanup_branch.sh "$BRANCH_BASE" "$BRANCH_NAME" $DELETE_FLAG
|
||||
```
|
||||
|
||||
Si needs_user_input: true → utiliser AskUserQuestion pour confirmer suppression
|
||||
|
||||
- Marquer todo "Nettoyage branche locale" completed
|
||||
|
||||
### 14. Rapport final
|
||||
|
||||
EXÉCUTER :
|
||||
```bash
|
||||
bash $SCRIPTS_DIR/final_report.sh $PR_NUMBER $START_TIME
|
||||
```
|
||||
|
||||
Afficher le rapport YAML généré.
|
||||
Reference in New Issue
Block a user