Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 17:58:54 +08:00
commit 4d6408436e
32 changed files with 3539 additions and 0 deletions

326
skills/git-pr/SKILL.md Normal file
View 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é.