Yomu
CI/CD

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

play

ci.yml

Empat parallel jobs: fmt, clippy, doc, test (PostgreSQL + Redis). Docker job berjalan terakhir. Semua harus lulus.

chart

sonar.yml

tarpaulin coverage → SonarCloud. PostgreSQL + Redis services. Trigger setelah ci.yml sukses.

shield

security-audit.yml

cargo-audit + cargo-deny (deny.toml whitelist). Trigger pada perubahan Cargo.toml dan scan mingguan.

package

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

code

fmt

cargo fmt dengan max_width=100. Gagal jika kode tidak diformat. Berjalan pertama di CI pipeline.

book

clippy

cargo clippy --all --all-targets dengan MSRV 1.85. Tidak ada warnings yang diizinkan. Clippy.toml dikonfigurasi.

read

doc

cargo doc --all --no-deps dengan RUSTDOCFLAGS=-D warnings. Gagal pada doc warnings.

test

nextest

cargo nextest dengan 7 test binaries, 2 retries, 120s timeout. PostgreSQL + Redis services.

chart

tarpaulin

tarpaulin coverage untuk SonarCloud. Melacak branch dan line coverage. Minimum 80% branches.

Quality Gate Rust

AlatThresholdTujuan
cargo fmtharus lulusFormatting kode
clippytanpa warningsKualitas kode
cargo doctanpa warningsKualitas dokumentasi
nextestlolos semua testsKebenaran fungsional
tarpaulin≥80% branchesKualitas coverage
cargo-audittanpa high vulnsSecurity scanning
cargo-denycocok whitelistLicense compliance

Alat Build Rust

AlatVersiTujuan
Rust1.85 MSRVRuntime dan compile target
Rust Edition2024Language features
Axum0.8.8Web framework
tokioTerbaruAsync runtime
nextestTerbaruParallel test runner
tarpaulinTerbaruCoverage tool
cargo-auditTerbaruDependency vuln scanning
cargo-denyTerbaruLicense/deny checks
DockerMulti-stageImage optimization
BuildxTerbaruMulti-arch builds

Jobs Pipeline CI Rust

checklist

fmt job

Menjalankan cargo fmt --all -- --check. Memeriksa formatting tanpa mengubah file. Fast fail jika kode tidak diformat.

linters

clippy job

Menjalankan cargo clippy --all --all-targets -- -W warnings. Mengaktifkan semua lints dan memperlakukan warnings sebagai error.

book

doc job

Menjalankan cargo doc --all --no-deps. Mengatur RUSTDOCFLAGS=-D warnings untuk gagal pada doc warnings.

test

test job

Menjalankan cargo nextest. Memulai PostgreSQL 17 dan Redis 7 services. Membuild dan menjalankan 7 test binaries.

docker

docker job

Setelah semua jobs lain lulus, membuild Docker image dengan Buildx. Menjalankan docker buildx build --platform linux/amd64,linux/arm64.

Integrasi SonarCloud

cloud

tarpaulin → SonarCloud

Setelah ci.yml lulus, sonar.yml menjalankan tarpaulin coverage dan upload ke SonarCloud. Memerlukan secret SONAR_TOKEN.

chart

Coverage Metrics

  • Branch coverage dilacak
  • Line coverage dilacak
  • Code smells dilacak
  • Minimum 80% branches diperlukan

Security Scanning

vuln

cargo-audit

Memindai Cargo.lock untuk known vulnerabilities pada dependencies. Berjalan mingguan dan pada manual dispatch.

shield

cargo-deny

Memberlakukan deny.toml license whitelist dan advisory database. Mem-block builds jika pelanggaran license atau advisory ditemukan.

clock

Triggers

  • Scan terjadwal mingguan
  • Dipicu ketika Cargo.toml atau Cargo.lock berubah
  • Manual dispatch tersedia

Multi-Arch Docker Build

cpu

Platforms

Membangun untuk linux/amd64 dan linux/arm64. Docker Buildx digunakan untuk cross-platform builds.

tag

Labels

Label SBOM (Software Bill of Materials) disertakan. Version tags di-push ke GHCR.

compress

Image Size

Multi-stage build mengurangi ukuran image final. Base image Rust 1.85 Alpine.

Deployment

registry

Image Registry

Image: ghcr.io/advprog-2026-a14-project/yomu-backend-rust:main (production) atau :staging (staging)

trigger

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

Staging Update

Untuk staging, gunakan docker service update --image untuk update individual service tanpa full stack deploy.

Alur CD

  1. Release Workflow — Setelah CI lulus, release.yml membuild Docker image multi-arch dan push ke GHCR
  2. Repository Dispatch — Workflow mengirim event ke yomu-deployment dengan payload:
    {
      "image_tag": "main"
    }
  3. Deploy Triggerdeploy-production.yml di yomu-deployment menerima event repository_dispatch
  4. SSH Connection — Workflow menggunakan appleboy/ssh-action untuk SSH ke VPS GCP
  5. Stack Deploy — Menjalankan docker stack deploy -c docker-compose.swarm.yml yomu
  6. Rolling Update — Docker Swarm melakukan rolling update service rust
  7. Smoke Test — Verifikasi endpoint /health service Rust
manual

Deploy Manual

Gunakan workflow_dispatch di yomu-deployment dengan input image_tag untuk deploy manual. Berguna untuk rollback atau deploy hotfix.

service

Service Update

Untuk update staging cepat: docker service update --image ghcr.io/...:staging yomu_rust. Tidak perlu full stack deploy.

Tag Image

EnvironmentTag PatternTrigger
ProductionmainPush ke branch main
StagingstagingPush ke branch staging
Specific<commit-sha>Workflow dispatch manual

On this page