Comprendre le cycle de vie d'une pull request¶
Ce que tu vas comprendre¶
- Identifier les états possibles d'une PR et les transitions entre eux (Bloom 2)
- Analyser pourquoi certaines transitions sont automatiques et d'autres manuelles (Bloom 4)
- Évaluer à quel moment une PR est prête à être fusionnée (Bloom 5)
Le problème concret¶
Tu as ouvert une PR il y a trois jours. Un reviewer a laissé des commentaires. Tu as poussé des corrections. La CI a repassé au vert. Mais tu ne sais pas si tu dois re-demander une review, si tu peux fusionner maintenant, ou si quelque chose bloque encore. L'état de la PR n'est pas clair.
Comprendre le cycle de vie d'une PR te permet de lire son état actuel d'un coup d'œil et de savoir exactement quelle action effectuer ensuite.
L'analogie¶
Une pull request ressemble à un dossier de demande de permis de construire :
- Ouvert : le dossier est déposé, les voisins (reviewers) peuvent faire des remarques
- En cours de review : l'architecte (reviewer) examine les plans et demande des modifications
- Approuvé : l'architecte signe les plans modifiés
- CI verte : les normes techniques sont vérifiées automatiquement (sécurité incendie, etc.)
- Fusionné : le permis est accordé, les travaux peuvent commencer sur
main - Refusé / fermé : le dossier est archivé sans suite
Comme pour un permis, une PR peut être rouverte si elle a été fermée par erreur ou prématurément.
Le modèle — diagramme de séquence complet¶
stateDiagram-v2
[*] --> Draft : créer en brouillon
[*] --> Open : créer directement
Draft --> Open : marquer "Prête pour review"
Open --> Draft : repasser en brouillon
Open --> ReviewRequested : assigner un reviewer
ReviewRequested --> ChangesRequested : reviewer demande modifications
ReviewRequested --> Approved : reviewer approuve
ChangesRequested --> ReviewRequested : auteur pousse corrections
+ re-demande review
Approved --> Open : nouveau push (invalidation auto)
Open --> Closed : fermer sans fusionner
Closed --> Open : rouvrir
Approved --> Merged : fusionner (CI verte requise si configurée)
Open --> Merged : fusionner (si permissions suffisantes)
Merged --> [*]
Closed --> [*]
Les états en détail¶
Draft (Brouillon)¶
La PR est visible par l'équipe mais ne peut pas être fusionnée. Utilise cet état pour : - Partager du code en cours de travail pour des commentaires précoces - Réserver un numéro de PR pour une issue - Travailler en collaboration sur la même branche
Transition manuelle : l'auteur clique Marquer comme prête pour review.
Open (Ouverte)¶
État par défaut à la création. La PR peut être commentée, reviewée et fusionnée (selon les permissions). C'est l'état de travail normal.
ReviewRequested (Review demandée)¶
Un reviewer a été assigné. gitrust lui envoie une notification. La PR attend son verdict. L'auteur peut continuer à pousser des commits pendant ce temps.
ChangesRequested (Modifications demandées)¶
Le reviewer a explicitement demandé des changements. La PR est bloquée — elle ne peut pas être fusionnée tant que le reviewer n'a pas approuvé ou n'a pas retiré son refus.
Transition de sortie : l'auteur pousse les corrections et re-demande une review (bouton Re-request review).
Approved (Approuvée)¶
Au moins un reviewer a approuvé. La PR peut être fusionnée si la CI est verte.
Invalidation automatique : si l'auteur pousse un nouveau commit après l'approbation, le statut repasse à Open — le reviewer doit approuver à nouveau. Ce comportement garantit que ce qui est fusionné correspond exactement à ce qui a été approuvé.
Merged (Fusionnée)¶
État terminal. Le code est dans la branche cible. La PR est archivée en lecture seule. Si la description contenait closes #N, l'issue N est fermée automatiquement à ce moment.
Closed (Fermée)¶
Fermée sans fusion — le travail a été abandonné ou la PR était incorrecte. Peut être rouverte si nécessaire. Les commits de la branche ne sont pas supprimés.
Transitions automatiques¶
| Déclencheur | Transition |
|---|---|
| Nouveau commit poussé après approbation | Approved → Open (invalidation de l'approbation) |
| Fusion dans la branche cible | Open/Approved → Merged |
Fusion + closes #N dans le commit ou la description |
Issue N → Closed |
| CI configurée et pipeline échoué | Bouton Fusionner désactivé (blocage soft) |
Alternatives et compromis¶
Review obligatoire vs optionnelle¶
gitrust permet de fusionner une PR sans review externe si l'on a les permissions Owner ou Maintainer. Certaines équipes configurent une branche protégée exigeant au moins une approbation — ce qui rend la review techniquement obligatoire. D'autres s'appuient sur la convention sans protection forcée. La protection forcée convient aux projets critiques ou réglementés ; la convention suffit pour les petites équipes de confiance.
Invalidation automatique après push¶
Certaines forges (GitHub) ont rendu ce comportement optionnel. gitrust invalide systématiquement l'approbation après un nouveau push — c'est plus strict mais garantit que le reviewer a vu exactement le code fusionné. Inconvénient : un correctif de typo force une re-review complète.
Vérifier ta compréhension¶
-
Une PR est à l'état ChangesRequested. L'auteur pousse ses corrections mais ne re-demande pas de review. Que se passe-t-il ? Peut-on fusionner ? (Bloom 2 — identifier l'état)
-
Tu es Maintainer d'un dépôt. Une PR approuvée contient un conflit de merge introduit par un commit récent sur
main. Quelles options as-tu, et quels sont les avantages et inconvénients de chacune ? (Bloom 4 — analyser les compromis)
Pour aller plus loin¶
- Ouvrir une pull request : créer et suivre une PR
- Stratégies de fusion : choisir entre fast-forward, squash et merge commit
- Modèle de collaboration : pourquoi la review est centrale dans gitrust