CI/CD
GitHub Actions
CI pipeline configuration and workflow jobs
Workflows
Two workflow files live in .github/workflows/:
| File | Trigger | Purpose |
|---|---|---|
ci.yml | Push / PR to Trunk | Lint, build, test, package |
release.yml | Tag v* | Build release binaries + GitHub Release |
CI Pipeline (ci.yml)
Job Graph
Lint Jobs
| Job | What it checks |
|---|---|
lint-rust | cargo fmt --check + cargo clippy on analysis, server, certs (-D warnings) |
lint-frontend | biome check + tsc --noEmit |
The server is now linted on Ubuntu since it compiles cross-platform (no Windows-only dependencies after wiring the analysis crate).
Build Jobs
| Job | Runner | Artifact |
|---|---|---|
build-analysis | ubuntu-latest | Analysis + Server (cross-platform) |
build-server | windows-latest | Full workspace including Agent + Installer (Windows-only) |
build-desktop | ubuntu-latest | Next.js production build |
build-docs | ubuntu-latest | Fumadocs production build |
The analysis crate and server build on Ubuntu to verify cross-platform compatibility. The agent and installer require Windows and are built separately.
Test Jobs
| Job | Runner | Depends on |
|---|---|---|
test-analysis | ubuntu-latest | build-analysis |
test-server | windows-latest | build-server |
Security
The audit job runs cargo audit to scan for known vulnerabilities in Rust dependencies.
Package
package-desktop only runs on pushes to Trunk (not PRs). It builds the Electron app on macOS, Linux, and Windows via a matrix strategy and uploads artifacts.
Release Pipeline (release.yml)
Triggered by pushing a tag like v0.2.0.
Steps
- Builds on
windows-latest - Compiles all Rust workspace crates in release mode
- Uploads release binaries as artifacts
- Creates a GitHub Release with auto-generated release notes
How to release
# 1. Update versions in Cargo.toml + desktop/package.json
# 2. Commit
git add -A && git commit -m "chore: bump to v0.2.0"
# 3. Tag and push
git tag v0.2.0
git push origin Trunk --tagsThe release workflow builds everything and publishes the GitHub Release automatically.
Key Actions
| Action | Purpose |
|---|---|
actions/checkout@v4 | Clone repository |
dtolnay/rust-toolchain@stable | Install Rust toolchain |
Swatinem/rust-cache@v2 | Cache Cargo registry + target dir |
oven-sh/setup-bun@v2 | Install Bun runtime |
actions/upload-artifact@v4 | Share build artifacts between jobs |
actions/download-artifact@v4 | Download shared artifacts |
softprops/action-gh-release@v2 | Create GitHub Release with files |
Caching
- Rust:
Swatinem/rust-cache@v2caches~/.cargoandtarget/, typically saving 2-5 minutes per build - Bun:
oven-sh/setup-bun@v2caches the global install cache