One-command packaging
Building in stages
Where artifacts land
Windows produces no MSI. The WiX toolchain is unreliable with CJK product names,
while NSIS is not — so NSIS is the only path kept.
Packaging is not releasing
These get conflated constantly, but the responsibilities are different:release.mjs only syncs the version, tags, and pushes to the remote — it does not
attach installers to a GitHub Release. To mirror to GitHub (including tag and history
cleanup), run ./scripts/sync-github.sh. See docs/release.md in the repository.
Mobile is a separate pipeline
Mobile runs on its ownrelease-mobile.yml workflow:
- Manual trigger only — it does not follow main releases;
- Produces unsigned IPA / APK, kept as workflow artifacts;
- Not attached to Releases.
Version numbers
The version is a single source of truth, synced acrosspackage.json, the Tauri
config, and the individual workspace packages. bun run release syncs it before
tagging. Do not hand-edit one package.json.
Pre-release checklist
1
Preflight the environment
./scripts/build-release.sh --check2
Run the tests
3
Confirm plugin artifacts are present
4
Package and verify the installer
Install from the bundle directory in a clean environment and run the smoke test —
especially keychain reads/writes and sidecar startup.
5
Release
bun run release to tag and push; ./scripts/sync-github.sh if you want the
GitHub mirror.Back to reference
See what comes next.
