Skip to main content

DĂ©clenchement d’un workflow

Comment déclencher automatiquement des workflows GitHub Actions

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 exemple releases/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 exemple releases/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 exemple releases/10 (refs/heads/releases/10)
  • Une Ă©tiquette nommĂ©e v2 (refs/tags/v2)
  • Une Ă©tiquette dont le nom commence par v1., comme v1.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 exemple releases/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., comme v1.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 contexte inputs et le contexte github.event.inputs sont identiques, Ă  l’exception du fait que le contexte inputs conserve les valeurs boolĂ©ennes en tant que valeurs boolĂ©ennes au lieu de les convertir en chaĂźnes. Le type choice 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 Â».