CI/CD pour projets Rust : 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

Introduction : pourquoi CI/CD est important pour les projets Rust ?

Développer en Rust ne consiste pas seulement à écrire du code sûr et rapide, mais aussi à assurer sa stabilité à long terme. CI/CD (Continuous Integration / Continuous Deployment) est une pratique qui automatise la compilation, les tests et le déploiement de votre projet. Pour Rust, avec son compilateur strict et son système de types, CI/CD est particulièrement utile : il permet de détecter les erreurs à un stade précoce, de vérifier la compatibilité des dépendances et de publier automatiquement de nouvelles versions.

GitHub Actions est un outil CI/CD intégré à la plateforme GitHub. Il fournit des modèles prêts à l'emploi pour Rust, de puissantes matrices de test et la possibilité d'intégration avec n'importe quel service cloud. Dans cet article, nous allons voir comment configurer un pipeline complet pour un projet Rust : de la vérification de base à la publication sur crates.io.



1. Les bases : création du premier workflow pour Rust

Un workflow dans GitHub Actions est un fichier YAML qui décrit une séquence d'étapes. Pour un projet Rust, un workflow minimal doit inclure : l'installation de Rust, le téléchargement des dépendances, la compilation et l'exécution des tests.

Créez le fichier .github/workflows/ci.yml à la racine de votre dépôt :

name: Rust CI

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: clippy, rustfmt - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose - name: Lint with Clippy run: cargo clippy -- -D warnings - name: Check formatting run: cargo fmt --check

Ce workflow s'exécute à chaque push dans la branche principale ou lors de la création d'une pull request. La mise en cache des dépendances (actions/cache) accélère considérablement les exécutions suivantes. Notez le flag -- -D warnings dans clippy — il transforme les avertissements en erreurs, ce qui améliore la qualité du code.



1.1. Test matriciel : vérification sur plusieurs versions de Rust

Rust dispose de trois canaux de publication principaux : stable, beta et nightly. Pour vous assurer que votre code fonctionne sur toutes les versions, utilisez une matrice de stratégies :

jobs:  test:    runs-on: ubuntu-latest    strategy:      matrix:        rust: [stable, beta, nightly]    steps:    - uses: actions/checkout@v4    - name: Setup Rust ${{ matrix.rust }}      uses: actions-rs/toolchain@v1      with:        toolchain: ${{ matrix.rust }}        override: true    - name: Build and test      run: |        cargo build        cargo test

Ajoutez également une vérification sur la version minimale de Rust supportée (MSRV). Ceci est particulièrement important pour les bibliothèques. Par exemple, si votre Cargo.toml spécifie rust-version = "1.60", ajoutez rust: [1.60.0, stable] à la matrice.



2. Techniques avancées : optimisation et sécurité

2.1. Mise en cache avec prise en compte des profils

Par défaut, cargo build utilise le profil debug. Pour les compilations release, le cache sera différent. Séparez le cache pour les différents profils :

- name: Cache dependencies  uses: actions/cache@v3  with:    path: |      ~/.cargo/registry      ~/.cargo/git      target    key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.rust }}-${{ matrix.profile }}  env:    CARGO_TERM_COLOR: always

Ajoutez profile: [debug, release] à la matrice.



2.2. Vérification de la sécurit

Blogs

Book Recommendations