CI/CD für Rust-Projekte: GitHub Actions — Teil 2

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

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

Blogs

Buchempfehlungen