Build & Kontribusi

Build dari kode sumber, empat pemeriksaan yang diwajibkan CI, dan satu aturan yang tidak bisa ditawar di basis kode ini.

Ditulis untuk Wira Desk 0.3.0

Kontribusi diterima lewat pull request. Ini basis kode Win32 FFI, jadi konvensi di bawah ini bertujuan menjaga kode tetap mudah ditinjau, bukan sekadar formalitas.

Build dari Kode Sumber

Membutuhkan Rust (stable) dan toolchain MSVC di Windows.

.\build.ps1 -Mode prod

Hasilnya: target\release\wiradesk.exe dan target\release\wiradesk-settings.exe.

Membuat build sendiri dari kode sumber juga merupakan cara verifikasi terkuat yang tersedia bagi pengguna saat ini, karena rilisnya belum ditandatangani secara digital. Itulah sebabnya seluruh kode sumber dipublikasikan, bukan hanya biner.

Menjalankan Pengujian

Rangkaian pengujian membutuhkan satu variabel lingkungan. Daemon menautkan manifest elevasi, yang kalau tidak dilewati akan ikut berlaku pada test harness dan membuatnya gagal sebelum satu pengujian pun berjalan:

$env:WIRADESK_SKIP_MANIFEST = '1'
cargo test --workspace

Yang Perlu Dijalankan Sebelum Mengirim

cargo fmt --all
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace

Empat Pemeriksaan yang Diwajibkan CI

PemeriksaanYang dilakukan
Buildfmt, clippy -D warnings, pengujian, dan build rilis, di Windows.
Pemindaian secretgitleaks atas riwayat commit dan working tree, memakai .gitleaks.toml.
Dependensicargo-deny check atas advisory keamanan, lisensi, larangan, dan sumber, dengan graf dependensi dikunci ke x86_64-pc-windows-msvc.
LisensiBagian dari pemeriksaan cargo-deny yang sama: dependensi baru dengan lisensi di luar daftar yang diizinkan akan menggagalkan build, dan itu disengaja.
Jangan memperluas allowlist gitleaks hanya supaya sebuah temuan hilang. Periksa dan tangani temuannya.

Kode Unsafe

Ini basis kode Win32 FFI, jadi unsafe tidak bisa dihindari. Yang tidak boleh adalah unsafe tanpa dokumentasi. undocumented_unsafe_blocks dan missing_safety_doc disetel deny di lint workspace, jadi setiap blok unsafe harus punya komentar SAFETY:, dan build gagal jika komentarnya tidak ada.

Tuliskan prasyarat yang benar-benar diandalkan oleh blok tersebut, bukan deskripsi pemanggilannya. Komentar yang berguna biasanya menyebut salah satu hal berikut:

  • kapasitas buffer, dibandingkan dengan argumen ukuran yang dikirim ke Win32;
  • komponen mana yang memiliki sebuah handle, dan di mana handle tersebut dilepas tepat satu kali;
  • di thread mana pemanggilan harus berjalan;
  • mengapa handle yang tidak valid masih bisa ditoleransi, karena API melaporkan kegagalan alih-alih crash.

Daemon berjalan dengan hak administrator dan memasang hook keyboard global. Karena itulah batas yang satu ini, bukan yang lain, yang dijaga dengan standar ketat.

Konvensi yang Perlu Diketahui

  • CLAUDE.md, AGENTS.md, dan .cursorrules berisi instruksi yang dibaca alat bantu coding berbasis AI, dan ketiganya selalu diselaraskan. Jika Anda mengubah satu, ubah ketiganya dalam commit yang sama. Perbedaan di antara ketiganya tidak terlihat, dan alat yang membaca salinan usang itulah yang akan berperilaku keliru.
  • CHANGELOG.md tidak ditulis bebas. release.yml mengambil bagian ## [x.y.z] yang cocok dengan tag git dan menerbitkannya sebagai catatan rilis, dan updater di dalam aplikasi menampilkan bagian yang sama kepada orang yang sedang memutuskan apakah akan memperbarui. Tag tanpa bagian yang cocok akan menggagalkan rilis, alih-alih merilis catatan yang tidak pernah ditulis siapa pun.
  • Siapa yang boleh menaikkan digit versi yang mana adalah aturan, bukan kebiasaan. Pekerjaan yang membutuhkan kenaikan minor atau major tetap berada di bawah Unreleased sampai pemilik proyek memutuskan.

Melaporkan Sesuatu

Bug atau Ide

Buka issue di repositori. Informasi yang membantu: build Windows Anda, versi Wira Desk, apa yang Anda lakukan, apa yang terjadi, dan apa yang Anda harapkan.

Celah Keamanan

Jangan lewat issue. Gunakan GitHub Security Advisories agar laporan tetap tertutup sampai perbaikannya tersedia. Tidak ada bounty dan tidak ada jaminan waktu tanggapan.

Menulis Entri Changelog

Tulis untuk orang yang sedang memutuskan apakah akan memperbarui, bukan untuk log commit. Updater di dalam aplikasi menampilkan teks tersebut apa adanya; itulah hal terakhir yang dibaca seseorang sebelum mengizinkan installer berjalan dengan hak administrator.