Lompat ke konten
dokumentasi.id
Commit 0da916f
v1
Star0

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-141

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-84

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.
Fig. 1: Alur setup sampai bundle releaseToolchain 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-154

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-11

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-32

Skrip di package.json

Empat skrip menjadi satu-satunya pintu masuk perintah frontend dan Tauri. package.json:6-11

SkripPerintahIsiKegunaan
devbun run devvitedev server yang dipanggil beforeDevCommand
buildbun run buildtsc && vite buildtype check TypeScript lalu build produksi ke dist/
previewbun run previewvite previewpratinjau hasil build frontend
tauribun run tauritauripintu masuk Tauri CLI, misalnya dev dan build

Verifikasi Lokal Sebelum Pull Request

CONTRIBUTING mewajibkan dua pemeriksaan lulus bersih sebelum PR dibuka. CONTRIBUTING.md:58-70

# 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-53 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-53

Build Release

Perintah bun run tauri build menghasilkan paket Debian, AppImage, atau binary; hasilnya berada di src-tauri/target/release/bundle/. README.md:156-160

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-41

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-57

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-66

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-43 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-84

⚠️ Kunci cache di job frontend dihitung dari hashFiles('bun.lockb'), padahal berkas lock yang ada di repository adalah bun.lock (lockfile Bun versi 1). Selama nama berkasnya tidak diselaraskan, cache dependencies tidak pernah invalid ketika bun.lock berubah. .github/workflows/ci.yml:19-43 bun.lock:1-4

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-23

RunnerTauri argsArtifact
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 memuat core:default, dialog:default, serta izin clipboard baca dan tulis untuk window main. src-tauri/capabilities/default.json:5-22 Build tetap lolos tanpa entri izin, sehingga kegagalannya baru muncul sebagai error saat runtime. AGENTS.md:29

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-48

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-49 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-46 Field versi di endpoint /health dibahas pada Backup, Sync Relay, dan API Server.