Retour au cours

introduction à github actions : structure d'un workflow

Objectifs

  • Comprendre ce qu’est un workflow GitHub Actions.
  • Découvrir la structure de base d’un fichier de workflow en YAML.
  • Créer un premier workflow qui se déclenche automatiquement lorsqu’on pousse du code.
  • Comprendre les concepts clés : event, job, step, et action.

Qu’est-ce que GitHub Actions ?

GitHub Actions est la plateforme d’intégration et de déploiement continus (CI/CD) directement intégrée à GitHub. Elle permet d’automatiser vos workflows (build, test, déploiement) en réponse à des événements qui se produisent dans votre dépôt (comme un push ou la création d’une Pull Request).

Le Fichier de Workflow

Un workflow est défini dans un fichier au format YAML. Ce fichier doit être placé dans le dossier .github/workflows/ à la racine de votre dépôt. Vous pouvez avoir plusieurs workflows dans un même projet.

La structure d’un workflow simple

Voici un exemple de workflow minimal qui s’exécute, installe Python, et lance des tests.

Fichier .github/workflows/ci.yml :

# Nom du workflow, qui apparaîtra dans l'interface GitHub
name: CI de base

# Événements qui déclenchent le workflow
on:
  # Se déclenche sur un 'push' vers la branche 'main'
  push:
    branches: [ main ]
  # Se déclenche aussi sur une 'pull_request' vers 'main'
  pull_request:
    branches: [ main ]

# Liste des "jobs" (tâches) à exécuter
jobs:
  # Nom du job (vous pouvez choisir ce que vous voulez)
  build_and_test:
    # Type de machine virtuelle sur laquelle exécuter le job
    runs-on: ubuntu-latest

    # Séquence d'étapes (steps) à exécuter pour ce job
    steps:
      # Étape 1 : Récupérer le code du dépôt
      # 'uses' indique qu'on utilise une "action" pré-existante
      - name: Récupérer le code
        uses: actions/checkout@v4

      # Étape 2 : Configurer l'environnement Python
      - name: Installer Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      # Étape 3 : Installer les dépendances
      # 'run' exécute une ou plusieurs commandes shell
      - name: Installer les dépendances
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      
      # Étape 4 : Lancer les tests
      - name: Lancer les tests
        run: pytest

Concepts clés à retenir

  • Workflow : Le processus automatisé dans son ensemble, décrit dans un fichier YAML.
  • Event (on) : Le déclencheur. Exemples : push, pull_request, schedule (pour une exécution planifiée), workflow_dispatch (pour un lancement manuel).
  • Job : Un ensemble de tâches qui s’exécute sur une machine virtuelle (un “runner”). Par défaut, les jobs s’exécutent en parallèle.
  • Step : Une tâche individuelle à l’intérieur d’un job. Une étape peut être une commande shell (run) ou une Action.
  • Action (uses) : Un morceau de code réutilisable et packagé que quelqu’un d’autre a créé. actions/checkout et actions/setup-python sont des actions officielles maintenues par GitHub, que vous utiliserez dans presque tous vos workflows.

Bonnes pratiques

  • Commencez simple. Créez un premier workflow qui ne fait qu’afficher “Hello World” pour vous familiariser avec la syntaxe.
  • Utilisez des actions de la communauté. Ne réinventez pas la roue. Pour des tâches courantes (configurer un langage, se connecter à un cloud, etc.), il existe presque toujours une action sur la Marketplace GitHub.
  • Nommez clairement vos workflows, jobs et steps. Cela rend les logs beaucoup plus faciles à lire lorsque quelque chose échoue.

Pièges courants

  • Erreurs de syntaxe YAML : YAML est très strict sur l’indentation. Une seule espace en trop ou en moins peut casser tout le fichier. Utilisez un éditeur de code qui met en évidence la syntaxe YAML.
  • Chemins de fichiers : Le runner démarre à la racine de votre dépôt. Tous les chemins de fichiers doivent être relatifs à cette racine.

Exercices

  1. Créez votre premier workflow :

    • Créez un nouveau dépôt sur GitHub.
    • Sur votre machine, clonez ce dépôt.
    • Créez le dossier .github/workflows/.
    • À l’intérieur, créez un fichier hello.yml.
  2. Définissez le workflow :

    • Copiez-collez ce contenu minimal dans hello.yml :
      name: Dire Bonjour
      on: [push]
      jobs:
        say_hello:
          runs-on: ubuntu-latest
          steps:
            - run: echo "Bonjour, GitHub Actions !"
  3. Déclenchez le workflow :

    • Faites un git add, git commit et git push pour envoyer votre nouveau fichier sur GitHub.
    • Allez dans l’onglet “Actions” de votre dépôt sur le site de GitHub.
    • Vous devriez voir votre workflow “Dire Bonjour” s’exécuter et, si vous cliquez dessus, voir la sortie “Bonjour, GitHub Actions !” dans les logs.