Qu'est-ce qu'un workflow GitHub Actions ?
Mise à jour :
Un workflow est un processus automatisé que vous définissez dans votre repository. Il dit à GitHub : “Quand il se passe X, fais Y”. C’est le cœur de GitHub Actions.
C’est quoi un workflow ?
Un workflow, c’est un fichier texte (YAML) qui décrit :
- Quand s’exécuter (à chaque push ? chaque PR ? tous les lundis ?)
- Quoi faire (lancer des tests ? construire une image ? déployer ?)
- Où le faire (sur quelle machine ?)
Quand la condition est remplie, GitHub lance automatiquement les actions décrites. Vous n’avez rien à faire : tout se passe dans le cloud, sur des machines gérées par GitHub.
Où placer un workflow ?
Les workflows doivent être placés dans un dossier précis de votre code source :
mon-projet/├── src/│ └── ...├── package.json└── .github/ └── workflows/ ├── ci.yml ← Un workflow ├── deploy.yml ← Un autre workflow └── tests.yml ← Encore un autreLes règles à retenir :
- Le dossier doit s’appeler exactement
.github/workflows/(avec le point devant) - Les fichiers doivent avoir l’extension
.ymlou.yaml - Vous pouvez avoir autant de workflows que vous voulez
- Le nom du fichier n’a pas d’importance technique (mais choisissez des noms explicites)
L’essentiel sur la syntaxe des workflows
Les workflows sont écrits en YAML, un format de configuration lisible. Voici les règles essentielles pour éviter les erreurs.
L’indentation est critique
En YAML, l’indentation définit la structure. Pas d’accolades ni de parenthèses : c’est le nombre d’espaces en début de ligne qui compte.
# Niveau 0 (pas d'indentation)jobs: # Niveau 1 (2 espaces) build: # Niveau 2 (4 espaces) runs-on: ubuntu-24.04 steps: # Niveau 3 (6 espaces) - name: Checkout # Niveau 4 (8 espaces) uses: actions/checkout@v4Erreur classique :
# ❌ ERREUR : steps n'est pas indenté sous buildjobs: build: runs-on: ubuntu-24.04steps: # ← Mauvais niveau ! - run: echo "Hello"
# ✅ CORRECT : steps est au bon niveau (4 espaces)jobs: build: runs-on: ubuntu-24.04 steps: - run: echo "Hello"Commandes sur plusieurs lignes
Pour exécuter plusieurs commandes, utilisez le caractère | (pipe) :
- name: Build and test run: | echo "Installation..." npm ci npm test npm run buildChaque ligne après le | est exécutée comme une commande séparée.
Quand utiliser des guillemets ?
Les guillemets sont optionnels sauf quand votre texte contient des caractères
spéciaux (: # { } & * ?) :
# ❌ Les deux-points cassent l'interprétationmessage: Note: important
# ✅ Guillemets nécessairesmessage: "Note: important"Pour approfondir YAML, consultez notre guide complet sur YAML.
Les 3 grandes parties d’un workflow
Tout workflow est structuré en trois parties principales :
1. Le nom (name)
name: Tests unitairesC’est le nom qui apparaît dans l’interface GitHub, dans l’onglet “Actions”. Choisissez quelque chose de descriptif pour vous y retrouver quand vous aurez plusieurs workflows.
2. Le déclencheur (on)
on: push: branches: [main]Le déclencheur définit quand le workflow s’exécute. C’est l’événement qui “réveille” votre workflow. Sans déclencheur, le workflow ne s’exécute jamais.
3. Les jobs (jobs)
jobs: test: runs-on: ubuntu-24.04 steps: - run: npm testLes jobs définissent ce que fait le workflow. Un job est un ensemble de tâches (steps) qui s’exécutent sur une même machine.
Les déclencheurs : quand le workflow s’exécute
Le bloc on: définit les événements qui déclenchent votre workflow. Voici les
plus utilisés :
| Déclencheur | Quand ça se déclenche | Cas d’usage typique |
|---|---|---|
push | Quand du code est poussé | Tests, lint, build |
pull_request | Quand une PR est ouverte ou mise à jour | Validation avant merge |
workflow_dispatch | Manuellement (bouton dans l’interface) | Déploiement à la demande |
schedule | À heures fixes (syntaxe cron) | Scans de sécurité nocturnes |
release | Quand une release est publiée | Publication de packages |
Vous pouvez combiner plusieurs déclencheurs :
on: push: branches: [main] # À chaque push sur main pull_request: branches: [main] # À chaque PR vers main workflow_dispatch: # Et manuellement si besoinLes jobs : les unités de travail
Un job est une unité de travail indépendante. Chaque job :
- S’exécute sur sa propre machine virtuelle (appelée runner)
- Peut contenir plusieurs étapes (steps)
- Peut dépendre d’autres jobs ou s’exécuter en parallèle
jobs: build: runs-on: ubuntu-24.04 steps: - run: echo "Je construis"
test: runs-on: ubuntu-24.04 steps: - run: echo "Je teste"Par défaut, les jobs s’exécutent en parallèle. Dans l’exemple ci-dessus,
build et test démarrent en même temps.
Exécuter des jobs dans un ordre précis
Si un job doit attendre qu’un autre soit terminé, utilisez needs :
jobs: build: runs-on: ubuntu-24.04 steps: - run: echo "Build"
test: runs-on: ubuntu-24.04 needs: build # Attend que "build" soit terminé steps: - run: echo "Test"
deploy: runs-on: ubuntu-24.04 needs: [build, test] # Attend que les deux soient terminés steps: - run: echo "Deploy"Les runners : où s’exécute le code
Le runner est la machine qui exécute votre job. GitHub propose des runners hébergés (gratuits dans certaines limites) :
| Runner | Système | Cas d’usage |
|---|---|---|
ubuntu-24.04 | Linux Ubuntu 24.04 | Le plus courant, rapide, économique |
windows-2022 | Windows Server 2022 | Applications .NET, tests Windows |
macos-14 | macOS 14 (Sonoma) | Applications iOS/macOS |
jobs: test-linux: runs-on: ubuntu-24.04
test-windows: runs-on: windows-2022
test-mac: runs-on: macos-14Les steps : les tâches individuelles
Les steps sont les tâches à exécuter dans un job. Elles s’exécutent séquentiellement (l’une après l’autre) sur la même machine.
Il existe deux types de steps :
1. Exécuter une commande shell (run)
steps: - name: Afficher un message run: echo "Bonjour !"
- name: Plusieurs commandes run: | echo "Première ligne" echo "Deuxième ligne" npm install npm testLe | permet d’écrire plusieurs commandes sur plusieurs lignes.
2. Utiliser une action (uses)
steps: - name: Récupérer le code uses: actions/checkout@v4
- name: Configurer Node.js uses: actions/setup-node@v4 with: node-version: 20Une action est un bloc de code réutilisable. Plutôt que de réécrire la logique pour “récupérer le code du repo” ou “installer Node.js”, vous utilisez une action existante.
Jobs vs Steps : comprendre la différence
C’est une source de confusion fréquente. Voici comment les distinguer :
Workflow├── Job 1 (machine A)│ ├── Step 1: récupérer le code│ ├── Step 2: installer les dépendances│ └── Step 3: lancer les tests│└── Job 2 (machine B) ├── Step 1: récupérer le code └── Step 2: déployer| Concept | Définition | Environnement |
|---|---|---|
| Job | Un groupe de tâches | Chaque job a sa propre machine |
| Step | Une tâche individuelle | Tous les steps d’un job partagent la même machine |
Conséquence importante :
- Les fichiers créés par un step sont disponibles pour les steps suivants du même job (même machine)
- Les fichiers créés dans un job ne sont pas disponibles dans un autre job (machines différentes). Il faut utiliser les artifacts pour partager des fichiers entre jobs.
Votre premier workflow
-
Créez le dossier
.github/workflows/à la racine de votre projet -
Créez un fichier
hello.ymldans ce dossier avec ce contenu :name: Hello Worldon:push:branches: [main]workflow_dispatch:jobs:hello:runs-on: ubuntu-24.04steps:- name: Dire bonjourrun: echo "Hello, GitHub Actions!"- name: Afficher des infos sur le contexterun: |echo "Repository: \${{ github.repository }}"echo "Branche: \${{ github.ref_name }}"echo "Auteur du commit: \${{ github.actor }}" -
Committez et poussez sur la branche
main -
Allez dans l’onglet Actions de votre repository sur GitHub
-
Observez votre workflow s’exécuter !
Où voir les résultats ?
Une fois votre workflow déclenché :
- Allez sur votre repository GitHub
- Cliquez sur l’onglet Actions
- Vous voyez la liste de toutes les exécutions (workflow runs)
- Cliquez sur une exécution pour voir les jobs
- Cliquez sur un job pour voir les logs de chaque step

L’interface vous montre :
- ✅ Les steps qui ont réussi (en vert)
- ❌ Les steps qui ont échoué (en rouge)
- ⏳ Les steps en cours d’exécution
- Les logs détaillés de chaque commande
Le cycle de vie d’un workflow
Quand un événement déclenche un workflow, voici ce qui se passe :
- Événement : quelqu’un pousse du code, ouvre une PR, etc.
- Détection : GitHub détecte l’événement et cherche les workflows correspondants
- Mise en file d’attente : le workflow est ajouté à la queue d’exécution
- Attribution d’un runner : GitHub assigne une machine virtuelle
- Exécution : les jobs et steps s’exécutent
- Nettoyage : la machine est détruite, les résultats sont conservés
Chaque exécution est éphémère : la machine est créée pour l’occasion et
détruite ensuite. C’est pour ça qu’il faut toujours commencer par récupérer le
code (actions/checkout).
Les variables de contexte
Dans l’exemple précédent, vous avez vu \${{ github.repository }}. C’est une
variable de contexte : GitHub met à disposition des informations sur
l’exécution en cours.
Quelques variables utiles :
| Variable | Contenu |
|---|---|
github.repository | Nom du repo (owner/repo) |
github.ref_name | Nom de la branche ou du tag |
github.actor | Utilisateur qui a déclenché le workflow |
github.event_name | Type d’événement (push, pull_request…) |
github.sha | SHA du commit |
github.run_id | ID unique de cette exécution |
Tout cela sera approfondi dans les modules suivants.
Contrôle des connaissances
Testez vos connaissances sur les fondamentaux des workflows GitHub Actions.
Pourquoi ce contrôle ?
Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.
🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.
🎯 Pour réussir, vous devez obtenir au moins 70% de bonnes réponses.
💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.
Bonne chance ! 🚀
Prochaine étape
Vous savez maintenant ce qu’est un workflow et comment il fonctionne. Avant d’aller plus loin dans la syntaxe, il est essentiel de comprendre les enjeux de sécurité. Découvrez les risques et les bonnes pratiques dans Sécurité GitHub Actions : les bases.