CI/CD für Rust-Projekte: Einrichtung von GitHub Actions

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung: Warum CI/CD für Rust-Projekte wichtig ist

Die Entwicklung mit Rust umfasst nicht nur das Schreiben von sicherem und schnellem Code, sondern auch die Gewährleistung seiner langfristigen Stabilität. CI/CD (Continuous Integration / Continuous Deployment) ist eine Praxis, die das Bauen, Testen und Bereitstellen Ihres Projekts automatisiert. Für Rust, mit seinem strengen Compiler und Typsystem, ist CI/CD besonders nützlich: Es ermöglicht das frühzeitige Erkennen von Fehlern, die Überprüfung der Abhängigkeitskompatibilität und die automatische Veröffentlichung neuer Versionen.

GitHub Actions ist ein integriertes CI/CD-Tool auf der GitHub-Plattform. Es bietet vorgefertigte Vorlagen für Rust, leistungsstarke Testmatrizen und die Möglichkeit der Integration mit beliebigen Cloud-Diensten. In diesem Artikel werden wir durchgehen, wie man eine vollwertige Pipeline für ein Rust-Projekt einrichtet: von der grundlegenden Überprüfung bis zur Veröffentlichung auf crates.io.



1. Grundlagen: Erstellen des ersten Workflows für Rust

Ein Workflow in GitHub Actions ist eine YAML-Datei, die eine Abfolge von Schritten beschreibt. Für ein Rust-Projekt sollte ein minimaler Workflow Folgendes umfassen: Installation von Rust, Herunterladen von Abhängigkeiten, Bauen und Ausführen von Tests.

Erstellen Sie die Datei .github/workflows/ci.yml im Stammverzeichnis Ihres Repositorys:

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

Dieser Workflow wird bei jedem Push in den Hauptzweig oder bei der Erstellung eines Pull Requests ausgelöst. Das Caching von Abhängigkeiten (actions/cache) beschleunigt nachfolgende Ausführungen erheblich. Beachten Sie das Flag -- -D warnings bei Clippy – es wandelt Warnungen in Fehler um, was die Codequalität verbessert.



1.1. Matrix-Testen: Überprüfung mit mehreren Rust-Versionen

Rust hat drei Hauptrelease-Kanäle: stable, beta und nightly. Um sicherzustellen, dass Ihr Code mit allen Versionen funktioniert, verwenden Sie eine Strategiematrix:

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

Fügen Sie auch eine Überprüfung auf die minimal unterstützte Rust-Version (MSRV) hinzu. Dies ist besonders wichtig für Bibliotheken. Wenn Ihr Cargo.toml beispielsweise rust-version = "1.60" angibt, fügen Sie rust: [1.60.0, stable] zur Matrix hinzu.



2. Fortgeschrittene Techniken: Optimierung und Sicherheit

2.1. Caching unter Berücksichtigung von Profilen

Standardmäßig verwendet cargo build das Profil debug. Für Release-Builds ist der Cache ein anderer. Teilen Sie den Cache für verschiedene Profile auf:

- 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

Fügen Sie zur Matrix profile: [debug, release] hinzu.



2.2. Sicherheitsüberprüfung

Blogs

Buchempfehlungen