Pipeline Rust
CI/CD Rust backend — cargo fmt, clippy, doc, nextest, tarpaulin, dan multi-arch Docker
Rust backend menggunakan Edition 2024 dengan MSRV 1.85 dan Axum 0.8.8. Pipeline menjalankan empat file workflow dengan parallel quality jobs, SonarCloud coverage, dan multi-arch Docker builds. Deployment melalui GHCR → yomu-deployment → VPS Docker Swarm.
File Workflow
ci.yml
Empat parallel jobs: fmt, clippy, doc, test (PostgreSQL + Redis). Docker job berjalan terakhir. Semua harus lulus.
sonar.yml
tarpaulin coverage → SonarCloud. PostgreSQL + Redis services. Trigger setelah ci.yml sukses.
security-audit.yml
cargo-audit + cargo-deny (deny.toml whitelist). Trigger pada perubahan Cargo.toml dan scan mingguan.
release.yml
Multi-arch Docker build (amd64, arm64). Push ke GHCR dengan version tags. Label SBOM disertakan. Mengirim repository_dispatch ke yomu-deployment.
Alat Kualitas Rust
fmt
cargo fmt dengan max_width=100. Gagal jika kode tidak diformat. Berjalan pertama di CI pipeline.
clippy
cargo clippy --all --all-targets dengan MSRV 1.85. Tidak ada warnings yang diizinkan. Clippy.toml dikonfigurasi.
doc
cargo doc --all --no-deps dengan RUSTDOCFLAGS=-D warnings. Gagal pada doc warnings.
nextest
cargo nextest dengan 7 test binaries, 2 retries, 120s timeout. PostgreSQL + Redis services.
tarpaulin
tarpaulin coverage untuk SonarCloud. Melacak branch dan line coverage. Minimum 80% branches.
Quality Gate Rust
| Alat | Threshold | Tujuan |
|---|---|---|
| cargo fmt | harus lulus | Formatting kode |
| clippy | tanpa warnings | Kualitas kode |
| cargo doc | tanpa warnings | Kualitas dokumentasi |
| nextest | lolos semua tests | Kebenaran fungsional |
| tarpaulin | ≥80% branches | Kualitas coverage |
| cargo-audit | tanpa high vulns | Security scanning |
| cargo-deny | cocok whitelist | License compliance |
Alat Build Rust
| Alat | Versi | Tujuan |
|---|---|---|
| Rust | 1.85 MSRV | Runtime dan compile target |
| Rust Edition | 2024 | Language features |
| Axum | 0.8.8 | Web framework |
| tokio | Terbaru | Async runtime |
| nextest | Terbaru | Parallel test runner |
| tarpaulin | Terbaru | Coverage tool |
| cargo-audit | Terbaru | Dependency vuln scanning |
| cargo-deny | Terbaru | License/deny checks |
| Docker | Multi-stage | Image optimization |
| Buildx | Terbaru | Multi-arch builds |
Jobs Pipeline CI Rust
fmt job
Menjalankan cargo fmt --all -- --check. Memeriksa formatting tanpa mengubah file. Fast fail jika kode tidak diformat.
clippy job
Menjalankan cargo clippy --all --all-targets -- -W warnings. Mengaktifkan semua lints dan memperlakukan warnings sebagai error.
doc job
Menjalankan cargo doc --all --no-deps. Mengatur RUSTDOCFLAGS=-D warnings untuk gagal pada doc warnings.
test job
Menjalankan cargo nextest. Memulai PostgreSQL 17 dan Redis 7 services. Membuild dan menjalankan 7 test binaries.
docker job
Setelah semua jobs lain lulus, membuild Docker image dengan Buildx. Menjalankan docker buildx build --platform linux/amd64,linux/arm64.
Integrasi SonarCloud
tarpaulin → SonarCloud
Setelah ci.yml lulus, sonar.yml menjalankan tarpaulin coverage dan upload ke SonarCloud. Memerlukan secret SONAR_TOKEN.
Coverage Metrics
- Branch coverage dilacak
- Line coverage dilacak
- Code smells dilacak
- Minimum 80% branches diperlukan
Security Scanning
cargo-audit
Memindai Cargo.lock untuk known vulnerabilities pada dependencies. Berjalan mingguan dan pada manual dispatch.
cargo-deny
Memberlakukan deny.toml license whitelist dan advisory database. Mem-block builds jika pelanggaran license atau advisory ditemukan.
Triggers
- Scan terjadwal mingguan
- Dipicu ketika Cargo.toml atau Cargo.lock berubah
- Manual dispatch tersedia
Multi-Arch Docker Build
Platforms
Membangun untuk linux/amd64 dan linux/arm64. Docker Buildx digunakan untuk cross-platform builds.
Labels
Label SBOM (Software Bill of Materials) disertakan. Version tags di-push ke GHCR.
Image Size
Multi-stage build mengurangi ukuran image final. Base image Rust 1.85 Alpine.
Deployment
Image Registry
Image: ghcr.io/advprog-2026-a14-project/yomu-backend-rust:main (production) atau :staging (staging)
Trigger Deploy
Setelan CI mengirim repository_dispatch ke repo yomu-deployment untuk memicu deploy ke VPS. Event type: deploy-trigger dengan payload image_tag.
Staging Update
Untuk staging, gunakan docker service update --image untuk update individual service tanpa full stack deploy.
Alur CD
- Release Workflow — Setelah CI lulus,
release.ymlmembuild Docker image multi-arch dan push ke GHCR - Repository Dispatch — Workflow mengirim event ke yomu-deployment dengan payload:
{ "image_tag": "main" } - Deploy Trigger —
deploy-production.ymldi yomu-deployment menerima eventrepository_dispatch - SSH Connection — Workflow menggunakan
appleboy/ssh-actionuntuk SSH ke VPS GCP - Stack Deploy — Menjalankan
docker stack deploy -c docker-compose.swarm.yml yomu - Rolling Update — Docker Swarm melakukan rolling update service rust
- Smoke Test — Verifikasi endpoint
/healthservice Rust
Deploy Manual
Gunakan workflow_dispatch di yomu-deployment dengan input image_tag untuk deploy manual. Berguna untuk rollback atau deploy hotfix.
Service Update
Untuk update staging cepat: docker service update --image ghcr.io/...:staging yomu_rust. Tidak perlu full stack deploy.
Tag Image
| Environment | Tag Pattern | Trigger |
|---|---|---|
| Production | main | Push ke branch main |
| Staging | staging | Push ke branch staging |
| Specific | <commit-sha> | Workflow dispatch manual |