CI/CD für Rust-Projekte: GitHub Actions — Teil 2: Testen und Bereitstellung
Im ersten Teil haben wir eine grundlegende Build-Pipeline für ein Rust-Projekt eingerichtet. Nun tauchen wir tiefer in die Programmierung mit Rust ein und betrachten automatisierte Tests, Linting und Bereitstellung. Dies ist eine obligatorische Phase des Rust-Lernens für Anfänger, die professionellen Code schreiben möchten. Heute erfahren Sie, wie Sie Ihre CI/CD wirklich nützlich machen.
1. Ausführen von Tests und Überprüfen der Abdeckung
Jedes ernsthafte Rust-Projekt erfordert die automatische Ausführung von Tests. In GitHub Actions geschieht dies mit dem Befehl cargo test. Um jedoch den größtmöglichen Nutzen zu erzielen, fügen Sie eine Codeabdeckungsprüfung mit tarpaulin hinzu.
Einrichten der Testumgebung
Fügen Sie einen Schritt zu Ihrer Workflow-Datei (.github/workflows/ci.yml) hinzu:
name: CI for Rust
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run tests
run: cargo test --verbose
- name: Generate coverage
run: |
cargo install cargo-tarpaulin
cargo tarpaulin --out Xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
Dieser Code zeigt, wie einfach es ist, Rust in externe Dienste zu integrieren. cargo tarpaulin erstellt einen Bericht, der auf Codecov oder Coveralls hochgeladen werden kann. Für Rust für Anfänger ist es wichtig zu verstehen: Tests sind Ihre erste Verteidigungslinie.
2. Linting und Formatierung
Qualitätscode ist nicht nur funktionierender Code, sondern auch lesbarer Code. In Rust gibt es zwei leistungsstarke Werkzeuge: clippy (Linter) und rustfmt (Formatierer). Binden Sie sie in die Pipeline ein.
Hinzufügen von Clippy und Rustfmt
Fügen Sie einen neuen Job hinzu oder erweitern Sie den vorhandenen:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: clippy, rustfmt
- name: Check formatting
run: cargo fmt -- --check
- name: Run Clippy
run: cargo clippy -- -D warnings
Das Flag -D warnings macht Warnungen zu Fehlern. Das ist streng, aber effektiv für das Lernen: Sie werden sofort über potenzielle Probleme informiert. Denken Sie daran, dass in der Programmierung mit Rust Strenge ein Vorteil ist.
3. Automatische Bereitstellung auf GitHub Pages
Wenn Tests und Linting bestanden sind, können Sie automatisch Dokumentation veröffentlichen. Rust generiert Dokumentation über cargo doc. Die Bereitstellung auf GitHub Pages ist eine hervorragende Möglichkeit, die Ergebnisse zu präsentieren.
Workflow für die Bereitstellung
Erstellen Sie eine separate Datei .github/workflows/deploy.yml:
name: Deploy Documentation
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build documentation
run: cargo doc --no-deps --document-private-items
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target/doc
Diese Pipeline wird nur bei Pushs auf den Hauptzweig ausgelöst. Sie generiert Dokumentation und veröffentlicht sie. Für Rust für Anfänger ist dies eine großartige Möglichkeit, Ihre Projekte der Welt zu zeigen.
4. Optimierung der Build-Zeit: Caching
Das Erstellen von Rust-Projekten kann zeitaufwändig sein. GitHub Action