Release & Versioning
Changeset increments, packaging pipelines, SmartScreen EV signing, and auto-updaters.
This guide outlines our release process, versioning strategies, packaging, and auto-updater roadmaps.
Versioning Strategy
We use Changesets to coordinate version increments and generate changelogs across our packages and applications:
Adding a Changeset
Whenever you make a user-facing change that requires a version increment, run:
npx changeset- Select the packages that have changed (e.g.
@leadforge/desktop). - Select the version bump type:
major,minor, orpatch. - Provide a summary of the changes. This will be automatically added to
CHANGELOG.mdfiles upon release.
Versioning in CI
On release integration runs:
npx changeset versionThis bumps version fields in package.json files and compiles changelogs.
Packaging and Compiling
We package the desktop application using electron-vite for bundling and electron-builder for installer packaging.
Windows Installer
To build the setup installer for Windows:
pnpm packageThis runs electron-builder --win under the hood. The resulting installer will be located under apps/desktop/dist/leadforge-setup-<version>.exe.
Code Signing Roadmap
Currently, our beta releases are unsigned to minimize operational overhead. In production releases, we enforce code signing:
Windows SmartScreen Code Signing
- Target: Evade SmartScreen warnings on installation.
- Roadmap: Integrate EV (Extended Validation) Code Signing Certificates into CI/CD pipelines via cloud HSM (Hardware Security Module) signing (e.g. SignPath).
macOS Gatekeeper Code Signing
- Target: Prevent macOS Gatekeeper warnings.
- Roadmap: Register an Apple Developer account and sign/notarize macOS
.dmgfiles using Apple'snotarytoolAPI integrated inside Turborepo release tasks.
Auto-Updater System
Our update manager (updater.ts) coordinates downloads and verifies executable integrity before installation.
The flowchart below maps the update verification and installation loop:
- Polling: The desktop application periodically queries the GitHub Releases API for new releases matching target tags.
- Download & Verify: Downloads the installer binary along with its signature metadata. The updater verifies the download's SHA256 checksum against release records.
- Execution Safety: The update manager checks that no background crawler tasks or email sender workers are running (
activeWorkers.size === 0) before running the installer. - Silent Update: On Windows, it spawns the installer with the
/Sflag to perform a silent, zero-click update.
Support Bundles & Diagnostics
In case of user issues, we collect local logs without violating privacy:
- The user exports a Support Bundle from the Diagnostics cockpit.
- The application compresses the daily log files (
leadforge.log) and configuration states into a single ZIP file. - All sensitive parameters (
openRouterKey,smtpPassword,imapPassword) are replaced with[MASKED]during collection. - The user attaches the ZIP file to a GitHub issue.