Prérequis
Pour en savoir plus sur les flux de travail et le déclenchement de flux de travail, consultez Workflows.
DĂ©clenchement dâun workflow Ă partir dâun workflow
Lorsque vous utilisez le GITHUB_TOKEN
du référentiel pour effectuer des tùches, les événements déclenchés par le GITHUB_TOKEN
, Ă lâexception du workflow_dispatch
et du repository_dispatch
, ne crĂ©eront pas une nouvelle exĂ©cution du flux de travail. Cela vous empĂȘche de crĂ©er accidentellement des exĂ©cutions de workflow rĂ©cursives. Par exemple, si une exĂ©cution de workflow pousse (push) du code Ă lâaide du GITHUB_TOKEN
du dĂ©pĂŽt, aucun nouveau workflow ne sâexĂ©cute mĂȘme quand le dĂ©pĂŽt contient un workflow configurĂ© pour sâexĂ©cuter quand des Ă©vĂ©nements push
se produisent. Pour plus dâinformations, consultez « Utiliser GITHUB_TOKEN pour lâauthentification dans les flux de travail ».
Si vous souhaitez dĂ©clencher un workflow Ă partir dâune exĂ©cution de workflow, vous pouvez utiliser une GitHub App ou un personal access token au lieu de GITHUB_TOKEN
pour déclencher des événements qui nécessitent un jeton.
Si vous utilisez une GitHub App, vous devez crĂ©er une GitHub App et stocker lâID dâapplication et la clĂ© privĂ©e en tant que secrets. Pour plus dâinformations, consultez « Effectuer des requĂȘtes dâAPI authentifiĂ©es avec une application GitHub dans un workflow GitHub Actions ». Si vous utilisez un personal access token, vous devez crĂ©er un personal access token et le stocker en tant que secret. Pour plus dâinformations sur la crĂ©ation dâun personal access token, consultez « Gestion de vos jetons d'accĂšs personnels ». Pour plus dâinformations sur le stockage de secrets, consultez « Utilisation de secrets dans GitHub Actions ».
Pour rĂ©duire vos coĂ»ts dâutilisation de GitHub Actions, veillez Ă ne pas crĂ©er dâexĂ©cutions de workflow rĂ©cursives ou involontaires.
Par exemple, le workflow suivant utilise un personal access token (stocké en tant que secret appelé MY_TOKEN
) pour ajouter une Ă©tiquette Ă un problĂšme via GitHub CLI. Tous les workflows qui sâexĂ©cutent lorsquâune Ă©tiquette est ajoutĂ©e sâexĂ©cutent une fois cette Ă©tape effectuĂ©e.
on:
issues:
types:
- opened
jobs:
label_issue:
runs-on: ubuntu-latest
steps:
- env:
GH_TOKEN: ${{ secrets.MY_TOKEN }}
ISSUE_URL: ${{ github.event.issue.html_url }}
run: |
gh issue edit $ISSUE_URL --add-label "triage"
Ă lâinverse, le workflow suivant utilise GITHUB_TOKEN
pour ajouter une Ă©tiquette Ă un problĂšme. Il ne dĂ©clenche aucun workflow qui sâexĂ©cute lorsquâune Ă©tiquette est ajoutĂ©e.
on:
issues:
types:
- opened
jobs:
label_issue:
runs-on: ubuntu-latest
steps:
- env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE_URL: ${{ github.event.issue.html_url }}
run: |
gh issue edit $ISSUE_URL --add-label "triage"
Utilisation dâĂ©vĂ©nements pour dĂ©clencher des workflows
Utilisez la clé on
pour spĂ©cifier quels Ă©vĂ©nements dĂ©clenchent votre workflow. Pour plus dâinformations sur les Ă©vĂ©nements que vous pouvez utiliser, consultez « ĂvĂ©nements qui dĂ©clenchent des flux de travail ».
Utilisation dâun seul Ă©vĂ©nement
Par exemple, un workflow avec la valeur on
suivante sâexĂ©cute quand une poussĂ©e (push) est effectuĂ©e dans une branche incluse dans son dĂ©pĂŽt :
on: push
Utilisation de plusieurs événements
Vous pouvez spécifier un événement unique ou plusieurs événements. Par exemple, un workflow avec la valeur on
suivante sâexĂ©cute quand une poussĂ©e (push) est effectuĂ©e dans une branche du dĂ©pĂŽt ou quand quelquâun duplique (fork) le dĂ©pĂŽt :
on: [push, fork]
Si vous spĂ©cifiez plusieurs Ă©vĂ©nements, un seul de ces Ă©vĂ©nements a besoin de se produire pour dĂ©clencher votre workflow. Si plusieurs Ă©vĂ©nements dĂ©clencheurs se produisent pour votre workflow en mĂȘme temps, plusieurs exĂ©cutions de workflow sont dĂ©clenchĂ©es.
Utilisation de types dâactivitĂ©s et de filtres avec plusieurs Ă©vĂ©nements
Vous pouvez utiliser des types dâactivitĂ©s et des filtres pour contrĂŽler davantage le moment oĂč votre workflow sâexĂ©cute. Pour plus dâinformations, consultez Utilisation de types dâactivitĂ©s dâĂ©vĂ©nement et Utilisation de filtres. Si vous spĂ©cifiez des types dâactivitĂ©s ou des filtres pour un Ă©vĂ©nement et que votre workflow se dĂ©clenche sur plusieurs Ă©vĂ©nements, vous devez configurer chaque Ă©vĂ©nement sĂ©parĂ©ment. Vous devez ajouter un signe deux-points (:
) à tous les événements, notamment aux événements sans configuration.
Par exemple, un workflow avec la valeur on
suivante sâexĂ©cute quand :
- Une étiquette est créée.
- Une poussée (push) est effectuée dans la branche
main
du dépÎt. - Une poussée (push) est effectuée dans une branche compatible avec GitHub Pages.
on:
label:
types:
- created
push:
branches:
- main
page_build:
Utilisation de types dâactivitĂ©s dâĂ©vĂ©nement
Certains Ă©vĂ©nements ont des types dâactivitĂ©s qui vous donnent davantage de contrĂŽle sur le moment oĂč votre workflow devrait sâexĂ©cuter. Utilisez on.<event_name>.types
pour dĂ©finir le type dâactivitĂ© dâĂ©vĂ©nement qui dĂ©clenchera lâexĂ©cution dâun workflow.
Par exemple, lâĂ©vĂ©nement issue_comment
a les types dâactivitĂ© created
, edited
et deleted
. Si votre worflow se dĂ©clenche sur lâĂ©vĂ©nement label
, il sâexĂ©cute chaque fois quâune Ă©tiquette est créée, modifiĂ©e ou supprimĂ©e. Si vous spĂ©cifiez le type dâactivitĂ© created
de lâĂ©vĂ©nement label
, votre workflow sâexĂ©cute quand une Ă©tiquette est créée, mais pas quand une Ă©tiquette est modifiĂ©e ou supprimĂ©e.
on:
label:
types:
- created
Si vous spĂ©cifiez plusieurs types dâactivitĂ©s, un seul de ceux-ci doit se produire pour dĂ©clencher votre workflow. Si plusieurs types dâactivitĂ© dâĂ©vĂ©nement dĂ©clencheur pour votre workflow se produisent simultanĂ©ment, plusieurs exĂ©cutions de workflow seront dĂ©clenchĂ©es. Par exemple, le workflow suivant se dĂ©clenche quand un problĂšme est ouvert ou Ă©tiquetĂ©. Si un problĂšme avec deux Ă©tiquettes est ouvert, trois exĂ©cutions de workflow dĂ©marrent : une pour lâĂ©vĂ©nement dâouverture du problĂšme, et deux pour les deux Ă©vĂ©nements Ă©tiquetĂ©s du problĂšme.
on:
issues:
types:
- opened
- labeled
Pour plus dâinformations sur chaque Ă©vĂ©nement et leurs types dâactivitĂ©, consultez ĂvĂ©nements qui dĂ©clenchent des flux de travail.
Utilisation de filtres
Certains Ă©vĂ©nements comportent des filtres qui vous permettent de mieux contrĂŽler le moment oĂč votre workflow devrait sâexĂ©cuter.
Par exemple, lâĂ©vĂ©nement push
comporte un filtre branches
avec lequel votre workflow ne sâexĂ©cute que lorsquâun envoi (push) vers une branche qui correspond au filtre branches
se produit, et non lorsque nâimporte quel envoi se produit.
on:
push:
branches:
- main
- 'releases/**'
Utilisation de filtres afin de cibler des branches spécifiques pour les événements de demande de tirage (pull request)
Quand vous utilisez les événements pull_request
et pull_request_target
vous pouvez configurer un workflow afin quâil sâexĂ©cute uniquement pour les demandes de tirage (pull requests) qui ciblent des branches spĂ©cifiques.
Utilisez le filtre branches
quand vous souhaitez inclure des modĂšles de noms de branches, ou quand vous souhaitez Ă la fois inclure et exclure des modĂšles de noms de branches. Utilisez le filtre branches-ignore
quand vous souhaitez exclure uniquement les modĂšles de nom de branche. Vous ne pouvez pas utiliser les filtres branches
et branches-ignore
en mĂȘme temps pour le mĂȘme Ă©vĂ©nement dans un workflow.
Si vous définissez à la fois branches
/branches-ignore
et paths
/paths-ignore
, le workflow sâexĂ©cute uniquement quand les deux filtres sont satisfaits.
Les mots clés branches
et branches-ignore
acceptent les modĂšles Glob qui utilisent des caractĂšres tels que *
, **
, +
, ?
, !
et certains autres pour correspondre Ă plusieurs noms de branches. Si un nom contient lâun de ces caractĂšres et si vous souhaitez une correspondance littĂ©rale, vous devez utiliser le caractĂšre dâĂ©chappement \
avec chacun de ces caractĂšres spĂ©ciaux. Pour plus dâinformations sur les modĂšles glob, consultez lâWorkflow syntax for GitHub Actions.
Exemple : Inclusion de branches
Les modÚles définis dans branches
sont Ă©valuĂ©s par rapport au nom de la rĂ©fĂ©rence Git. Par exemple, le workflow suivant sâexĂ©cute chaque fois quâil existe un Ă©vĂ©nement pull_request
pour une demande de tirage qui cible :
- Une branche nommée
main
(refs/heads/main
) - Une branche nommée
mona/octocat
(refs/heads/mona/octocat
) - Une branche dont le nom commence par
releases/
, par exemplereleases/10
(refs/heads/releases/10
)
on:
pull_request:
# Sequence of patterns matched against refs/heads
branches:
- main
- 'mona/octocat'
- 'releases/**'
Vous ne devez pas utiliser le filtrage de chemin dâaccĂšs ou de branche pour ignorer les exĂ©cutions de workflow si celui-ci doit aboutir avant la fusion. Pour plus dâinformations, consultez « ExĂ©cutions de workflow ignorĂ©es » et « RĂšgles disponibles pour les ensembles de rĂšgles ».
Si un workflow est ignorĂ© en raison du filtrage de branche, du filtrage de chemin dâaccĂšs ou dâun message de commit, les vĂ©rifications associĂ©es Ă ce workflow restent alors Ă lâĂ©tat « En attente ». La fusion dâune demande de tirage (pull request) nĂ©cessitant la rĂ©ussite de ces vĂ©rifications sera bloquĂ©e.
Exemple : Exclusion de branches
Quand un modĂšle correspond au modĂšle branches-ignore
, le workflow ne sâexĂ©cute pas. Les modĂšles dĂ©finis dans branches-ignore
sont Ă©valuĂ©s par rapport au nom de la rĂ©fĂ©rence Git. Par exemple, le workflow suivant sâexĂ©cute chaque fois quâil existe un Ă©vĂ©nement pull_request
, sauf si la demande de tirage cible :
- Une branche nommée
mona/octocat
(refs/heads/mona/octocat
) - Une branche dont le nom correspond Ă
releases/**-alpha
, par exemplereleases/beta/3-alpha
(refs/heads/releases/beta/3-alpha
)
on:
pull_request:
# Sequence of patterns matched against refs/heads
branches-ignore:
- 'mona/octocat'
- 'releases/**-alpha'
Exemple : Inclusion et exclusion de branches
Vous ne pouvez pas utiliser branches
et branches-ignore
pour filtrer le mĂȘme Ă©vĂ©nement dans un seul workflow. Si vous souhaitez Ă la fois inclure et exclure des modĂšles de branche pour un seul Ă©vĂ©nement, utilisez le filtre branches
avec le caractĂšre !
pour indiquer les branches Ă exclure.
Si vous définissez une branche avec le caractÚre !
, vous devez également définir au moins une branche sans le caractÚre !
. Si vous souhaitez uniquement exclure des branches, utilisez branches-ignore
Ă la place.
Lâordre dans lequel vous dĂ©finissez les modĂšles est important.
- Un modÚle de correspondance négative (préfixé avec
!
) aprÚs une correspondance positive exclut la référence Git. - Un modÚle de correspondance positive aprÚs une correspondance négative inclut à nouveau la référence Git.
Le workflow suivant sâexĂ©cute sur les Ă©vĂ©nements pull_request
pour les demandes de tirage qui ciblent releases/10
ou releases/beta/mona
, mais pas pour les demandes de tirage qui ciblent releases/10-alpha
ou releases/beta/3-alpha
, car le modÚle négatif !releases/**-alpha
suit le modĂšle positif.
on:
pull_request:
branches:
- 'releases/**'
- '!releases/**-alpha'
Utilisation de filtres afin de cibler des branches ou des étiquettes spécifiques pour les événements de transmission de type push
Lorsque vous utilisez lâĂ©vĂ©nement push
, vous pouvez configurer un workflow pour quâil sâexĂ©cute sur des branches ou des Ă©tiquettes spĂ©cifiques.
Utilisez le filtre branches
lorsque vous souhaitez inclure des modĂšles de noms de branche ou lorsque vous souhaitez inclure et exclure des modĂšles de noms de branche. Utilisez le filtre branches-ignore
quand vous souhaitez exclure uniquement les modĂšles de nom de branche. Vous ne pouvez pas utiliser les filtres branches
et branches-ignore
en mĂȘme temps pour le mĂȘme Ă©vĂ©nement dans un workflow.
Utilisez le filtre tags
lorsque vous souhaitez inclure des modĂšles de nom dâĂ©tiquette ou lorsque vous souhaitez inclure et exclure des modĂšles de noms dâĂ©tiquette. Utilisez le filtre tags-ignore
lorsque vous souhaitez exclure uniquement les modĂšles de nom dâĂ©tiquette. Vous ne pouvez pas utiliser les filtres tags
et tags-ignore
en mĂȘme temps pour le mĂȘme Ă©vĂ©nement dans un workflow.
Si vous définissez uniquement tags
/tags-ignore
ou uniquement branches
/branches-ignore
, le flux de travail ne sâexĂ©cutera pas pour les Ă©vĂ©nements affectant la rĂ©fĂ©rence Git non dĂ©finie. Si vous dĂ©finissez ni tags
/tags-ignore
ou branches
/branches-ignore
, le flux de travail sera exécuté pour les événements affectant les branches ou les étiquettes. Si vous définissez à la fois branches
/branches-ignore
et paths
/paths-ignore
, le workflow sâexĂ©cute uniquement quand les deux filtres sont satisfaits.
Les mots clés branches
, branches-ignore
, tags
et tags-ignore
acceptent des modĂšles Glob qui utilisent des caractĂšres tels que *
, **
, +
, ?
, !
et dâautres pour correspondre Ă plus dâun nom de branche ou dâĂ©tiquette Si un nom contient lâun de ces caractĂšres et que vous souhaitez une correspondance littĂ©rale, vous devez Ă©chapper chacun de ces caractĂšres spĂ©ciaux avec \
. Pour plus dâinformations sur les modĂšles glob, consultez lâWorkflow syntax for GitHub Actions.
Exemple : Inclure des branches et des étiquettes
Les modÚles définis dans branches
et tags
sont Ă©valuĂ©s par rapport au nom de la rĂ©fĂ©rence Git. Par exemple, le workflow suivant sâexĂ©cuterait chaque fois quâil existe un Ă©vĂ©nement push
pour :
- Une branche nommée
main
(refs/heads/main
) - Une branche nommée
mona/octocat
(refs/heads/mona/octocat
) - Une branche dont le nom commence par
releases/
, par exemplereleases/10
(refs/heads/releases/10
) - Une étiquette nommée
v2
(refs/tags/v2
) - Une étiquette dont le nom commence par
v1.
, commev1.9.1
(refs/tags/v1.9.1
)
on:
push:
# Sequence of patterns matched against refs/heads
branches:
- main
- 'mona/octocat'
- 'releases/**'
# Sequence of patterns matched against refs/tags
tags:
- v2
- v1.*
Exemple : Exclusion de branches et dâĂ©tiquettes
Lorsquâun modĂšle correspond au modĂšle branches-ignore
ou tags-ignore
, le workflow nâest pas exĂ©cutĂ©. Les modĂšles dĂ©finis dans branches
et tags
sont Ă©valuĂ©s par rapport au nom de la rĂ©fĂ©rence Git. Par exemple, le workflow suivant sâexĂ©cuterait chaque fois quâil existe un Ă©vĂ©nement push
, sauf si lâĂ©vĂ©nement push
concerne :
- Une branche nommée
mona/octocat
(refs/heads/mona/octocat
) - Une branche dont le nom correspond Ă
releases/**-alpha
, par exemplereleases/beta/3-alpha
(refs/heads/releases/beta/3-alpha
) - Une étiquette nommée
v2
(refs/tags/v2
) - Une étiquette dont le nom commence par
v1.
, commev1.9
(refs/tags/v1.9
)
on:
push:
# Sequence of patterns matched against refs/heads
branches-ignore:
- 'mona/octocat'
- 'releases/**-alpha'
# Sequence of patterns matched against refs/tags
tags-ignore:
- v2
- v1.*
Exemple : Inclure et exclure des branches et des étiquettes
Vous ne pouvez pas utiliser branches
et branches-ignore
pour filtrer le mĂȘme Ă©vĂ©nement dans un mĂȘme workflow. De mĂȘme, vous ne pouvez pas utiliser tags
et tags-ignore
pour filtrer le mĂȘme Ă©vĂ©nement dans un mĂȘme workflow. Si vous souhaitez inclure et exclure des modĂšles de branche ou dâĂ©tiquette pour un seul Ă©vĂ©nement, utilisez le filtre branches
ou tags
avec le caractĂšre !
pour indiquer quelles branches ou Ă©tiquettes doivent ĂȘtre exclues.
Si vous définissez une branche avec le caractÚre !
, vous devez également définir au moins une branche sans caractÚre !
. Si vous souhaitez uniquement exclure des branches, utilisez branches-ignore
Ă la place. De mĂȘme, si vous dĂ©finissez une Ă©tiquette avec le caractĂšre !
, vous devez également définir au moins une étiquette sans caractÚre !
. Si vous souhaitez uniquement exclure des étiquettes, utilisez tags-ignore
Ă la place.
Lâordre dans lequel vous dĂ©finissez les modĂšles est important.
- Un modÚle de correspondance négative (préfixé avec
!
) aprÚs une correspondance positive exclut la référence Git. - Un modÚle de correspondance positive aprÚs une correspondance négative inclut à nouveau la référence Git.
Le workflow suivant sâexĂ©cute sur les envois push vers releases/10
ou releases/beta/mona
, mais pas sur releases/10-alpha
ou releases/beta/3-alpha
parce que le modÚle négatif !releases/**-alpha
fait suite au modĂšle positif.
on:
push:
branches:
- 'releases/**'
- '!releases/**-alpha'
Utilisation de filtres afin de cibler des chemins spécifiques pour les événements de demande de tirage (pull request) ou de transmission de type push
Lorsque vous utilisez les événements push
et pull_request
Ă©vĂ©nements, vous pouvez configurer un workflow pour quâil sâexĂ©cute en fonction des chemins dâaccĂšs aux fichiers qui ont changĂ©. Les filtres de chemin dâaccĂšs ne sont pas Ă©valuĂ©s pour les envois (push) dâĂ©tiquettes.
Utilisez le filtre paths
lorsque vous souhaitez inclure des modĂšles de chemins dâaccĂšs aux fichiers, ou lorsque vous souhaitez Ă la fois inclure et exclure des modĂšles de modĂšles de chemins dâaccĂšs aux fichiers. Utilisez le filtre paths-ignore
lorsque vous souhaitez uniquement exclure modĂšles de chemins dâaccĂšs aux fichiers. Vous ne pouvez pas utiliser les filtres paths
et paths-ignore
en mĂȘme temps pour le mĂȘme Ă©vĂ©nement dans un workflow. Si vous souhaitez inclure et exclure des modĂšles de chemin dâaccĂšs pour un seul Ă©vĂ©nement, utilisez le filtre paths
avec en préfixe le caractÚre !
pour indiquer les chemins dâaccĂšs Ă exclure.
Remarque
Lâordre dans lequel vous dĂ©finissez les modĂšles paths
est important :
- Un modÚle négatif de correspondance (préfixé avec
!
) aprĂšs une correspondance positive exclut le chemin dâaccĂšs. - Un modĂšle positif de correspondance aprĂšs une correspondance nĂ©gative inclut Ă nouveau le chemin dâaccĂšs.
Si vous définissez à la fois branches
/branches-ignore
et paths
/paths-ignore
, le workflow sâexĂ©cute uniquement quand les deux filtres sont satisfaits.
Les mots clés paths
et paths-ignore
acceptent des modÚles globaux qui utilisent les caractÚres génériques *
et **
pour faire correspondre plusieurs noms de chemin dâaccĂšs. Pour plus dâinformations, consultez Workflow syntax for GitHub Actions.
Exemple : Inclusion de chemins dâaccĂšs
Si au moins un chemin dâaccĂšs correspond Ă un modĂšle dans le filtre paths
, le workflow sâexĂ©cute. Par exemple, le workflow suivant sâexĂ©cuterait chaque fois que vous envoyez (push) un fichier JavaScript (.js
).
on:
push:
paths:
- '**.js'
Vous ne devez pas utiliser le filtrage de chemin dâaccĂšs ou de branche pour ignorer les exĂ©cutions de workflow si celui-ci doit aboutir avant la fusion. Pour plus dâinformations, consultez « ExĂ©cutions de workflow ignorĂ©es » et « RĂšgles disponibles pour les ensembles de rĂšgles ».
Si un workflow est ignorĂ© en raison du filtrage de chemin dâaccĂšs, du filtrage de branche ou dâun message de commit, les vĂ©rifications associĂ©es Ă ce workflow restent alors Ă lâĂ©tat « En attente ». La fusion dâune demande de tirage (pull request) nĂ©cessitant la rĂ©ussite de ces vĂ©rifications sera bloquĂ©e.
Exemple : Exclusion de chemins dâaccĂšs
Lorsque tous les noms de chemin dâaccĂšs correspondent Ă des modĂšles dans paths-ignore
, le workflow ne sâexĂ©cute pas. Si des noms de chemin dâaccĂšs ne correspondent pas Ă des modĂšles dans paths-ignore
, mĂȘme si certains noms de chemin dâaccĂšs correspondent aux modĂšles, le workflow sâexĂ©cute.
Un workflow avec le filtre de chemin dâaccĂšs suivant sâexĂ©cute uniquement sur des Ă©vĂ©nements push
qui incluent au moins un fichier en dehors du répertoire docs
à la racine du dépÎt.
on:
push:
paths-ignore:
- 'docs/**'
Exemple : Inclusion et exclusion de chemins dâaccĂšs
Vous ne pouvez pas utiliser paths
et paths-ignore
pour filtrer le mĂȘme Ă©vĂ©nement dans un seul workflow. Si vous souhaitez inclure et exclure des modĂšles de chemin dâaccĂšs pour un seul Ă©vĂ©nement, utilisez le filtre paths
avec en préfixe le caractÚre !
pour indiquer les chemins dâaccĂšs Ă exclure.
Si vous dĂ©finissez un chemin dâaccĂšs avec le caractĂšre !
, vous devez Ă©galement dĂ©finir au moins un chemin dâaccĂšs sans caractĂšre !
. Si vous souhaitez uniquement exclure des chemins dâaccĂšs, utilisez plutĂŽt paths-ignore
.
Lâordre dans lequel vous dĂ©finissez les modĂšles paths
est important :
- Un modÚle négatif de correspondance (préfixé avec
!
) aprĂšs une correspondance positive exclut le chemin dâaccĂšs. - Un modĂšle positif de correspondance aprĂšs une correspondance nĂ©gative inclut Ă nouveau le chemin dâaccĂšs.
Cet exemple sâexĂ©cute Ă chaque fois que lâĂ©vĂ©nement push
inclut un fichier dans le répertoire sub-project
ou ses sous-répertoires, sauf si le fichier se trouve dans le répertoire sub-project/docs
. Par exemple, un envoi (push) qui change sub-project/index.js
ou sub-project/src/index.js
dĂ©clenche lâexĂ©cution dâun workflow, au contraire dâun envoi (push) changeant uniquement sub-project/docs/readme.md
.
on:
push:
paths:
- 'sub-project/**'
- '!sub-project/docs/**'
Comparaisons de différences Git
Remarque
Si vous envoyez plus de 1 000 validations ou si GitHub ne gĂ©nĂšre pas la diffĂ©rence en raison dâun dĂ©lai dâexpiration, le workflow sâexĂ©cute toujours.
Le filtre dĂ©termine si un workflow doit sâexĂ©cuter en Ă©valuant les fichiers modifiĂ©s et en les exĂ©cutant sur la liste paths-ignore
ou paths
. Sâil nây a pas de fichier modifiĂ©, le workflow ne sâexĂ©cute pas.
GitHub gĂ©nĂšre la liste des fichiers modifiĂ©s Ă lâaide de diffĂ©rences de deux points pour les envois (push) et de diffĂ©rences de trois points pour les demandes de tirage :
- Demandes de tirage : les différences de trois points sont une comparaison entre la version la plus récente de la branche de rubrique, et la validation dans laquelle la branche de rubrique a été synchronisée pour la derniÚre fois avec la branche de base.
- Envois (push) à des branches existantes : une différence de deux points compare directement les SHA principal et de base.
- Envois (push) Ă nouvelles branches : une diffĂ©rence de deux points par rapport au parent de lâĂ©lĂ©ment ancĂȘtre de la validation la plus profonde envoyĂ©es (push).
Remarque
Les diffĂ©rences sont limitĂ©es Ă 300 fichiers. Sâil y a des fichiers modifiĂ©s qui ne sont pas mis en correspondance dans les 300 premiers fichiers retournĂ©s par le filtre, le workflow nâest pas exĂ©cutĂ©. Il se peut que vous deviez crĂ©er des filtres plus spĂ©cifiques afin que le workflow sâexĂ©cute automatiquement.
Pour plus dâinformations, consultez « Ă propos de la comparaison des branches dans les demandes de tirage ».
Utilisation de filtres afin de cibler des branches spĂ©cifiques pour les Ă©vĂ©nements dâexĂ©cution de workflow
Lorsque vous utilisez lâĂ©vĂ©nement workflow_run
, vous pouvez spĂ©cifier les branches sur lesquelles le workflow dĂ©clencheur doit sâexĂ©cuter afin de dĂ©clencher votre workflow.
Les filtres branches
et branches-ignore
acceptent les modĂšles Glob qui utilisent des caractĂšres tels que *
, **
, +
, ?
, !
et certains autres pour correspondre Ă plusieurs noms de branches. Si un nom contient lâun de ces caractĂšres et que vous souhaitez une correspondance littĂ©rale, vous devez Ă©chapper chacun de ces caractĂšres spĂ©ciaux avec \
. Pour plus dâinformations sur les modĂšles glob, consultez lâWorkflow syntax for GitHub Actions.
Par exemple, un workflow avec le dĂ©clencheur suivant sâexĂ©cute uniquement lorsque le workflow nommĂ© Build
sâexĂ©cute sur une branche dont le nom commence par releases/
:
on:
workflow_run:
workflows: ["Build"]
types: [requested]
branches:
- 'releases/**'
Un workflow avec le dĂ©clencheur suivant sâexĂ©cute uniquement lorsque le workflow nommĂ© Build
sâexĂ©cute sur une branche qui nâest pas nommĂ©e canary
:
on:
workflow_run:
workflows: ["Build"]
types: [requested]
branches-ignore:
- "canary"
Vous ne pouvez pas utiliser les filtres branches
et branches-ignore
en mĂȘme temps pour le mĂȘme Ă©vĂ©nement dans un workflow. Si vous souhaitez Ă la fois inclure et exclure des modĂšles de branche pour un seul Ă©vĂ©nement, utilisez le filtre branches
avec le caractĂšre !
pour indiquer les branches Ă exclure.
Lâordre dans lequel vous dĂ©finissez les modĂšles est important.
- Un modÚle négatif de correspondance (préfixé avec
!
) aprÚs une correspondance positive exclut la branche. - Un modÚle positif de correspondance aprÚs une correspondance négative inclut à nouveau la branche.
Par exemple, un workflow avec le dĂ©clencheur suivant sâexĂ©cute lorsque le workflow nommĂ© Build
sâexĂ©cute sur une branche nommĂ©e releases/10
ou releases/beta/mona
, mais pas releases/10-alpha
, releases/beta/3-alpha
ni main
.
on:
workflow_run:
workflows: ["Build"]
types: [requested]
branches:
- 'releases/**'
- '!releases/**-alpha'
DĂ©finition dâentrĂ©es pour les workflows dĂ©clenchĂ©s manuellement
Quand vous utilisez lâĂ©vĂ©nement workflow_dispatch
, vous pouvez éventuellement spécifier des entrées qui sont passées au workflow.
Ce déclencheur reçoit uniquement les événements lorsque le fichier de flux de travail se trouve sur la branche par défaut.
Le workflow déclenché reçoit les entrées dans le contexte inputs
. Pour plus dâinformations, consultez Contextes.
Remarque
- Le workflow recevra également les entrées dans le contexte
github.event.inputs
. Les informations dans le contexteinputs
et le contextegithub.event.inputs
sont identiques, Ă lâexception du fait que le contexteinputs
conserve les valeurs booléennes en tant que valeurs booléennes au lieu de les convertir en chaßnes. Le typechoice
est résolu en chaßne et est une option sélectionnable unique. - Le nombre maximal de propriétés de niveau supérieur pour
inputs
est de 10. - La charge utile maximale pour
inputs
est de 65 535 caractĂšres.
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
print_tags:
description: 'True to print to STDOUT'
required: true
type: boolean
tags:
description: 'Test scenario tags'
required: true
type: string
environment:
description: 'Environment to run tests against'
type: environment
required: true
jobs:
print-tag:
runs-on: ubuntu-latest
if: ${{ inputs.print_tags }}
steps:
- name: Print the input tag to STDOUT
run: echo The tags are ${{ inputs.tags }}
DĂ©finition dâentrĂ©es, de sorties et de secrets pour les workflows rĂ©utilisables
Vous pouvez dĂ©finir des entrĂ©es et des secrets quâun workflow rĂ©utilisable doit recevoir dâun workflow appelant. Vous pouvez Ă©galement spĂ©cifier des sorties quâun workflow rĂ©utilisable met Ă la disposition dâun workflow appelant. Pour plus dâinformations, consultez « RĂ©utiliser des workflows ».
Utilisation des informations sur lâĂ©vĂ©nement
Des informations sur lâĂ©vĂ©nement qui a dĂ©clenchĂ© une exĂ©cution de workflow sont disponibles dans le contexte github.event
. Les propriétés du contexte github.event
dĂ©pendent du type dâĂ©vĂ©nement qui a dĂ©clenchĂ© le workflow. Par exemple, un workflow dĂ©clenchĂ© lorsquâun problĂšme est Ă©tiquetĂ© aurait des informations concernant le problĂšme et lâĂ©tiquette.
Affichage de toutes les propriĂ©tĂ©s dâun Ă©vĂ©nement
Reportez-vous Ă la documentation des Ă©vĂ©nements de webhook pour connaĂźtre les propriĂ©tĂ©s courantes et obtenir des exemples de charges utiles. Pour plus dâinformations, consultez « ĂvĂ©nements et charges utiles du webhook ».
Vous pouvez Ă©galement imprimer lâintĂ©gralitĂ© du contexte github.event
pour voir quelles propriĂ©tĂ©s sont disponibles pour lâĂ©vĂ©nement qui a dĂ©clenchĂ© votre workflow :
jobs:
print_context:
runs-on: ubuntu-latest
steps:
- env:
EVENT_CONTEXT: ${{ toJSON(github.event) }}
run: |
echo $EVENT_CONTEXT
AccĂšs et utilisation de propriĂ©tĂ©s dâĂ©vĂ©nement
Vous pouvez utiliser le contexte github.event
dans votre workflow. Par exemple, le workflow suivant sâexĂ©cute lorsquâune demande de tirage qui change package*.json
, .github/CODEOWNERS
ou .github/workflows/**
est ouverte. Si lâauteur de la demande de tirage (github.event.pull_request.user.login
) nâest pas octobot
ou dependabot[bot]
, le workflow utilise lâGitHub CLI pour Ă©tiqueter et commenter la demande de tirage (github.event.pull_request.number
).
on:
pull_request:
types:
- opened
paths:
- '.github/workflows/**'
- '.github/CODEOWNERS'
- 'package*.json'
jobs:
triage:
if: >-
github.event.pull_request.user.login != 'octobot' &&
github.event.pull_request.user.login != 'dependabot[bot]'
runs-on: ubuntu-latest
steps:
- name: "Comment about changes we can't accept"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR: ${{ github.event.pull_request.html_url }}
run: |
gh pr edit $PR --add-label 'invalid'
gh pr comment $PR --body 'It looks like you edited `package*.json`, `.github/CODEOWNERS`, or `.github/workflows/**`. We do not allow contributions to these files. Please review our [contributing guidelines](https://github.com/octo-org/octo-repo/blob/main/CONTRIBUTING.md) for what contributions are accepted.'
Pour plus dâinformations sur les contextes, consultez « RĂ©fĂ©rence sur les contextes ». Pour plus dâinformations sur les charges utiles dâĂ©vĂ©nement, consultez « ĂvĂ©nements et charges utiles du webhook ».
ContrĂŽle supplĂ©mentaire de lâexĂ©cution de votre workflow
Si vous souhaitez un contrĂŽle plus prĂ©cis que ne le permettent les Ă©vĂ©nements, les types dâactivitĂ© dâĂ©vĂ©nement ou les filtres dâĂ©vĂ©nement, vous pouvez utiliser des conditions et des environnements pour contrĂŽler lâexĂ©cution de travaux ou dâĂ©tapes spĂ©cifiques de votre workflow.
Utilisation de conditions
Vous pouvez utiliser des conditions pour contrĂŽler davantage si des travaux ou des Ă©tapes de votre workflow sâexĂ©cuteront.
Exemple utilisant une valeur dans la charge utile de lâĂ©vĂ©nement
Par exemple, si vous souhaitez que le workflow sâexĂ©cute lorsquâune Ă©tiquette spĂ©cifique est ajoutĂ©e Ă un problĂšme, vous pouvez effectuer le dĂ©clenchement sur le type dâactivitĂ© dâĂ©vĂ©nement issues labeled
et utiliser une condition pour vĂ©rifier quelle Ă©tiquette a dĂ©clenchĂ© le workflow. Le workflow suivant sâexĂ©cute quand une Ă©tiquette est ajoutĂ©e Ă un problĂšme dans le dĂ©pĂŽt du workflow, mais le travail run_if_label_matches
sâexĂ©cute uniquement si lâĂ©tiquette est nommĂ©e bug
.
on:
issues:
types:
- labeled
jobs:
run_if_label_matches:
if: github.event.label.name == 'bug'
runs-on: ubuntu-latest
steps:
- run: echo 'The label was bug'
Exemple utilisant un type dâĂ©vĂ©nement
Par exemple, si vous souhaitez exĂ©cuter diffĂ©rents travaux ou diffĂ©rentes Ă©tapes en fonction de lâĂ©vĂ©nement dĂ©clenchĂ© par le workflow, vous pouvez utiliser une condition pour vĂ©rifier sâil existe un type dâĂ©vĂ©nement spĂ©cifique dans le contexte de lâĂ©vĂ©nement. Le workflow suivant sâexĂ©cute chaque fois quâun problĂšme ou une demande de tirage est fermĂ©. Si le workflow a Ă©tĂ© exĂ©cutĂ© parce quâun problĂšme a Ă©tĂ© fermĂ©, le contexte github.event
contient une valeur pour issue
, mais pas pour pull_request
. Par consĂ©quent, lâĂ©tape if_issue
sâexĂ©cute, mais pas lâĂ©tape if_pr
. Ă lâinverse, si le workflow a Ă©tĂ© exĂ©cutĂ© parce quâune demande de tirage a Ă©tĂ© fermĂ©e, lâĂ©tape if_pr
sâexĂ©cute, mais pas lâĂ©tape if_issue
.
on:
issues:
types:
- closed
pull_request:
types:
- closed
jobs:
state_event_type:
runs-on: ubuntu-latest
steps:
- name: if_issue
if: github.event.issue
run: |
echo An issue was closed
- name: if_pr
if: github.event.pull_request
run: |
echo A pull request was closed
Pour en savoir plus sur la nature des informations disponibles dans le contexte dâĂ©vĂ©nement, consultez « Utilisation des informations sur lâĂ©vĂ©nement ». Pour plus dâinformations sur lâutilisation de conditions, consultez « Ăvaluer les expressions dans les workflows et les actions ».
Utilisation dâenvironnements pour dĂ©clencher manuellement des travaux de workflow
Si vous souhaitez dĂ©clencher manuellement un travail spĂ©cifique dâun workflow, vous pouvez utiliser un environnement qui nĂ©cessite lâapprobation dâune Ă©quipe ou dâun utilisateur spĂ©cifique. Tout dâabord, configurez un environnement avec les rĂ©viseurs obligatoires. Pour plus dâinformations, consultez « Gestion des environnements pour le dĂ©ploiement ». Ensuite, rĂ©fĂ©rencez le nom de lâenvironnement dans un travail de votre workflow Ă lâaide de la clĂ© environment:
. Tout travail rĂ©fĂ©rençant lâenvironnement ne sâexĂ©cute quâune fois quâun rĂ©viseur au moins a approuvĂ© le travail.
Par exemple, le workflow suivant sâexĂ©cute chaque fois quâil y a une transmission de type push dans la branche principale. Le travail build
sâexĂ©cute toujours. Le travail publish
sâexĂ©cute uniquement une fois que le travail build
sâest terminĂ© correctement (en raison de needs: [build]
) et que toutes les rĂšgles (y compris les rĂ©viseurs obligatoires) dĂ©finies pour lâenvironnement appelĂ© production
sont respectées ( en raison de environment: production
).
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: build
run: |
echo 'building'
publish:
needs: [build]
runs-on: ubuntu-latest
environment: production
steps:
- name: publish
run: |
echo 'publishing'
Remarque
Les environnements, les secrets dâenvironnement et les rĂšgles de protection de dĂ©ploiement sont disponibles dans les rĂ©fĂ©rentiels publics pour tous les plans GitHub actuels. Ils ne sont pas disponibles sur des plans hĂ©ritĂ©s, tels que Bronze, Argent ou Or. Pour accĂ©der aux environnements, secrets dâenvironnement et branches de dĂ©ploiement dans des dĂ©pĂŽts privĂ©s ou internes, vous devez utiliser GitHub Pro, GitHub Team ou GitHub Enterprise.
ĂvĂ©nements disponibles
Pour obtenir la liste complĂšte des Ă©vĂ©nements disponibles, consultez « ĂvĂ©nements qui dĂ©clenchent des flux de travail ».