Introduction : Pourquoi le CI/CD est-il crucial pour les projets Rust ?
\nDévelopper en Rust, ce n'est pas seulement une question de sécurité mémoire et de hautes performances, mais aussi de discipline rigoureuse. Le compilateur Rust détecte de nombreuses erreurs lors de la phase de construction, mais cela ne remplace pas la nécessité de tests de qualité, de linting et de vérification de la compatibilité des dépendances. C'est là que le CI/CD (Intégration Continue / Déploiement Continu) entre en jeu.
\nGitHub Actions est un système d'automatisation intégré qui convient parfaitement aux projets Rust. Il permet d'exécuter automatiquement les tests, de formater le code, de vérifier les vulnérabilités et même de publier des crates dans le registre crates.io à chaque push dans le dépôt. Dans cet article, nous allons détailler le pipeline complet : de la base cargo build au déploiement en production.
1. Bases : Configuration d'un workflow de base pour Rust
\nTout pipeline CI/CD dans GitHub Actions commence par la création d'un fichier YAML dans le répertoire .github/workflows/. Créons un fichier ci.yml pour la vérification de base d'un projet Rust.
1.1. Premier workflow : Construction et tests
\nCommençons par un ensemble minimal : cloner le dépôt, installer Rust et exécuter les tests.
\nname: Rust CI\n\non:\n push:\n branches: [ "main", "develop" ]\n pull_request:\n branches: [ "main" ]\n\nenv:\n CARGO_TERM_COLOR: always\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v4\n - name: Install Rust\n uses: dtolnay/rust-toolchain@stable\n - name: Build\n run: cargo build --verbose\n - name: Run tests\n run: cargo test --verbose\nQue se passe-t-il ici ?
\n- \n
actions/checkout@v4— clone votre code. \n dtolnay/rust-toolchain@stable— l'action officielle pour installer Rust (prend en charge nightly, beta et stable). \n cargo buildetcargo test— les commandes principales pour vérifier le projet. \n
Ce workflow sera déclenché à chaque push sur les branches main et develop, ainsi que lors de la création d'une Pull Request.
1.2. Mise en cache des dépendances pour accélérer la construction
\nLes projets Rust ont souvent beaucoup de dépendances. Pour éviter de les télécharger à chaque fois, utilisez la mise en cache. Cela réduira le temps de construction de 5 à 10 minutes à 30-60 secondes.
\n - name: Cache Cargo registry\n uses: actions/cache@v3\n with:\n path: |\n ~/.cargo/registry\n ~/.cargo/git\n target/\n key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n restore-keys: |\n ${{ runner.os }}-cargo-\nAjoutez cette étape avant d'exécuter cargo build. Le hachage du fichier Cargo.lock garantit que le cache ne sera mis à jour qu'en cas de modification des dépendances.
2. Vérification avancée de la qualité du code
\nLes tests seuls ne suffisent pas pour maintenir une qualité de code élevée. Ajoutons le linting, le formatage et la vérification de la sécurité.
\n\n2.1. Formatage (rustfmt) et linting (clippy)
\nRust dispose d'outils intégrés pour maintenir un style de code uniforme. Ajoutons-les dans un job séparé :
\n lint:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: dtolnay/rust-toolchain@stable\n with:\n components: clippy, rustfmt\n - name: Check formatting\n run: cargo fmt --check\n - name: Run clippy\n run: cargo clippy -- -D warnings\n- \n
cargo fmt --check— vérifie que le code est formaté selon la normerustfmt. \n cargo clippy -- -D warnings— exécute le linter et transforme les avertissements en erreurs (drapeau-D). \n
Cela permettra d'éviter le code "sale" dans le dépôt.
\n\n