Merge Requests¶
Code review systematique, conventions, approbations et CI gates — le merge request comme point de contrôle central.
Pourquoi des merge requests¶
Un merge request (MR) — ou pull request (PR) sur GitHub — est une demande formelle d'intégrer du code dans une branche cible. Ce n'est pas juste un mécanisme technique : c'est le point de convergence entre qualité, collaboration et traçabilité.
Sans MR :
- le code entre dans
mainsans aucune vérification humaine - les bugs sont détectés en production au lieu de la review
- il n'y a aucune trace de pourquoi un changement a été accepte
Cycle de vie d'une merge request¶
graph LR
A["Creer la branche"] --> B["Developper + committer"]
B --> C["Ouvrir la MR<br/>(draft)"]
C --> D["CI passe ?"]
D -->|"non"| B
D -->|"oui"| E["Review"]
E -->|"changements demandes"| B
E -->|"approuvee"| F["Merge"]
F --> G["Supprimer la branche"] 1. Branche et développement¶
La branche suit une convention de nommage cohérente avec le workflow :
2. Ouverture en draft¶
Ouvrez la MR des le premier commit, en mode draft. Cela permet :
- à la CI de tourner des le début
- aux collegues de voir le travail en cours
- de commencer une discussion avant que le code soit "fini"
3. Description et template¶
Une bonne description de MR contient :
| Section | Contenu |
|---|---|
| Contexte | Pourquoi ce changement (lien vers l'issue) |
| Changements | Ce qui a été fait (bullet points) |
| Tests | Comment vérifier que ca marche |
| Screenshots | Si changement UI |
| Checklist | Tests passes, doc mise à jour, pas de TODO restant |
Templates de MR
Toutes les forges (GitHub, GitLab, Gitea) supportent des templates de MR. Definissez-en un dans .github/pull_request_template.md ou .gitlab/merge_request_templates/ pour standardiser les descriptions.
Code review¶
Les objectifs de la review¶
| Objectif | Ce qu'on cherche |
|---|---|
| Correctness | Le code fait-il ce qu'il est cense faire ? |
| Design | Le changement est-il au bon endroit ? L'API est-elle claire ? |
| Lisibilite | Un nouveau développeur comprendrait-il ce code dans 6 mois ? |
| Tests | Les cas importants sont-ils couverts ? Les tests sont-ils fiables ? |
| Sécurité | Pas d'injection, de secrets, de permissions ouvertes ? |
Ce que la review n'est PAS¶
- Un gatekeeping pour montrer qu'on sait mieux
- Un lieu pour debattre du style (c'est le job du formatter)
- Un blocage : si la MR est globalement bonne, approuvez avec des suggestions non-bloquantes
Bonnes pratiques¶
- Taille : visez des MR de moins de 400 lignes de changement. Au-delà, la qualité de la review chute drastiquement
- Temps de réponse : répondre dans les 4 heures — une MR qui attend 3 jours est une MR qui généré des conflits
- Tone : poser des questions ("est-ce que ce cas est géré ?") plutôt que donner des ordres ("change ca")
Approbations¶
Règles d'approbation¶
| Règle | Quand l'utiliser |
|---|---|
| 1 approbation | Équipes petites, iteration rapide |
| 2 approbations | Code critique, équipes moyennes |
| CODEOWNERS | Certains fichiers necessitent un expert spécifique |
| Approbation par le lead | Changements d'architecture ou d'API publique |
CODEOWNERS¶
# .github/CODEOWNERS ou CODEOWNERS
# Syntaxe : pattern owners
/src/auth/ @security-team
/infra/ @platform-team
*.sql @dba-team
package.json @frontend-lead
Les fichiers matching sont automatiquement assignes aux reviewers désignés.
CI gates¶
La CI doit valider la MR avant que le merge soit possible. C'est le filet de sécurité automatique.
graph TD
A["MR ouverte"] --> B["Pipeline CI"]
B --> C{"Tests"}
B --> D{"Lint"}
B --> E{"Build"}
C -->|"pass"| F["Status check OK"]
D -->|"pass"| F
E -->|"pass"| F
C -->|"fail"| G["Merge bloque"]
D -->|"fail"| G
E -->|"fail"| G
F --> H{"Approbations"}
H -->|"suffisantes"| I["Merge autorise"]
H -->|"insuffisantes"| J["Merge bloque"] Configurer les branch protections¶
Sur la branche main, activez :
- Require status checks : les pipelines CI doivent passer
- Require approvals : au moins N approbations
- Require linear history : force squash ou rebase (optionnel)
- Block force push : personne ne peut forcer un push sur main
- Require signed commits : chaque commit doit être signe (voir Signature)
Conventions d'équipe¶
Labels¶
| Label | Usage |
|---|---|
needs-review | En attente de review |
changes-requested | Modifications demandées par le reviewer |
approved | Pret a merger |
do-not-merge | WIP ou en attente d'une dépendance |
breaking-change | Changement non retro-compatible |
Milestones¶
Associez les MR a des milestones (sprints, releases) pour suivre la progression et générer des release notes automatiques.
Outils¶
| Outil | Description | Lien |
|---|---|---|
| GitHub PR | Pull requests avec reviews, checks et CODEOWNERS | docs.github.com |
| GitLab MR | Merge requests avec approbations, pipelines et environments | docs.gitlab.com |
| Gitea PR | Pull requests avec CI et branch protections | docs.gitea.com |
| Reviewdog | Commentaires automatiques de lint dans les MR | github.com/reviewdog/reviewdog |