How we build and release
We use GitHub Actions workflows to automate the entire release process.
Main idea: code is the source of truth. We bump packages/desktop/package.json with npm version, which creates a desktop-vX.Y.Z tag. CI triggers on that tag and validates the tag equals the code version before building.
We release in three steps:
- Create a draft release on Github
- Build and upload those builds to the draft release
- Publish the draft as the latest release
Create a draft
- Trigger: push a tag
desktop-vX.Y.Z - Workflow: "release-1-draft"
- Result: a draft GitHub Release with autogenerated notes (no binaries yet)
- Validates that the tag version matches
packages/desktop/package.jsonversion
Build and upload builds (All platforms on CI)
- Workflow: "release-2-build-upload" (manual, input the tag)
- Builds and uploads macOS (signed + notarized), Windows, and Linux artifacts to the same draft release
- Uses Git LFS for asset handling (provider images, icons, etc.)
Publish the draft
- Workflow: "release-3-finalize" (manual, input the tag)
- Sets
draft=falseso users and auto-updaters see the new version
Github actions
See .github/workflows/ in the root
Use gh cli tool to inspect workflows if needed
Notes
- All platforms are built on CI. macOS artifacts are code-signed and notarized automatically.
- We produce a single universal macOS DMG (Intel + Apple Silicon).
- The latest public release is available on the download page: silain.com/download.