GitHub Actions : Impossible De Créer Une PR Automatiquement
Vous rencontrez des difficultés avec GitHub Actions et la création automatique de Pull Requests (PR) ? Vous n'êtes pas seul ! De nombreux développeurs se sont heurtés à cette restriction de sécurité imposée par GitHub, qui empêche les workflows déclenchés par l'événement pull_request de générer automatiquement des PR. Cet article explore en profondeur ce problème, ses causes, et surtout, les solutions pour le contourner efficacement.
Le Problème : GitHub Actions et la Création de Pull Requests
Le cœur du problème réside dans une mesure de sécurité mise en place par GitHub. Les workflows qui sont déclenchés par l'événement pull_request ne sont pas autorisés à créer automatiquement des nouvelles Pull Requests. Cette restriction est cruciale pour prévenir les boucles infinies de PR, qui pourraient être générées par des actions automatisées mal configurées. Imaginez un scénario où une action crée une PR, qui à son tour déclenche une autre action qui crée une autre PR, et ainsi de suite. Sans cette protection, votre dépôt pourrait rapidement être inondé de PR inutiles, consommant des ressources et rendant la collaboration difficile.
Cette mesure de sécurité peut sembler contraignante au premier abord, mais elle est essentielle pour maintenir la stabilité et l'efficacité des workflows GitHub Actions. Comprendre la raison d'être de cette restriction est la première étape pour trouver des solutions alternatives et optimiser votre flux de travail.
La Cause : Le GITHUB_TOKEN et Ses Limitations
Pour comprendre pourquoi cette restriction existe, il faut se pencher sur le fonctionnement du GITHUB_TOKEN. Par défaut, lorsqu'un workflow GitHub Actions s'exécute, il utilise un GITHUB_TOKEN fourni par GitHub. Ce token agit comme une identité pour le workflow, lui permettant d'interagir avec le dépôt, par exemple pour effectuer des commits, créer des issues, ou encore, déclencher d'autres actions.
Cependant, le GITHUB_TOKEN possède des droits limités, et c'est là que réside le problème. Dans le contexte d'un workflow déclenché par un événement pull_request, le GITHUB_TOKEN n'a pas la permission de créer de nouvelles Pull Requests. Cette limitation est intentionnelle et fait partie des mesures de sécurité mentionnées précédemment.
Il est important de noter que cette restriction ne s'applique qu'aux workflows déclenchés par pull_request. Pour les autres types de workflows, le GITHUB_TOKEN peut avoir les permissions nécessaires pour créer des PR. Mais dans notre cas spécifique, il est nécessaire de trouver une alternative pour contourner cette limitation.
La Solution : Utiliser un Personal Access Token (PAT)
La solution la plus courante et la plus efficace pour contourner cette restriction est d'utiliser un Personal Access Token (PAT) à la place du GITHUB_TOKEN. Un PAT est un jeton d'accès personnel que vous pouvez générer depuis votre compte GitHub. Il vous permet de contrôler précisément les permissions accordées à ce jeton, ce qui est essentiel pour notre cas d'utilisation.
Contrairement au GITHUB_TOKEN, qui est automatiquement généré et géré par GitHub, le PAT est sous votre contrôle. Vous pouvez le créer, le révoquer, et définir les permissions qu'il accorde. Cela vous donne une flexibilité totale pour adapter les permissions du jeton aux besoins de votre workflow.
L'utilisation d'un PAT implique quelques étapes clés :
- Création du PAT : Vous devez générer un PAT depuis les paramètres de votre compte GitHub.
- Définition des permissions : Lors de la création du PAT, vous devez lui accorder les permissions nécessaires, notamment
repoetworkflow. - Ajout comme secret : Vous devez ajouter le PAT comme secret dans les paramètres de votre dépôt GitHub.
- Utilisation dans le workflow : Vous devez modifier votre workflow YAML pour utiliser le PAT à la place du
GITHUB_TOKENdans les étapes de création de PR.
Chacune de ces étapes est cruciale pour garantir le bon fonctionnement de la solution. Nous allons maintenant les détailler une par une.
Étape 1 : Créer un Personal Access Token (PAT)
La première étape consiste à créer un PAT depuis votre compte GitHub. Pour cela, suivez ces étapes :
- Connectez-vous à votre compte GitHub.
- Cliquez sur votre photo de profil en haut à droite, puis sélectionnez "Settings".
- Dans la barre latérale gauche, cliquez sur "Developer settings".
- Dans la barre latérale gauche, cliquez sur "Personal access tokens".
- Cliquez sur le bouton "Generate new token".
- Donnez un nom descriptif à votre jeton (par exemple, "PAT pour GitHub Actions PR").
Étape 2 : Définir les Permissions du PAT
L'étape suivante est cruciale : vous devez définir les permissions que vous accordez à votre PAT. Pour que votre workflow puisse créer des Pull Requests, vous devez au minimum lui accorder les permissions suivantes :
repo: Cette permission donne un accès complet aux dépôts, y compris la possibilité de créer des branches, des commits, et bien sûr, des Pull Requests.workflow: Cette permission permet au PAT de déclencher des workflows et d'interagir avec les actions GitHub.
Il est important de ne pas accorder plus de permissions que nécessaire. Si votre PAT n'a besoin que de créer des PR, ne lui accordez pas des permissions supplémentaires qui pourraient compromettre la sécurité de votre dépôt.
Étape 3 : Ajouter le PAT comme Secret GitHub
Une fois que vous avez créé votre PAT et défini ses permissions, vous devez l'ajouter comme secret dans les paramètres de votre dépôt GitHub. Cela permettra à votre workflow d'accéder au PAT en toute sécurité, sans l'exposer directement dans le code.
Pour ajouter un secret, suivez ces étapes :
- Dans votre dépôt GitHub, cliquez sur l'onglet "Settings".
- Dans la barre latérale gauche, cliquez sur "Secrets".
- Cliquez sur le bouton "New repository secret".
- Donnez un nom à votre secret (par exemple,
PAT_PR_CREATION). C'est ce nom que vous utiliserez dans votre workflow pour référencer le PAT. - Collez la valeur de votre PAT dans le champ "Value".
- Cliquez sur le bouton "Add secret".
Étape 4 : Utiliser le PAT dans le Workflow YAML
La dernière étape consiste à modifier votre fichier de workflow YAML pour utiliser le PAT à la place du GITHUB_TOKEN dans les étapes qui nécessitent la création de Pull Requests. Cela se fait en utilisant la syntaxe ${{ secrets.VOTRE_SECRET_PAT }} pour référencer le secret que vous avez créé à l'étape précédente.
Voici un exemple de snippet YAML montrant comment utiliser le PAT :
steps:
- name: Créer une Pull Request
uses: actions/github-script@v6
with:
github-token: ${{ secrets.PAT_PR_CREATION }}
script: |
// Votre code pour créer la PR ici
Dans cet exemple, PAT_PR_CREATION est le nom du secret que nous avons créé à l'étape précédente. La ligne github-token: ${{ secrets.PAT_PR_CREATION }} indique à l'action github-script d'utiliser le PAT pour s'authentifier auprès de GitHub.
Exemple Concret : Workflow YAML Complet
Pour illustrer l'utilisation du PAT dans un contexte réel, voici un exemple de workflow YAML complet qui crée une Pull Request automatiquement lorsqu'un changement est détecté dans la branche main :
name: Création Automatique de PR
on:
push:
branches:
- main
jobs:
create_pr:
runs-on: ubuntu-latest
steps:
- name: Checkout le code
uses: actions/checkout@v3
- name: Créer une branche
run: git checkout -b feature/nouvelle-fonctionnalite
- name: Faire des changements (exemple)
run: echo "Nouvelle fonctionnalité" >> fichier.txt
- name: Commit les changements
run: |
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
git add .
git commit -m "Ajout d'une nouvelle fonctionnalité"
- name: Push la branche
run: git push origin feature/nouvelle-fonctionnalite
- name: Créer une Pull Request
uses: actions/github-script@v6
with:
github-token: ${{ secrets.PAT_PR_CREATION }}
script: |
github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Nouvelle fonctionnalité',
head: 'feature/nouvelle-fonctionnalite',
base: 'main'
});
Ce workflow effectue les étapes suivantes :
- Il se déclenche lorsqu'un commit est poussé sur la branche
main. - Il checkout le code du dépôt.
- Il crée une nouvelle branche nommée
feature/nouvelle-fonctionnalite. - Il effectue des changements (dans cet exemple, il ajoute une ligne à un fichier).
- Il commit les changements.
- Il push la nouvelle branche.
- Il crée une Pull Request en utilisant l'action
github-scriptet le PAT pour s'authentifier.
Conclusion : Maîtriser la Création Automatique de PR avec GitHub Actions
En conclusion, la restriction de sécurité qui empêche les workflows GitHub Actions déclenchés par pull_request de créer automatiquement des PR peut sembler un obstacle majeur. Cependant, en comprenant la raison d'être de cette restriction et en utilisant un Personal Access Token (PAT) de manière appropriée, il est tout à fait possible de contourner cette limitation et de mettre en place des workflows d'automatisation puissants et efficaces.
L'utilisation d'un PAT offre une solution flexible et sécurisée pour gérer les permissions et permettre à vos workflows d'interagir avec votre dépôt GitHub de manière contrôlée. En suivant les étapes décrites dans cet article, vous pouvez créer des workflows qui automatisent la création de Pull Requests, vous faisant gagner du temps et améliorant votre flux de travail de développement.
N'oubliez pas de consulter la documentation officielle GitHub sur les actions pour approfondir vos connaissances et découvrir toutes les possibilités offertes par cette plateforme d'automatisation.