CI/CD pour projets Rust : 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 le CI/CD est crucial pour les projets Rust



Rust est un langage de programmation système réputé pour ses performances et sa sécurité mémoire. Cependant, même le code le plus fiable nécessite une vérification constante. Les tests et la compilation manuels prennent du temps et sont sujets aux erreurs. Le CI/CD (Intégration Continue / Déploiement Continu) automatise ces processus, garantissant que chaque modification du code est vérifiée par le compilateur, les tests et les linters avant d'être intégrée à la branche principale.



GitHub Actions est une plateforme intégrée d'automatisation des workflows dans GitHub. Elle est idéale pour les projets Rust grâce à sa flexibilité, son quota gratuit de minutes pour les dépôts publics et son vaste écosystème d'actions prêtes à l'emploi. Dans cet article, nous allons détailler le cycle complet de configuration CI/CD pour Rust : de la compilation de base à l'optimisation via la mise en cache et le déploiement.



1. Les bases : Premier workflow pour la compilation et les tests



Commençons par créer un workflow minimal. À la racine de votre dépôt, créez le dossier .github/workflows et le fichier ci.yml.



Fichier ci.yml de base



name: Rust CI

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

env: CARGO_TERM_COLOR: always

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose


Analyse des éléments clés :

  • on : Déclencheurs — exécution lors d'un push sur main et lors de la création d'une Pull Request.
  • env : La variable CARGO_TERM_COLOR active les logs en couleur.
  • actions/checkout : Action standard pour cloner le dépôt.
  • dtolnay/rust-toolchain : L'action la plus populaire pour installer Rust. Utilisez stable, nightly ou une version spécifique.


Ce workflow est déjà utile : il garantit que le code compile et que tous les tests passent. Mais pour un projet réel, cela ne suffit pas.



2. Optimisation : Mise en cache des dépendances et compilation multiplateforme



Chaque exécution CI télécharge toutes les dépendances à nouveau. Pour les projets Rust avec de nombreuses crates, cela peut prendre des minutes. La solution est de mettre en cache les dossiers ~/.cargo et target.



Ajout de la mise en cache



jobs:  build:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable    - name: Cache dependencies      uses: actions/cache@v3      with:        path: |          ~/.cargo/bin/          ~/.cargo/registry/index/          ~/.cargo/registry/cache/          target/        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}    - name: Build      run: cargo build --verbose    - name: Run tests      run: cargo test --verbose


Points clés :

  • hashFiles('**/Cargo.lock') : Le cache est invalidé uniquement en cas de modification du fichier Cargo.lock.
  • path : Mise en cache des binaires, de l'index du registre et du dossier target.
  • Restauration : Si la clé correspond, le cache est restauré et cargo ignore le téléchargement.


Compilation multiplateforme



Rust prend en charge de nombreuses plateformes. Pour vous assurer que votre code fonctionne partout, utilisez une matrice de compilation :



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]    runs-on: ${{ matrix.os }}    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable                

Blogs

Book Recommendations