CI
The GitHub Actions workflows and what each runs.
CI is split by changed path so a Rust-only change does not run the TypeScript pipeline, and vice versa.
ci-ts.yml
Triggers on apps/**, packages/**, workspace/turbo/lockfile changes, and on
PRs to main.
lint-build-test—pnpm install,turbo lint,turbo build,turbo test.mobile— builds--filter=mobile..., then mobile lint / check-types / test / build.
ci-go.yml
Triggers on services/relay/**.
lint-build-test—go vet,gofmt, build, test.vuln-scan—govulncheck.integration-test—./scripts/test-integration.sh.
ci-rust.yml
Triggers on services/storage-node/**.
lint-build-test—cargo fmt --check, clippy-D warnings, build, test.audit— rustsecaudit-checkwith a pinned ignore list.
release-node.yml
Triggers on node-v* tags. Re-runs the Rust fmt/clippy/test gates, checks the
tag against services/storage-node/Cargo.toml, builds a static Linux x86_64
binary, and opens a draft GitHub Release with the tarball and its SHA-256.
Cut a release with bash scripts/release-node.sh <version> and publish the
draft after reviewing its notes.
release-mobile.yml
Triggers on mobile-v* tags. Checks the tag against
apps/mobile/app.json, builds the workspace packages, regenerates the native
Android project with Expo prebuild, and assembles a universal release APK. It
opens a draft GitHub Release with the APK and its SHA-256. The build needs
the GOOGLE_SERVICES_JSON repository secret (the Firebase config is not
committed). APKs are debug-signed until a release keystore is configured.
e2e.yml
Not a required PR check. Runs on workflow_dispatch, a nightly schedule, and on
PRs touching deploy/**, scripts/e2e-*, services/**, apps/**, or
packages/**.
It builds the Rust node and TS packages, starts the Compose unit, waits for Relay health, then runs the bootstrap-pairing and Path C end-to-end harnesses, dumping logs on failure.
Local pre-push
make install-hooks installs scripts/pre-push, which runs gofmt checks,
cargo fmt --check, and cargo clippy -D warnings before you push.