250 lines
7.9 KiB
Markdown
250 lines
7.9 KiB
Markdown
## PR Create
|
|
|
|
Crée automatiquement des Pull Requests en analysant vos modifications Git pour un flux de travail plus fluide.
|
|
|
|
### Utilisation
|
|
|
|
```bash
|
|
# Créer automatiquement une PR à partir de vos modifications
|
|
git add . && git commit -m "feat: Implement user authentication"
|
|
"Create a Draft PR with the right description and labels"
|
|
|
|
# Conserver votre modèle existant
|
|
cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
|
|
"Fill in the blanks but keep the template structure intact"
|
|
|
|
# Marquer comme prêt une fois terminé
|
|
gh pr ready
|
|
"Switch to Ready for Review after checking quality"
|
|
```
|
|
|
|
### Exemples de base
|
|
|
|
```bash
|
|
# 1. Créer une branche et committer
|
|
git checkout main && git pull
|
|
git checkout -b feat-user-profile
|
|
git add . && git commit -m "feat: Implement user profile feature"
|
|
git push -u origin feat-user-profile
|
|
|
|
# 2. Créer la PR
|
|
"Please create a PR:
|
|
1. Check what changed with git diff --cached
|
|
2. Use the PR template from .github/PULL_REQUEST_TEMPLATE.md
|
|
3. Pick up to 3 labels that match the changes
|
|
4. Create it as a Draft (keep HTML comments)"
|
|
|
|
# 3. La marquer comme prête après passage de la CI
|
|
"Once CI is green, mark the PR as Ready for Review"
|
|
```
|
|
|
|
### Étapes d'exécution
|
|
|
|
#### 1. Créer une branche
|
|
|
|
```bash
|
|
# Nomenclature des branches : {type}-{subject}
|
|
git checkout main
|
|
git pull
|
|
git checkout -b feat-user-authentication
|
|
|
|
# Confirmer que vous êtes sur la bonne branche
|
|
git branch --show-current
|
|
```
|
|
|
|
#### 2. Committer
|
|
|
|
```bash
|
|
# Préparer vos modifications
|
|
git add .
|
|
|
|
# Committer avec un message clair
|
|
git commit -m "feat: Implement user authentication API"
|
|
```
|
|
|
|
#### 3. Pousser vers le distant
|
|
|
|
```bash
|
|
# Premier push (définit l'upstream)
|
|
git push -u origin feat-user-authentication
|
|
|
|
# Pushs suivants
|
|
git push
|
|
```
|
|
|
|
#### 4. Créer un brouillon de PR avec analyse automatique
|
|
|
|
**Étape 1 : Analyser les modifications**
|
|
|
|
```bash
|
|
# Voir quels fichiers ont changé
|
|
git diff --cached --name-only
|
|
|
|
# Examiner les modifications réelles (premières 1000 lignes)
|
|
git diff --cached | head -1000
|
|
```
|
|
|
|
**Étape 2 : Générer automatiquement la description**
|
|
|
|
```bash
|
|
# Priorité des modèles :
|
|
# 1. Conserver la description PR existante telle quelle
|
|
# 2. Utiliser .github/PULL_REQUEST_TEMPLATE.md
|
|
# 3. Se rabattre sur le modèle par défaut
|
|
|
|
cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
|
|
# Remplir seulement les sections vides - ne pas toucher aux commentaires HTML ou séparateurs
|
|
```
|
|
|
|
**Étape 3 : Sélectionner automatiquement les labels**
|
|
|
|
```bash
|
|
# Obtenir les labels disponibles (non interactif)
|
|
"Retrieve available labels from .github/labels.yml or GitHub repository and automatically select appropriate labels based on changes"
|
|
|
|
# Sélection automatique par correspondance de motifs (max 3)
|
|
# - Documentation : *.md, docs/ → documentation|docs
|
|
# - Tests : test, spec → test|testing
|
|
# - Corrections de bugs : fix|bug → bug|fix
|
|
# - Nouvelles fonctionnalités : feat|feature → feature|enhancement
|
|
```
|
|
|
|
**Étape 4 : Créer la PR via l'API GitHub (Préserver les commentaires HTML)**
|
|
|
|
```bash
|
|
# Créer la PR
|
|
"Create a Draft PR with the following information:
|
|
- Title: Auto-generated from commit message
|
|
- Description: Properly filled using .github/PULL_REQUEST_TEMPLATE.md
|
|
- Labels: Auto-selected from changes (max 3)
|
|
- Base branch: main
|
|
- Preserve all HTML comments"
|
|
```
|
|
|
|
**Méthode B : GitHub MCP (Solution de secours)**
|
|
|
|
```javascript
|
|
// Créer une PR en préservant les commentaires HTML
|
|
mcp_github_create_pull_request({
|
|
owner: "organization",
|
|
repo: "repository",
|
|
base: "main",
|
|
head: "feat-user-authentication",
|
|
title: "feat: Implement user authentication",
|
|
body: prBodyContent, // Contenu complet incluant les commentaires HTML
|
|
draft: true,
|
|
maintainer_can_modify: true,
|
|
});
|
|
```
|
|
|
|
### Système de sélection automatique de labels
|
|
|
|
#### Détermination à partir des motifs de fichiers
|
|
|
|
- **Documentation** : `*.md`, `README`, `docs/` → `documentation|docs|doc`
|
|
- **Tests** : `test`, `spec` → `test|testing`
|
|
- **CI/CD** : `.github/`, `*.yml`, `Dockerfile` → `ci|build|infra|ops`
|
|
- **Dépendances** : `package.json`, `pubspec.yaml` → `dependencies|deps`
|
|
|
|
#### Détermination à partir du contenu
|
|
|
|
- **Corrections de bugs** : `fix|bug|error|crash|repair` → `bug|fix`
|
|
- **Nouvelles fonctionnalités** : `feat|feature|add|implement|new-feature|implementation` → `feature|enhancement|feat`
|
|
- **Refactorisation** : `refactor|clean|restructure` → `refactor|cleanup|clean`
|
|
- **Performance** : `performance|perf|optimize` → `performance|perf`
|
|
- **Sécurité** : `security|secure` → `security`
|
|
|
|
#### Contraintes
|
|
|
|
- **Max 3 labels** : Limite supérieure pour la sélection automatique
|
|
- **Labels existants uniquement** : Interdit de créer de nouveaux labels
|
|
- **Correspondance partielle** : Déterminée par l'inclusion de mots-clés dans les noms de labels
|
|
|
|
### Directives du projet
|
|
|
|
#### Approche de base
|
|
|
|
1. **Toujours commencer en brouillon** : Toutes les PR doivent être créées à l'état Draft
|
|
2. **Amélioration progressive de la qualité** : Phase 1 (Implémentation de base) → Phase 2 (Ajouter des tests) → Phase 3 (Mettre à jour la documentation)
|
|
3. **Labels appropriés** : Toujours ajouter jusqu'à 3 labels
|
|
4. **Utiliser les modèles** : Toujours utiliser `.github/PULL_REQUEST_TEMPLATE.md`
|
|
5. **Espacement japonais** : Toujours ajouter un espace demi-chasse entre le texte japonais et les alphanumériques
|
|
|
|
#### Convention de nomenclature des branches
|
|
|
|
```text
|
|
{type}-{subject}
|
|
|
|
Exemples :
|
|
- feat-user-profile
|
|
- fix-login-error
|
|
- refactor-api-client
|
|
```
|
|
|
|
#### Messages de commit
|
|
|
|
```text
|
|
{type}: {description}
|
|
|
|
Exemples :
|
|
- feat: Implement user authentication API
|
|
- fix: Correct login error
|
|
- docs: Update README
|
|
```
|
|
|
|
### Système de traitement des modèles
|
|
|
|
#### Priorité de traitement
|
|
|
|
1. **Description PR existante** : Conserver tout ce qui est déjà écrit
|
|
2. **Modèle du projet** : Utiliser `.github/PULL_REQUEST_TEMPLATE.md`
|
|
3. **Modèle par défaut** : Utiliser ceci si rien d'autre n'existe
|
|
|
|
#### Règles de préservation du contenu existant
|
|
|
|
- **Ne pas toucher au contenu existant** : Laisser ce qui est déjà là tel quel
|
|
- **Remplir seulement les blancs** : Ajouter du contenu seulement là où il manque
|
|
- **Conserver les commentaires fonctionnels** : Comme `<!-- Copilot review rule -->`
|
|
- **Conserver les commentaires HTML** : Tous les `<!-- ... -->` restent tels quels
|
|
- **Conserver les séparateurs** : Les éléments comme `---` restent en place
|
|
|
|
#### Gestion de la préservation des commentaires HTML
|
|
|
|
**Attention** : GitHub CLI (`gh pr edit`) échappe les commentaires HTML, et le traitement du shell peut créer des problèmes avec des chaînes comme `EOF < /dev/null`.
|
|
|
|
**Comment corriger ceci** :
|
|
|
|
1. **Utiliser l'option --field de l'API GitHub** : Ceci gère l'échappement correctement
|
|
2. **Rester simple** : Éviter les pipes et redirections complexes
|
|
3. **Ne rien supprimer** : Conserver tous les commentaires HTML et modèles intacts
|
|
|
|
### Réponses aux commentaires de revue
|
|
|
|
```bash
|
|
# Committer vos corrections
|
|
git add .
|
|
git commit -m "fix: Address review feedback"
|
|
git push
|
|
```
|
|
|
|
### Notes
|
|
|
|
#### Importance de la préservation des commentaires HTML
|
|
|
|
- **Problème GitHub CLI** : `gh pr edit` échappe les commentaires HTML et peut casser les choses
|
|
- **La solution** : Utiliser l'option `--field` de l'API GitHub pour une gestion appropriée
|
|
- **Tout conserver** : Ne pas supprimer les commentaires HTML - conserver tout le modèle
|
|
|
|
#### Contraintes d'automatisation
|
|
|
|
- **Pas de nouveaux labels** : Ne peut utiliser que les labels de `.github/labels.yml`
|
|
- **3 labels max** : C'est la limite pour la sélection automatique
|
|
- **Ne pas toucher au contenu manuel** : Ne jamais changer ce que quelqu'un a écrit
|
|
|
|
#### Qualité étape par étape
|
|
|
|
- **Commencer avec brouillon** : Chaque PR commence comme brouillon
|
|
- **Vérifier la CI** : Exécuter `gh pr checks` pour voir le statut
|
|
- **Marquer comme prêt** : Utiliser `gh pr ready` quand la qualité semble bonne
|
|
- **Suivre le modèle** : S'en tenir à la structure de votre projet
|