GUIDE TECHNIQUE · GITHUB
Comment protéger la branche main sur GitHub avec les pull requests ?
Protéger la branche main sur GitHub avec un ruleset, imposer les pull requests et les contrôles CI, puis vérifier les règles de fusion sans interrompre les livraisons.
L’ESSENTIEL EN BREF
Les étapes clés
Ce guide présente 6 étapes, de « Identifier la branche cible et les règles déjà actives » à « Documenter l’exploitation et les exceptions ».
Avant de commencer : Dépôt GitHub de recette disposant d’une branche main ; accès administrateur ou permission de gérer les règles du dépôt.
01 · CADRAGE
Périmètre et résultat visé
Résultat attendu : main figure bien dans la cible du ruleset actif.
Public concerné : Développeurs, responsables de dépôt, tech leads, DevOps et chefs de projet techniques
Interface GitHub Repository Settings > Rules > Rulesets. Les options de protection et leur disponibilité dépendent des droits et de l’offre du dépôt ; vérifier les paramètres de l’organisation.
Contrôlez les versions, les droits et les options disponibles dans votre environnement avant de suivre la procédure.
02 · AVANT DE COMMENCER
Prérequis et points de contrôle
- Dépôt GitHub de recette disposant d’une branche main ; accès administrateur ou permission de gérer les règles du dépôt.
- Au moins une autre personne autorisée à effectuer la revue des pull requests et un processus de gestion des accès.
- Workflow CI existant et déjà exécuté pour disposer de contrôles de statut identifiables avant de les rendre obligatoires.
- Plan de secours documenté pour l’administrateur du dépôt, sans contourner silencieusement les protections.
03 · VUE D’ENSEMBLE
Comprendre l’architecture et les flux
04 · TUTORIEL
Procédure complète, étape par étape
Suivez les étapes dans l’ordre et contrôlez chaque résultat avant de poursuivre. Renseignez les paramètres adaptés à votre environnement.
ÉTAPE 1 / 6
Identifier la branche cible et les règles déjà actives
Les règles de branche et les rulesets peuvent se combiner ; une protection supplémentaire peut bloquer un processus de livraison existant.
- Ouvrir le dépôt puis Settings > Rules > Rulesets. Examiner les règles existantes et les protections de branches déjà configurées.
- Relever la branche par défaut, les administrateurs, les équipes autorisées et les robots de publication éventuels.
- Lister les workflows Actions déjà exécutés et le nom exact de leurs jobs, futurs contrôles obligatoires.
git remote -v
git branch --show-current
git fetch origin
git status --shortÀ vérifier : La branche main, les règles existantes et les contrôles CI sont identifiés ; aucune modification n’a été appliquée.
Point de vigilance : Ne modifier ni une protection globale de l’organisation ni les droits de contournement sans décision explicite.
ÉTAPE 2 / 6
Créer un ruleset visant uniquement la branche main
Une portée précise évite d’imposer par erreur les règles de production aux branches de développement.
- Dans Settings > Rules > Rulesets, créer un nouveau branch ruleset et lui donner un nom explicite.
- Choisir la branche main comme cible exacte ; examiner les règles héritées avant de régler le mode Enforcement sur Active.
- Activer le blocage des suppressions et des force pushes, puis enregistrer les paramètres.
# Paramètres à vérifier dans l'interface GitHub :
# Cible : branche main
# Enforcement : Active
# Block force pushes : activé
# Restrict deletions : activéÀ vérifier : Le ruleset actif couvre la branche main et n’impose aucune restriction involontaire aux branches de fonctionnalité.
Point de vigilance : Le mode Evaluate, lorsqu’il est disponible, permet d’observer l’effet d’un ruleset avant son activation.
ÉTAPE 3 / 6
Imposer une pull request et une revue adaptée
La revue croisée réduit le risque d’intégrer un changement non examiné ou non documenté.
- Activer Require a pull request before merging, puis définir au moins une approbation si l’organisation autorise cette option.
- Activer la résolution obligatoire des conversations de revue si ce contrôle correspond au processus d’équipe.
- Évaluer l’usage de CODEOWNERS pour les répertoires sensibles et éviter les dérogations individuelles permanentes.
# Exemple facultatif : fichier .github/CODEOWNERS
# Remplacer l'équipe par une équipe réellement existante.
# /infra/ @ORGANISATION/equipe-plateforme
# /.github/workflows/ @ORGANISATION/equipe-plateformeÀ vérifier : Toute modification de main passe par une pull request et les revues prévues sont requises avant la fusion.
Point de vigilance : Une ligne CODEOWNERS n’impose pas à elle seule une approbation : activer aussi la règle correspondante.
ÉTAPE 4 / 6
Rendre obligatoires les contrôles GitHub Actions
Les validations automatiques permettent de bloquer une fusion en présence d’une erreur de compilation ou de tests.
- Faire exécuter le workflow CI au moins une fois sur une pull request de recette.
- Dans le ruleset, activer Require status checks to pass et sélectionner le nom exact du job constaté dans Checks.
- Choisir l’option qui impose une branche à jour si le dépôt exige de revalider les changements intégrés entre-temps.
# Exemple de noms de contrôles :
# CI Node.js / checks
# Sélectionner uniquement un contrôle réellement publié
# par une exécution récente du dépôt.À vérifier : Une pull request dont la CI échoue ne peut pas être fusionnée, même si elle possède une approbation.
Point de vigilance : Ne rendre un contrôle obligatoire qu’après avoir vérifié sa disponibilité sur les pull requests de ce dépôt.
ÉTAPE 5 / 6
Tester le parcours complet avec une pull request de recette
Une règle enregistrée n’est pas suffisante : il faut vérifier son comportement réel avec les droits de l’équipe.
- Créer une branche de recette pour modifier uniquement une documentation sans risque.
- Pousser la branche, ouvrir la pull request et relever les statuts de revue et de CI affichés par GitHub.
- Confirmer que les contrôles requis bloquent la fusion tant qu’ils ne sont pas satisfaits, puis clôturer la PR de test.
git switch -c docs/test-protection-main
git push --set-upstream origin docs/test-protection-main
# Ouvrir ensuite une pull request vers main dans GitHub.
# Ne pas forcer un push direct sur main pour effectuer le test.À vérifier : Les étapes de revue, les jobs CI et la décision de fusion affichent un résultat cohérent avec le ruleset.
Point de vigilance : Exécuter le test sur un dépôt de recette ou une PR de documentation ; ne pas créer un incident sur le dépôt de production.
ÉTAPE 6 / 6
Documenter l’exploitation et les exceptions
Une gouvernance durable suppose de savoir qui intervient lorsque la CI, GitHub ou la livraison rencontre un incident.
- Consigner les règles, leurs propriétaires, le nom des contrôles et la procédure de changement.
- Vérifier la liste des acteurs autorisés à contourner les règles, ainsi que la traçabilité de leurs actions.
- Prévoir un retour arrière contrôlé pour les évolutions de règles ; traiter l’urgence par une procédure documentée.
# Contrôles de gouvernance
# 1. Ruleset : cible main uniquement
# 2. Revue requise : oui
# 3. Jobs CI requis : noms exacts
# 4. Bypass : propriétaires identifiés
# 5. Procédure d'urgence : documentéeÀ vérifier : Le fonctionnement nominal et le traitement des exceptions sont décrits, testables et attribués à des responsables.
Point de vigilance : Un administrateur peut disposer de droits étendus selon la configuration ; vérifier les options de bypass.
RÉFÉRENCES TECHNIQUES
Documentation officielle
Retrouvez les prérequis, les fonctionnalités et les versions prises en charge par GitHub. Vérifiez les commandes sur un environnement de test avant leur utilisation en production.
05 · RECETTE
Comment vérifier que tout fonctionne ?
main figure bien dans la cible du ruleset actif.
Une pull request attend l’approbation requise lorsque celle-ci est configurée.
Une CI en échec bloque la fusion, sans supprimer la possibilité de corriger la branche.
La suppression et les force pushes sur main sont interdits selon la politique définie.
Le processus d’exception est limité, attribué et traçable.
06 · DIAGNOSTIC
Problèmes fréquents et résolution
Ruleset invisible
Cause probable : Droits insuffisants ou paramètre géré par l’organisation
Que faire : Vérifier les permissions d’administration et les règles au niveau organisation.
Contrôle CI introuvable
Cause probable : Workflow jamais exécuté ou job renommé
Que faire : Ouvrir une PR de test et identifier le nom publié dans l’onglet Checks.
Fusion bloquée malgré des tests verts
Cause probable : Branche non à jour, revue manquante ou conversation non résolue
Que faire : Lire l’ensemble des restrictions indiquées par la pull request.
Bot de publication bloqué
Cause probable : Le compte automatique n’est pas inclus dans le processus approuvé
Que faire : Adapter le workflow et la gouvernance plutôt que désactiver la protection globale.
07 · QUESTIONS PRATIQUES
Questions fréquentes
Ruleset ou ancienne branch protection ?
Les deux mécanismes existent. Les rulesets sont adaptés à une politique visible et éventuellement partagée ; vérifier leurs interactions avec les protections existantes.
Faut-il obliger toutes les pull requests à être à jour ?
Cela dépend du risque de régression, de la fréquence des fusions et du coût des tests. Le contrôle strict doit être cohérent avec la capacité CI.
Un administrateur peut-il contourner la règle ?
Cela dépend des options de bypass et de l’application des règles aux administrateurs. Le paramétrage doit être vérifié explicitement.
Une pull request suffit-elle à sécuriser main ?
Non. Elle doit s’accompagner de revues, de contrôles CI adaptés, de droits maîtrisés et d’un processus de publication.
AUTRES TECHNOLOGIES
Guides complémentaires
VOTRE ENVIRONNEMENT
Besoin d’aller plus loin sur votre environnement ?
Gouvernance, CI/CD et pratiques DevOps : échangeons sur la sécurité et la fiabilité de vos workflows GitHub.
Échanger avec ADN Consulting