Créer une PR GitHub
Flux de travail
- Lire
.github/pull_request_template.mdavant de rédiger le corps de la PR. - Collecter le contexte de la PR depuis la branche courante (base/head, périmètre, problèmes liés, statut des tests, changements cassants, contenu de la note de version).
- Vérifier si la branche courante a été poussée vers le remote. Si non, la pousser d'abord :
- Le remote par défaut est
origin, mais demander à l'utilisateur s'il souhaite utiliser un remote différent.git push -u <remote> <head-branch>
- Le remote par défaut est
- Déterminer la branche de base :
- Pour le repo officiel (CherryHQ/cherry-studio) en tant que
origin: la base par défaut estmaindepuisorigin, mais permettre à l'utilisateur d'indiquer explicitement une branche de base. mainest la ligne de développement active v2. Les corrections de maintenance v1 (branche headhotfix/*, corrections de bugs critiques visibles par l'utilisateur uniquement) doivent ciblerv1, nonmain— définir la base àv1pour ceux-ci.- Pour un fork en tant que
origin: vérifier les remotes disponibles avecgit remote -v, la base par défaut peut êtreupstream/mainou un autre remote. Toujours supposer que l'utilisateur veut fusionner head vers CherryHQ/cherry-studio/main, sauf si l'utilisateur indique explicitement une branche de base différente. - Demander à l'utilisateur de confirmer la branche de base si elle n'est pas celle par défaut.
- Pour le repo officiel (CherryHQ/cherry-studio) en tant que
- Créer un fichier temporaire et écrire le corps de la PR :
- Utiliser
pr_body_file="$(mktemp /tmp/gh-pr-body-XXXXXX).md" - Remplir le contenu en utilisant exactement la structure du template (conserver l'ordre des sections, les titres, le formatage des cases à cocher).
- Si non applicable, écrire
N/AouNone.
- Utiliser
- Afficher l'aperçu du contenu du fichier temporaire. Afficher le chemin du fichier (par exemple,
/tmp/gh-pr-body-XXXXXX.md) et demander une confirmation explicite avant de créer. Ignorer cette étape si l'utilisateur indique explicitement qu'aucun aperçu/confirmation n'est nécessaire (par exemple, flux d'automatisation). - Après confirmation, créer la PR :
gh pr create --base <base> --head <head> --title "<title>" --body-file "$pr_body_file" - Nettoyer le fichier temporaire :
rm -f "$pr_body_file" - Rapporter l'URL de la PR créée et résumer le titre/base/head ainsi que tout suivi requis.
Contraintes
-
Ne jamais ignorer les sections du template.
-
Ne jamais réécrire le format du template.
-
Garder le contenu concis et spécifique à l'ensemble des changements actuels.
-
Le titre et le corps de la PR doivent être rédigés en anglais.
-
Ne jamais créer la PR avant d'afficher le corps final complet à l'utilisateur, sauf s'il renonce explicitement à l'aperçu ou à la confirmation.
-
Ne jamais compter sur les invites d'autorisation de commande comme aperçu du corps de la PR.
-
Case à cocher Note de version & Documentation — les deux sont déterminées par le fait que le changement soit visible pour l'utilisateur. Utiliser le tableau ci-dessous :
Type de changement Note de version Docs [x]Nouvelle fonctionnalité / paramètre / UI visible pour l'utilisateur Décrire le changement ✅ Correction de bug visible par l'utilisateur Décrire la correction ✅ si le comportement a changé Changement de comportement / changement de valeur par défaut Décrire + action requise✅ Correction de sécurité dans une dépendance visible pour l'utilisateur Décrire la correction ✅ si l'utilisation a changé Changements CI / GitHub Actions NONE❌ Refactorisation interne (l'utilisateur ne peut pas le remarquer) NONE❌ Changements des outils dev / build NONE❌ Bump de dépendance dev uniquement NONE❌ Changements de test uniquement / style de code NONE❌
Modèle de commande
# lire le template
cat .github/pull_request_template.md
# afficher ce corps Markdown complet en chat d'abord
pr_body_file="$(mktemp /tmp/gh-pr-body-XXXXXX).md"
cat > "$pr_body_file" <<'EOF'
...corps du template rempli...
EOF
# exécuter uniquement après confirmation explicite de l'utilisateur
gh pr create --base <base> --head <head> --title "<title>" --body-file "$pr_body_file"
rm -f "$pr_body_file"