Skip to content

Releasing and Contributing

CapsaicinBunny edited this page Jun 20, 2026 · 1 revision

Releasing & Contributing

Continuous integration

Two GitHub Actions workflows (.github/workflows/):

  • ci.yml — typecheck / lint / format / test / build, on every pull request and on pushes to main and release. The golden-graph and layout-stability snapshots run as part of bun test, so CI gates correctness and layout stability on every PR.
  • release.yml — the cross-platform desktop build, on a push to the release branch or a v* tag. Per platform it builds the native analyzer-core addon, compiles the Bun sidecar, and runs tauri build.

See docs/RELEASING.md for the current matrix (it's an area of active change — see the open release PRs).

How releases are built

  • Each leg builds the per-platform analyzer-core.node and sidecar on a runner of that platform, so the native artifacts always match the target.
  • Builds are unsigned (no code-signing certs), so installers warn on first launch and auto-update is disabled. See Installation.
  • On a v* tag the workflow publishes a draft GitHub Release with the installers, plus best-effort SHA256SUMS-*.txt for verification.
  • fail-fast: false, so one platform failing doesn't block the others from publishing.

Security note. Linux builds pin parts of the GTK/webkit stack (e.g. glib); tracked advisories live in SECURITY.md.

Contributing

Before you push

Run the same gates CI does:

bun run typecheck     # tsgo --noEmit
bun run lint          # oxlint --type-aware
bun run format:check  # oxfmt
bun test              # unit tests + golden/stability snapshots

See Development & Building for the full script list and the native rebuild steps.

Conventions

  • Commits follow Conventional Commits — feat(layout): …, fix(sidebar): …, perf(layout): …, docs: …, refactor(...). Scope is the subsystem.
  • Lint & format are oxlint / oxfmt (not ESLint/Prettier). Run bun run lint:fix / bun run format.
  • Tests are expected for new logic. The kernel, layout, query language, rules engine, diff, exports, and editor commands are all pure and unit-tested — follow the existing *.test.ts pattern next to the code.
  • Snapshots. If you change analyzer output or a layout, the golden/stability snapshots will change. Regenerate intentionally (bun test bench/golden.test.ts --update-snapshots, BENCH_UPDATE=1 bun test bench/stability.test.ts) and review the diff before committing.
  • Determinism. Layout, community detection, SCC, and insights must stay deterministic — same input, same output. Avoid unseeded randomness and unordered iteration in those paths.

Touching native code

If you change analyzer-core/ (Rust) or vello-renderer/ (Rust→WASM), the committed prebuilt artifact must be rebuilt and committed for the change to take effect at runtime. See the native rebuild steps in Development & Building.

Where things live

A quick orientation is in Architecture Overview; the subsystem deep-dives are linked from there and from the sidebar.

License

Dual-licensed under Apache-2.0 OR MIT, at your option. Contributions are accepted under the same dual license.

Clone this wiki locally