CI/CD pour projets C++ : GitHub Actions de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi les projets C++ ont-ils besoin de CI/CD ?

Le développement en C++ est traditionnellement associé à la compilation manuelle, à l'exécution de tests et à un contrôle de version minutieux. Cependant, dans le développement moderne, surtout en travail d'équipe, cette approche devient un goulot d'étranglement. CI/CD (Intégration Continue / Déploiement Continu) est une pratique qui automatise les processus de compilation, de test et de déploiement du code. Pour les projets C++, où les erreurs de compilation ou d'édition de liens peuvent n'apparaître que sur certaines plateformes, le CI/CD est crucial.

GitHub Actions est un outil puissant et flexible intégré à GitHub, qui permet de créer des pipelines directement dans le dépôt. Dans cet article, nous allons voir comment configurer CI/CD pour un projet C++ à partir de zéro en utilisant GitHub Actions. Vous apprendrez à automatiser la compilation avec CMake, à exécuter des tests unitaires, à vérifier la qualité du code et même à publier des versions.

À la fin de cet article, vous serez capable de configurer vous-même un pipeline qui vous fera gagner des heures de travail manuel et augmentera la fiabilité de votre projet.



Partie principale : Guide étape par étape pour GitHub Actions avec C++



1. Bases de GitHub Actions : Workflow, Jobs et Steps

Avant d'écrire du code, familiarisons-nous avec la terminologie. GitHub Actions repose sur des workflows (processus de travail), décrits dans des fichiers YAML situés dans le répertoire .github/workflows/. Chaque workflow se compose d'un ou plusieurs jobs (tâches), exécutés en parallèle ou séquentiellement. Chaque job est constitué de steps (étapes) — des commandes ou actions individuelles.

Pour un projet C++, un workflow typique comprend :

  • Compilation (Build) : compilation du projet avec CMake et Make/Ninja.
  • Test (Test) : exécution de tests unitaires (par exemple, avec Google Test ou Catch2).
  • Linting (Lint) : vérification du code avec des analyseurs statiques (Clang-Tidy, Cppcheck).
  • Déploiement (Deploy) : publication d'artefacts ou de versions.

Le premier workflow est généralement créé pour une compilation de base sur Ubuntu, mais le C++ nécessite des tests sur différents OS (Linux, macOS, Windows). GitHub Actions prend en charge les trois plateformes.



2. Création du premier workflow : compilation et test

Créez un fichier .github/workflows/ci.yml à la racine de votre dépôt. Voici un exemple pour un projet utilisant CMake et Google Test.

name: Pipeline CI/CD C++

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] build_type: [Debug, Release] runs-on: ${{ matrix.os }} steps: - name: Checkout du dépôt uses: actions/checkout@v4 - name: Installation des dépendances (Linux) if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y cmake g++ ninja-build - name: Installation des dépendances (macOS) if: runner.os == 'macOS' run: brew install cmake ninja - name: Installation des dépendances (Windows) if: runner.os == 'Windows' run: choco install cmake ninja -y - name: Configuration CMake run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - name: Compilation run: cmake --build build --config ${{ matrix.build_type }} - name: Exécution des tests working-directory: build run: ctest --output-on-failure -C ${{ matrix.build_type }}

Ce workflow :