CI/CD pour projets C++ : configuration de GitHub Actions

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

CI/CD pour les projets C++ : configuration de GitHub Actions



Le développement moderne en C++ nécessite non seulement l'écriture de code de qualité, mais aussi la configuration des processus de compilation, de test et de déploiement. Le CI/CD (Continuous Integration / Continuous Deployment) est une pratique qui permet d'automatiser ces processus, réduisant le temps entre l'écriture du code et sa livraison aux utilisateurs. Dans cet article, nous allons voir comment configurer le CI/CD pour les projets C++ avec GitHub Actions — un outil puissant et gratuit intégré à GitHub.



GitHub Actions permet de créer des workflows automatiques qui se déclenchent lors de certains événements : push dans le dépôt, création de pull request, release, etc. Pour les projets C++, c'est particulièrement utile car cela permet de garantir que le code se compile sur différentes plateformes et ne contient pas de régressions.



Les bases de GitHub Actions pour C++



GitHub Actions utilise des fichiers YAML pour décrire les workflows. Chaque workflow est composé d'un ou plusieurs jobs qui s'exécutent sur des machines virtuelles (runners). Pour les projets C++, on utilise généralement les runners Ubuntu, Windows et macOS. Examinons la structure de base d'un fichier workflow.



name: C++ CI

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4

- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libboost-all-dev

- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: cd build && ctest --output-on-failure


Ce workflow se déclenche lors d'un push sur les branches main et develop, ainsi que lors de la création d'un pull request vers main. Il installe les dépendances (CMake, g++, Boost), configure le projet, le compile et exécute les tests.



Compilation multiplateforme de projets C++



L'un des principaux avantages du CI/CD pour C++ est la possibilité de vérifier automatiquement la compilation sur plusieurs plateformes. C'est crucial car le code C++ peut se comporter différemment selon les OS et les compilateurs. GitHub Actions permet d'organiser facilement une matrice de compilation.



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]        compiler: [g++, clang++]        include:          - os: ubuntu-latest            compiler: g++            cmake_flags: -DCMAKE_CXX_COMPILER=g++-11          - os: ubuntu-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++-14          - os: windows-latest            compiler: msvc            cmake_flags: -DCMAKE_CXX_COMPILER=cl          - os: macos-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++

runs-on: ${{ matrix.os }}

steps: - uses: actions/checkout@v4

- name: Install dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y cmake g++-11 clang-14 libboost-all-dev

- name: Install dependencies (macOS) if: matrix.os == 'macos-latest' run: | brew update brew install cmake boost

- name: Install dependencies (Windows) if: matrix.os == 'windows-latest' run: | choco install cmake boost-msvc-14.3

- name: Configure CMake run: cmake -B build ${{ matrix.cmake_flags }} -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: | if [ "${{ runner.os }}" == "Windows" ]; then cd build && ctest -C Release --output-on-failure else cd build && ctest --output-on-failure fi


Dans cet exemple

Blogs

Book Recommendations