3
Memulai Pengembangan dan Build
Halaman ini memandu penyiapan environment pengembangan Termimus, menjalankan dev mode, memverifikasi perubahan, lalu menghasilkan build release. Susunan direktori src/, src-tauri/, dan server/ yang dipakai sepanjang halaman ini dibahas pada Arsitektur Sistem dan Batas Modul.
Prasyarat Toolchain
README menetapkan tiga prasyarat: Rust yang dipasang lewat rustup, Bun (atau Node.js 20+), dan pustaka sistem Linux untuk WebKitGTK. README.md:133-1411
sudo apt install -y pkg-config build-essential \
libwebkit2gtk-4.1-dev libssl-dev \
libayatana-appindicator3-dev librsvg2-dev
Daftar paket apt yang identik dipasang oleh job backend di CI, jadi kegagalan cargo check di mesin lokal biasanya berasal dari pustaka sistem yang belum lengkap, bukan dari kode. .github/workflows/ci.yml:48-842
Alur Setup sampai Build
Diagram berikut memetakan ketergantungan antara toolchain, dev server, dan artefak build. Node mengikuti nama perintah serta kunci konfigurasi yang benar-benar ada di repository.
graph TD
RUST["Rust via rustup"] --> DEPS["bun install"]
BUN["Bun atau Node.js 20+"] --> DEPS
APT["pkg-config build-essential libwebkit2gtk-4.1-dev"] --> DEPS
DEPS --> DEVCMD["beforeDevCommand: bun run dev"]
DEVCMD --> VITE["vite port 1420 strictPort true"]
VITE --> WEBVIEW["window main: 1280x800"]
DEPS --> BUILDFE["bun run build: tsc and vite build"]
BUILDFE --> DIST["frontendDist ../dist"]
DIST --> TBUILD["bun run tauri build"]
TBUILD --> BUNDLE["src-tauri/target/release/bundle/"]
style DEPS fill:#2d7d46,color:#fff
style DEVCMD fill:#f59e0b,color:#000
style VITE fill:#f59e0b,color:#000
style WEBVIEW fill:#8b5cf6,color:#fff
style BUILDFE fill:#2d7d46,color:#fff
style DIST fill:#8b5cf6,color:#fff
style TBUILD fill:#2d7d46,color:#fff
style BUNDLE fill:#336791,color:#fff
%% fig: Alur setup sampai bundle release
%% desc: Toolchain menghasilkan dependencies, lalu bercabang ke dev mode lewat Vite dan ke build produksi yang berakhir di folder bundle Tauri.Menjalankan Dev Mode
Urutan perintah dari README: clone repository, pasang dependencies frontend dengan bun install, lalu jalankan bun run tauri dev. README.md:143-1543
Tauri tidak menjalankan Vite sendiri. Konfigurasi build mengisi beforeDevCommand dengan bun run dev, devUrl dengan http://localhost:1420, beforeBuildCommand dengan bun run build, dan frontendDist dengan ../dist. src-tauri/tauri.conf.json:6-114
Karena Tauri memaku port di devUrl, Vite disetel strictPort: true pada port 1420: bila port sedang dipakai, dev mode gagal start alih-alih berpindah port. Watcher Vite juga mengabaikan **/src-tauri/** agar perubahan kode Rust tidak memicu reload frontend. vite.config.ts:17-325
Skrip di package.json
Empat skrip menjadi satu-satunya pintu masuk perintah frontend dan Tauri. package.json:6-116
| Skrip | Perintah | Isi | Kegunaan |
|---|---|---|---|
dev | bun run dev | vite | dev server yang dipanggil beforeDevCommand |
build | bun run build | tsc && vite build | type check TypeScript lalu build produksi ke dist/ |
preview | bun run preview | vite preview | pratinjau hasil build frontend |
tauri | bun run tauri | tauri | pintu masuk Tauri CLI, misalnya dev dan build |
Verifikasi Lokal Sebelum Pull Request
CONTRIBUTING mewajibkan dua pemeriksaan lulus bersih sebelum PR dibuka. CONTRIBUTING.md:58-707
# 1. Frontend check (TypeScript compiler + Vite production build)
bun run build
# 2. Backend check & tests
cd src-tauri
cargo check --all-targets
cargo test --all-targets
Panduan agen di repository menambahkan dua catatan praktis: cargo check harus bersih dan warning baru diperlakukan sebagai hal yang harus diperbaiki, sedangkan build produksi penuh bun run tauri build --bundles deb berjalan lambat karena kompilasi Rust multi-menit sehingga hanya dijalankan saat benar-benar perlu menghasilkan artifact rilis. AGENTS.md:48-538 Dokumen yang sama menyebut verifikasi manual lewat bun run tauri dev sebagai norma karena belum ada test suite, sementara CONTRIBUTING dan CI tetap menjalankan cargo test --all-targets. AGENTS.md:48-538
Build Release
Perintah bun run tauri build menghasilkan paket Debian, AppImage, atau binary; hasilnya berada di src-tauri/target/release/bundle/. README.md:156-1609
bundle.targets bernilai all, sehingga Tauri memilih target bawaan platform saat build, dan daftar ikon yang dibundel diambil dari src-tauri/icons/. src-tauri/tauri.conf.json:31-4110
Profil release di Cargo.toml menyalakan lto, codegen-units = 1, opt-level = 3, panic = "abort", dan strip. Kombinasi ini memperlambat kompilasi tetapi mengecilkan binary yang dikirim. src-tauri/Cargo.toml:52-5711
Sebelum Menandai Rilis
RELEASE meminta tiga perintah build lokal lulus tanpa error sebelum tag dibuat: cargo check di src-tauri, bun run build, dan go build ./... di server. RELEASE.md:51-6612
Linimasa Setup
Diagram gantt berikut memetakan urutan pekerjaan dari pemasangan toolchain sampai bundle release siap; durasi relatif, bukan angka terukur.
gantt
title Urutan setup environment sampai build release
dateFormat HH:mm
axisFormat %H:%M
section Setup environment
Pasang Rust dan Bun :a1, 00:00, 10m
Pasang pustaka WebKitGTK :a2, after a1, 8m
Clone repository :a3, after a2, 3m
bun install :a4, after a3, 5m
section Siklus harian
bun run tauri dev :b1, after a4, 20m
bun run build :b2, after b1, 4m
cargo check --all-targets :b3, after b2, 6m
cargo test --all-targets :b4, after b3, 5m
section Build release
bun run tauri build :c1, after b4, 25m
Bundle di target/release/bundle :c2, after c1, 2m%% fig: Linimasa setup sampai build release
%% desc: Pemasangan toolchain mendahului bun install, lalu siklus verifikasi lokal berulang sebelum build release menghasilkan bundle.
Continuous Integration
Dua job CI berjalan pada setiap pull_request ke main dan setiap push ke main. Job frontend menyiapkan Bun, memakai cache ~/.bun/install/cache, memasang dependencies dengan bun install --frozen-lockfile, lalu menjalankan bun run build di ubuntu-latest. .github/workflows/ci.yml:19-4313 Job backend memasang pustaka sistem Linux, menyiapkan Rust stable dengan komponen clippy, lalu menjalankan cargo check --all-targets, cargo test --all-targets, dan cargo clippy --all-targets dari direktori src-tauri. .github/workflows/ci.yml:48-842
⚠️ Kunci cache di job
frontenddihitung darihashFiles('bun.lockb'), padahal berkas lock yang ada di repository adalahbun.lock(lockfile Bun versi 1). Selama nama berkasnya tidak diselaraskan, cache dependencies tidak pernah invalid ketikabun.lockberubah. .github/workflows/ci.yml:19-4313 bun.lock:1-414
Push tag v*.*.* memicu workflow rilis terpisah dengan tiga runner paralel: ubuntu-22.04 memakai --bundles deb,appimage, macos-latest memakai --target universal-apple-darwin, dan windows-latest memakai --bundles msi,nsis. .github/workflows/release.yml:12-2315
| Runner | Tauri args | Artifact |
|---|---|---|
ubuntu-22.04 | --bundles deb,appimage | .deb, .AppImage |
macos-latest | --target universal-apple-darwin | .dmg universal |
windows-latest | --bundles msi,nsis | .msi, .exe |
Plugin Baru dan Capability
⚠️ Plugin Tauri v2 hanya bisa dipanggil dari frontend bila izinnya tercantum eksplisit di
src-tauri/capabilities/default.json. Berkas itu memuatcore:default,dialog:default, serta izin clipboard baca dan tulis untuk windowmain. src-tauri/capabilities/default.json:5-2216 Build tetap lolos tanpa entri izin, sehingga kegagalannya baru muncul sebagai error saat runtime. AGENTS.md:2917
Menyelaraskan Nomor Versi
Jangan mengubah field version di package.json, Cargo.toml, tauri.conf.json, atau README.md di dalam PR: versi dan rilis dikelola maintainer. CONTRIBUTING.md:45-4818
Dua daftar berbeda beredar di repository. RELEASE meminta nomor versi identik di 4 berkas, yaitu package.json, src-tauri/Cargo.toml, src-tauri/tauri.conf.json, dan README.md. RELEASE.md:23-4919 AGENTS menyebut 6 berkas, menambahkan src/stores/useUpdateStore.ts dan field version pada response /health di server/internal/handlers/handlers.go, lalu meminta cargo check dijalankan di src-tauri agar Cargo.lock ikut tercatat. AGENTS.md:39-4620 Field versi di endpoint /health dibahas pada Backup, Sync Relay, dan API Server.