Cara termudah menjaga konsistensi kode Rust dan mencegah rilis rusak adalah menjalankan lint, test, dan pengujian release sebelum kode masuk ke remote. Dengan cargo-husky Anda bisa memasang Git hook standar yang otomatis memicu cargo fmt, cargo clippy, cargo test, dan pengecekan release sebelum commit dan push.
Dokumen ini menunjukkan langkah-langkah lengkap: instalasi cargo-husky, konfigurasi hook, pengintegrasian linting utama, validasi release, strategi caching build, dan tips memantau kegagalan agar pengembangan tidak mandek.
Standarisasi Hook Git dengan cargo-husky
Mulai dari proyek Rust baru atau yang sudah jalan, jalankan:
cargo install cargo-husky
cargo husky install
Perintah kedua membuat folder .husky/ dan mendaftarkan template yang dapat Anda tambahkan ke package.metadata.cargo-husky di Cargo.toml. Contoh konfigurasi minimal:
[package.metadata.cargo-husky]
pre-commit = "cargo fmt -- --check && cargo clippy -- -D warnings"
pre-push = "cargo test --locked"
Script di atas memastikan setiap commit diawali pengecekan format dan lint tanpa menulis hook manual. Jika ingin lebih banyak kontrol —misalnya membatasi lint hanya pada file staged— bisa gunakan helper seperti cargo fmt -- --check langsung dengan git diff --name-only --cached di dalam file hook.
Mengintegrasikan cargo fmt dan cargo clippy
Agar linting tidak merusak alur kerja, pisahkan logika formatting dan lint strict ke pre-commit dengan detail berikut:
- Formatter:
cargo fmt -- --checkmemeriksa style tanpa mengubah file, maka lebih aman untuk hook. Jika tidak lolos, perbaiki secara lokal lalu ulangi commit. - Linting:
cargo clippy -- -D warningsmencegah peringatan berlalu sebagai error. Anda bisa menambahkan-Zunstable-optionshanya bila tim siap dengan fitur nightly.
Contoh isi .husky/pre-commit agar bisa ditulis ulang kalau perlu tambahan logika:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
cargo fmt -- --check || exit 1
cargo clippy -- -D warnings || exit 1
Gunakan cargo fmt dan cargo clippy secara berurutan untuk menghindari pemeriksaan ulang yang tidak perlu. Jika linting berjalan terlalu lama, injeksi log seperti echo "Running cargo clippy" membantu debugging ketika hook gagal.
Release Check dan Cargo Release otomatis
Pre-push harus lebih tegas, karena ini kesempatan terakhir sebelum kode masuk remote. Tambahkan langkah-langkah berikut:
- Cargo check/test untuk memastikan kompilasi berhasil tanpa menyusun binary utuh:
cargo test --lockedsudah cukup di banyak kasus. - Dry run release (optional):
cargo release --dry-runmemvalidasi tagging dan dokumentasi tanpa menyalin versi baru.
Contoh .husky/pre-push:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
cargo test --locked || exit 1
cargo release --dry-run || exit 1
Jika tim menggunakan cargo release secara aktif, jalankan dry-run untuk memeriksa versi, changelog, dan tag: itu menghindari commit yang membutuhkan rollback karena release gagal.
Strategi Caching dan Monitoring Hook
Lint dan test bisa menelan waktu di mesin developer. Strategi caching berikut membantu menekan ulang waktu eksekusi hook:
- Caching
target/bundling: TentukanCARGO_TARGET_DIRdi.cargo/config.tomlagar build artefak tersimpan di folder yang konsisten dan bisa dicache oleh CI:target-dir = "../.cargo-target". - Gunakan cache incremental:
cargo clippydancargo testmendukung incremental compile. Pastikan~/.cargo/registryjuga tidak dihapus. - Simpan hasil lint/tagging: Simpan log hook di file sementara agar bisa dibagikan ke tim jika hook gagal.
Untuk memantau kegagalan hook:
- Tambahkan catatan di
READMEatau wiki tentang cara menjalankan ulang hook:cargo fmt && cargo clippysebelum commit dancargo testsebelum push. - Gunakan
echodi awal hook untuk menandai fase yang berjalan, lalu kirimkan log penuh jika gagal. Contoh:echo "[hook] running cargo clippy". - Jika hook tidak boleh memblokir (misalnya saat CI masih jalan), sediakan override dengan variabel lingkungan:
[ -z "$SKIP_HOOKS" ] && cargo fmt ....
Terakhir, libatkan tim dengan menetapkan dokumentasi singkat: misalnya “Jika hook gagal, jalankan cargo fmt, lalu cargo clippy, perbaiki peringatan, dan ulangi commit”. Penjelasan ini menjaga fokus pada kualitas sembari tetap produktif.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!