Yomu
CI/CD

Rust Pipeline

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 workflow files dengan parallel quality jobs, SonarCloud coverage, dan multi-arch Docker builds.

Workflow Files

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.

Rust Quality Tools

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.

Rust Quality Gates

ToolThresholdPurpose
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

Rust Build Tools

ToolVersionPurpose
Rust1.85 MSRVRuntime dan compile target
Rust Edition2024Language features
Axum0.8.8Web framework
tokioLatestAsync runtime
nextestLatestParallel test runner
tarpaulinLatestCoverage tool
cargo-auditLatestDependency vuln scanning
cargo-denyLatestLicense/deny checks
DockerMulti-stageImage optimization
BuildxLatestMulti-arch builds

Rust CI Pipeline Jobs

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.

On this page