Pipelines CI untuk proyek Rust perlu memastikan kode terformat dan bebas linting sebelum merge, serta dijalankan dengan cepat. Artikel ini langsung menjawab bagaimana menggabungkan cargo-husky untuk enforce hook lint dan format, konfigurasi linting dengan cargo fmt dan clippy, serta caching build di GitHub Actions agar validasi pecahannya cepat tanpa kompromi kualitas.
Menetapkan Fokus DX dan Tooling
Developer experience (DX) di pipeline CI berhubungan langsung dengan kejelasan umpan balik dan waktu tunggu yang pendek. Mulai tiap merge request dengan proses yang konsisten: pertama linting/format, lalu build. Gunakan cargo-husky di repo untuk hook lokal dan sebelum push, sehingga commit sudah melewati pengecekan dasar sebelum menyentuh remote.
Pasang cargo-husky dan definisikan hook seperti ini:
cargo install cargo-husky
cargo husky init
Tambahkan hook pre-commit di .husky/pre-commit:
#!/usr/bin/env sh
cargo fmt -- --check
cargo clippy --all-targets --all-features -- -D warnings
Hook ini memastikan setiap commit tidak dapat dilewatkan jika format atau lint mengandung kesalahan. Hook lokal juga meningkatkan DX karena developer langsung tahu saat terjadi pelanggaran sebelum push.
Konfigurasi Lint dan Format yang Konsisten
Untuk menjaga lint tetap konsisten di merge request:
- cargo fmt menjalankan format konsisten seluruh workspace. Gunakan
cargo fmt -- --checkdalam pipeline untuk mendeteksi perbedaan. - cargo clippy dengan flag
-D warningsmembuat pipeline gagal jika terjadi peringatan. Tambahkan konfigurasi diClippy.tomluntuk menonaktifkan lint yang terlalu agresif, bukan menonaktifkan secara global.
Contoh Clippy.toml sederhana:
warn = "clippy::all"
[[allow]]
name = "clippy::module_inception"
Gunakan cargo check untuk memastikan dependensi valid, dan jalankan cargo test secara spesifik jika perlu.
Workflow GitHub Actions: lint, build, cache
Berikut adalah contoh file workflow .github/workflows/ci.yaml yang mencakup linting, cache, dan validasi:
name: CI
on:
pull_request:
push:
branches: ["main"]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: actions/setup-rust@v1
with:
cache: cargo
- name: Cache target
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Format
run: cargo fmt -- --check
- name: Run Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run tests
run: cargo test --locked
Cache target dan cache default actions setup-rust membantu mempercepat lint dan build dengan memanfaatkan artefak kompilasi sebelumnya. Kunci cache disinkronkan dengan Cargo.lock sehingga perubahan dependensi memicu cache baru.
Validasi Dependensi dan Konsistensi Merge Request
Sertakan langkah validasi dependensi sebelum linting utama.
- Jalankan
cargo fetchuntuk memastikanCargo.lockmutakhir. - Gunakan
cargo treeatau tool eksternal untuk mengecek versi tertutup jika terjadi konflik. - Pastikan hook husky aktif: tambahkan
cargo husky installkepost-checkoutatau dokumentasi onboarding.
Untuk menjaga lint konsisten di MR, tambahkan status check lint di platform VCS/platform sehingga setiap PR harus melewati job lint sebelum merge. Komunikasikan template PR yang mengingatkan diagnosa linting: sertakan perintah cargo fmt dan cargo clippy untuk menjalankan lokal.
Pengamatan Kesalahan dan Rollback Cepat
Ketika linting gagal, hal yang perlu diperhatikan:
- Gunakan log perintah (misal flag
--message-format=json) bila ingin memparse output lint secara otomatis. - Jika perubahan kode menyebabkan lint baru, jangan mematikan rule tanpa diskusi; tambahkan
allowdiClippy.tomldengan komentar alasan.
Untuk rollback cepat saat lint terus menerus gagal, siapkan branch protection rule yang menolak merge saat job lint gagal, dan gunakan cargo fmt -- --check kembali di branch fix. Masukkan catatan troubleshooting di dokumentasi repo:
Jika clippy menolak warn level tertentu, jalankan cargo clippy -- -W clippy::pedantic lokal untuk melihat detail rule.
Metrik DX yang Bisa Dipantau
Pantau metrik berikut agar pipeline tetap ramah developer:
- Waktu eksekusi lint — idealnya di bawah 3 menit untuk membuat feedback cepat.
- Frekuensi rollback — peningkatan rollback menunjukkan lint terlalu ketat atau output membingungkan.
- Persentase build sukses pertama kali setelah push — menandakan apakah lint/format dijalankan sebelum push.
Dengan tooling seperti GitHub Actions Insights atau membangun badge di README, tim bisa memonitor apakah lint tetap konsisten tanpa mengorbankan waktu iterasi.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!