Aller au contenu

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.

Niveau Intermédiaire7 min de lecture— vuesGitHub

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

Environnement et versions

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

ARCHITECTURE TECHNIQUEComprendre la chaîne de bout en bout
01Branche de travail
02Pull request
03Revue de code
04Contrôles CI
05Ruleset main
06Fusion contrôlée
Le ruleset protège main côté serveur. Les reviewers analysent les changements ; les contrôles de statut valident la compilation et les tests avant fusion. Le déploiement reste une étape distincte.
Schéma du contrôle de fusion GitHub : branche de travail, pull request, revue, CI puis branche main protégée
Illustration

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.

01

É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.

  1. Ouvrir le dépôt puis Settings > Rules > Rulesets. Examiner les règles existantes et les protections de branches déjà configurées.
  2. Relever la branche par défaut, les administrateurs, les équipes autorisées et les robots de publication éventuels.
  3. Lister les workflows Actions déjà exécutés et le nom exact de leurs jobs, futurs contrôles obligatoires.
Exemple techniqueÀ adapter à votre environnement
git remote -v
git branch --show-current
git fetch origin
git status --short
Ce qui se passe à cette étape
1Dépôt
2Règles existantes
3Branches et jobs CI

À 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.

02

É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.

  1. Dans Settings > Rules > Rulesets, créer un nouveau branch ruleset et lui donner un nom explicite.
  2. Choisir la branche main comme cible exacte ; examiner les règles héritées avant de régler le mode Enforcement sur Active.
  3. Activer le blocage des suppressions et des force pushes, puis enregistrer les paramètres.
Exemple techniqueÀ adapter à votre environnement
# Paramètres à vérifier dans l'interface GitHub :
# Cible : branche main
# Enforcement : Active
# Block force pushes : activé
# Restrict deletions : activé
Ce qui se passe à cette étape
1Ruleset GitHub
2Cible main
3Protections actives

À 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.

03

É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é.

  1. Activer Require a pull request before merging, puis définir au moins une approbation si l’organisation autorise cette option.
  2. Activer la résolution obligatoire des conversations de revue si ce contrôle correspond au processus d’équipe.
  3. Évaluer l’usage de CODEOWNERS pour les répertoires sensibles et éviter les dérogations individuelles permanentes.
Exemple techniqueÀ adapter à votre environnement
# Exemple facultatif : fichier .github/CODEOWNERS
# Remplacer l'équipe par une équipe réellement existante.
# /infra/ @ORGANISATION/equipe-plateforme
# /.github/workflows/ @ORGANISATION/equipe-plateforme
Ce qui se passe à cette étape
1PR
2Revue
3Approbation

À 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.

04

É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.

  1. Faire exécuter le workflow CI au moins une fois sur une pull request de recette.
  2. Dans le ruleset, activer Require status checks to pass et sélectionner le nom exact du job constaté dans Checks.
  3. Choisir l’option qui impose une branche à jour si le dépôt exige de revalider les changements intégrés entre-temps.
Exemple techniqueÀ adapter à votre environnement
# 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.
Ce qui se passe à cette étape
1Push PR
2CI en cours
3GO / NO GO

À 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.

05

É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.

  1. Créer une branche de recette pour modifier uniquement une documentation sans risque.
  2. Pousser la branche, ouvrir la pull request et relever les statuts de revue et de CI affichés par GitHub.
  3. Confirmer que les contrôles requis bloquent la fusion tant qu’ils ne sont pas satisfaits, puis clôturer la PR de test.
Exemple techniqueÀ adapter à votre environnement
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.
Ce qui se passe à cette étape
1Branche test
2PR contrôlée
3Statut observé

À 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.

06

É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.

  1. Consigner les règles, leurs propriétaires, le nom des contrôles et la procédure de changement.
  2. Vérifier la liste des acteurs autorisés à contourner les règles, ainsi que la traçabilité de leurs actions.
  3. Prévoir un retour arrière contrôlé pour les évolutions de règles ; traiter l’urgence par une procédure documentée.
Exemple techniqueÀ adapter à votre environnement
# 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
Ce qui se passe à cette étape
1Règles
2Responsables
3Traçabilité

À 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.

Consulter la documentation officielle

05 · RECETTE

Comment vérifier que tout fonctionne ?

Résultat attenduContrôles avant de considérer la procédure terminée
01

main figure bien dans la cible du ruleset actif.

02

Une pull request attend l’approbation requise lorsque celle-ci est configurée.

03

Une CI en échec bloque la fusion, sans supprimer la possibilité de corriger la branche.

04

La suppression et les force pushes sur main sont interdits selon la politique définie.

05

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

Tous les guides GitHub

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

Pour aller plus loin