Exercice 05 : Déclencher des workflows manuellement
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Configurer
on: workflow_dispatchavec des inputs typés - ✅ Utiliser
${{ inputs.xxx }}dans les steps du workflow - ✅ Déclencher un workflow depuis l'onglet Actions de GitHub
- ✅ Déclencher un workflow depuis le terminal avec
gh workflow run
Durée estimée : 20 min | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
Certains workflows ne doivent pas se déclencher automatiquement à chaque push. Par exemple : un déploiement en production, une migration de base de données, la génération d'un rapport mensuel. Le déclencheur workflow_dispatch permet de lancer ces workflows à la demande, depuis l'interface GitHub ou via la CLI gh.
Les inputs permettent de passer des paramètres au workflow : quel environnement déployer, quelle version utiliser, activer ou non le mode debug.
📋 Énoncé
Vous allez créer un workflow de déploiement manuel avec trois inputs : le choix de l'environnement, une description de la version, et un flag debug. Vous le déclencherez depuis l'interface GitHub et depuis le terminal.
Résultat attendu :
- L'onglet Actions affiche un bouton "Run workflow" avec un formulaire
- Les inputs sont utilisés dans les steps du workflow
gh workflow rundéclenche le workflow depuis le terminal
🧭 Déroulement
Tâche 1 : Créer le workflow avec workflow_dispatch
Créez .github/workflows/deploy-manual.yml avec uniquement on: workflow_dispatch comme trigger. Poussez le fichier et vérifiez que le bouton "Run workflow" apparaît dans l'onglet Actions.
Indice :
`yamlname: Déploiement Manuel
>
on:
workflow_dispatch:
>
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: echo "Déploiement déclenché manuellement"
`Le bouton "Run workflow" n'apparaît que si le workflow est présent sur la branche par défaut (généralement
main).
Vérification : L'onglet Actions affiche le workflow "Déploiement Manuel" avec un bouton "Run workflow".
Tâche 2 : Ajouter un input de type choice
Ajoutez un input environment de type choice avec les options staging, production, et sandbox. Définissez staging comme valeur par défaut.
Indice :
`yamlon:
workflow_dispatch:
inputs:
environment:
description: 'Environnement cible'
required: true
type: choice
options:
- staging
- production
- sandbox
default: staging
`
Vérification : Le formulaire "Run workflow" affiche un menu déroulant avec les trois options.
Tâche 3 : Ajouter des inputs string et boolean
Ajoutez un input version (string, requis) pour la version à déployer, et un input debug (boolean, défaut false) pour activer les logs détaillés.
Indice :
`yamlversion:
description: 'Version à déployer (ex: v1.2.3)'
required: true
type: string
debug:
description: 'Activer le mode debug'
required: false
type: boolean
default: false
`
Vérification : Le formulaire affiche un champ texte pour version et une case à cocher pour debug.
Tâche 4 : Utiliser les inputs dans les steps
Dans le job, utilisez les trois inputs pour personnaliser l'exécution du workflow. Conditionnez une étape de debug sur inputs.debug == true.
Indice :
`yamlsteps:
- name: Afficher les paramètres
run: |
echo "Environnement : ${{ inputs.environment }}"
echo "Version : ${{ inputs.version }}"
echo "Debug : ${{ inputs.debug }}"
>
- name: Logs de debug détaillés
if: inputs.debug == true
run: echo "MODE DEBUG - Affichage des variables d'environnement"
`
Vérification : Avec debug: true, le step de debug s'exécute. Sans, il est ignoré.
Tâche 5 : Déclencher depuis la CLI gh
Installez ou utilisez la CLI GitHub gh pour déclencher le workflow depuis le terminal sans passer par l'interface web.
Indice :
`bash# Déclencher avec des inputs
gh workflow run deploy-manual.yml \
--field environment=staging \
--field version=v1.2.3 \
--field debug=true
>
# Lister les runs récents du workflow
gh run list --workflow=deploy-manual.yml
>
# Voir les logs du dernier run
gh run watch
`La CLI
ghdoit être authentifiée avecgh auth loginau préalable.
Vérification : Un nouveau run apparaît dans l'onglet Actions avec les inputs passés via la CLI.
🗂️ Mini-Projet : Workflow de migration manuelle
# Checkpoints à valider :
# [ ] workflow_dispatch est configuré comme trigger
# [ ] Un input de type choice (environment) est présent
# [ ] Un input de type string (version) est présent
# [ ] Un input de type boolean (debug) est présent
# [ ] ${{ inputs.xxx }} est utilisé dans au moins un step
# [ ] Un step conditionnel utilise if: inputs.debug == true
# [ ] gh workflow run déclenche le workflow depuis le terminal
# [ ] Bonus : ajoutez un input number pour le nombre de replicas