ExfilGuardian
CI/CD

GitHub Actions

CI pipeline configuration and workflow jobs

Workflows

Two workflow files live in .github/workflows/:

FileTriggerPurpose
ci.ymlPush / PR to TrunkLint, build, test, package
release.ymlTag v*Build release binaries + GitHub Release

CI Pipeline (ci.yml)

Job Graph

Lint Jobs

JobWhat it checks
lint-rustcargo fmt --check + cargo clippy on analysis, server, certs (-D warnings)
lint-frontendbiome 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

JobRunnerArtifact
build-analysisubuntu-latestAnalysis + Server (cross-platform)
build-serverwindows-latestFull workspace including Agent + Installer (Windows-only)
build-desktopubuntu-latestNext.js production build
build-docsubuntu-latestFumadocs 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

JobRunnerDepends on
test-analysisubuntu-latestbuild-analysis
test-serverwindows-latestbuild-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

  1. Builds on windows-latest
  2. Compiles all Rust workspace crates in release mode
  3. Uploads release binaries as artifacts
  4. 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 --tags

The release workflow builds everything and publishes the GitHub Release automatically.


Key Actions

ActionPurpose
actions/checkout@v4Clone repository
dtolnay/rust-toolchain@stableInstall Rust toolchain
Swatinem/rust-cache@v2Cache Cargo registry + target dir
oven-sh/setup-bun@v2Install Bun runtime
actions/upload-artifact@v4Share build artifacts between jobs
actions/download-artifact@v4Download shared artifacts
softprops/action-gh-release@v2Create GitHub Release with files

Caching

  • Rust: Swatinem/rust-cache@v2 caches ~/.cargo and target/, typically saving 2-5 minutes per build
  • Bun: oven-sh/setup-bun@v2 caches the global install cache

On this page