Exercice 05 : Utiliser les variables et le contexte GitHub
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Utiliser
${{ github.sha }},${{ github.ref_name }}et${{ github.actor }}dans un workflow - ✅ Déclarer des variables locales avec
env:dans un step - ✅ Partager une variable entre steps via
$GITHUB_ENV - ✅ Écrire un résumé de job visible dans l'onglet Actions avec
$GITHUB_STEP_SUMMARY
Durée estimée : 15 min | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
GitHub Actions expose deux types d'informations dynamiques dans vos workflows :
Le contexte GitHub (github.*) : métadonnées sur l'événement déclencheur - qui a poussé le code, quelle branche, quel commit. Syntaxe : ${{ github.sha }}.
Les variables d'environnement spéciales : des fichiers écrits dans le runner qui permettent de transmettre des données entre steps.
| Variable | Description |
|---|---|
${{ github.sha }} | Hash complet du commit (40 caractères) |
${{ github.ref_name }} | Nom court de la branche ou du tag |
${{ github.actor }} | Nom d'utilisateur GitHub qui a déclenché le workflow |
$GITHUB_ENV | Fichier pour exporter des variables vers les steps suivants |
$GITHUB_STEP_SUMMARY | Fichier pour écrire du Markdown dans le résumé du job |
📋 Énoncé
Vous allez créer un workflow de diagnostic qui affiche les informations du contexte GitHub, calcule dynamiquement une variable d'environnement (tag d'image Docker), la transmet aux steps suivants et génère un résumé Markdown du build.
🧭 Déroulement
Tâche 1 : Afficher les variables de contexte
Créez .github/workflows/contexte.yml. Ajoutez un step qui affiche github.sha, github.ref_name et github.actor via echo.
Indice :
`yaml- name: Afficher le contexte
run: |
echo "SHA du commit : ${{ github.sha }}"
echo "Branche : ${{ github.ref_name }}"
echo "Déclenché par : ${{ github.actor }}"
`Les expressions
${{ ... }}sont évaluées avant l'exécution du shell. Elles sont remplacées par leur valeur dans le YAML final envoyé au runner.
Vérification : Les logs affichent le vrai hash du commit (40 caractères), le nom de votre branche et votre nom d'utilisateur GitHub.
Tâche 2 : Déclarer une variable avec env: dans un step
Ajoutez un step avec env: pour définir une variable locale APP_VERSION combinant la branche et les 8 premiers caractères du SHA. Affichez-la avec echo $APP_VERSION.
Indice :
`yaml- name: Définir la version de l'app
env:
APP_VERSION: "${{ github.ref_name }}-${{ github.sha }}"
run: echo "Version : $APP_VERSION"
`Les variables définies avec
env:dans un step ne sont disponibles que dans ce step. Pour les partager, utilisez$GITHUB_ENV.
Vérification : Le step affiche quelque chose comme Version : main-a1b2c3d4e5....
Tâche 3 : Exporter une variable avec $GITHUB_ENV
Créez un step qui calcule un tag d'image Docker IMAGE_TAG (format branche-8charsdesha) et l'exporte vers les steps suivants via $GITHUB_ENV. Créez ensuite un step séparé qui utilise $IMAGE_TAG.
Indice :
`yaml- name: Calculer le tag Docker
run: |
SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-8)
IMAGE_TAG="${{ github.ref_name }}-${SHORT_SHA}"
echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
>
- name: Utiliser le tag Docker
run: echo "Image Docker : monapp:$IMAGE_TAG"
`
echo "NOM=valeur" >> $GITHUB_ENVécrit dans un fichier spécial que GitHub Actions lit entre chaque step pour mettre à jour les variables d'environnement.
Vérification : Le second step affiche le tag calculé dans le premier step. Exemple : monapp:main-a1b2c3d.
Tâche 4 : Écrire un résumé avec $GITHUB_STEP_SUMMARY
Ajoutez un step final qui écrit un résumé Markdown du build dans $GITHUB_STEP_SUMMARY. Ce résumé sera affiché directement sur la page du run dans l'onglet Actions.
Indice :
`yaml- name: Résumé du build
run: |
echo "## Résumé du Build 🚀" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Champ | Valeur |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Branche | \
${{ github.ref_name }}\|" >> $GITHUB_STEP_SUMMARYecho "| Commit | \
${{ github.sha }}\|" >> $GITHUB_STEP_SUMMARYecho "| Acteur | @${{ github.actor }} |" >> $GITHUB_STEP_SUMMARY
echo "| Image | \
monapp:$IMAGE_TAG\|" >> $GITHUB_STEP_SUMMARY
`
$GITHUB_STEP_SUMMARYaccepte du Markdown. Le contenu s'affiche dans l'encadré "Summary" en haut de la page du run.
Vérification : La page du run GitHub Actions affiche un tableau Markdown avec les 4 informations dans la section "Summary".
Tâche 5 : Conditionner un step selon la branche
Ajoutez un step qui s'exécute uniquement sur la branche main en utilisant une condition if: basée sur github.ref_name.
Indice :
`yaml- name: Étape réservée à main
if: github.ref_name == 'main'
run: echo "Ce step ne s'exécute que sur main"
`
if:accepte des expressions GitHub Actions. Sans${{ }}, l'expression est évaluée automatiquement.
Vérification : En poussant sur main, le step s'exécute. En poussant sur une autre branche, il est ignoré (icône grisée "skipped").
🗂️ Mini-Projet
Créez un workflow complet qui génère un badge de statut dans le résumé : vert si c'est un push sur main, jaune sinon.
# Checkpoints à valider :
# [ ] github.sha, github.ref_name, github.actor affichés dans les logs
# [ ] env: dans un step définit une variable locale
# [ ] $GITHUB_ENV transmet une variable entre deux steps
# [ ] $GITHUB_STEP_SUMMARY affiche un tableau Markdown dans le résumé du run
# [ ] if: github.ref_name == 'main' conditionne correctement un step
# [ ] Bonus : badge dynamique dans le résumé