Skip to main content
This is the exact, repeatable process to ship a new version. Following it means end users always get working one-click installers and the history stays clean.

Versioning policy (SemVer)

MAJOR.MINOR.PATCH: The crate version lives in Cargo.toml under [workspace.package]; all crates inherit it. The Windows installer default, website schema, lockfile, and changelog mirror that version. Run node scripts/check-release-version.mjs X.Y.Z before tagging to verify every release surface.

Release checklist

1

Green build & tests

2

Bump the version

Update Cargo.toml, the Windows installer default, and the website SoftwareApplication schema. Run cargo build once so Cargo.lock updates, then run node scripts/check-release-version.mjs X.Y.Z.
3

Update CHANGELOG.md

Move ## [Unreleased] items under a new ## [X.Y.Z] - YYYY-MM-DD heading; start a fresh empty Unreleased.
4

Commit on main

5

Tag & push

This triggers the CI release workflow:
6

Wait for CI

.github/workflows/release.yml attaches the macOS DMG, Windows installer, SHA-256 checksum file, generated Scoop manifest, and generated Homebrew cask to the GitHub Release.
7

Smoke-test and update package repositories

Install, launch and connect once on both OSes, then verify the checksums. Copy sharecursor.json to the Scoop bucket and sharecursor.rb to Casks/sharecursor.rb in the Homebrew tap. These external repositories are not changed automatically.
8

Announce

The Release page is the download link for users.

What CI does

Pushing a tag matching v* (or a manual workflow_dispatch).
Adds both Apple targets, runs packaging/macos/build-app.sh $VERSION → universal .app + .dmg (arm64 + Intel).
cargo build --release --features tray,gui, then choco install innosetup and ISCC /DMyAppVersion=$VERSION sharecursor.iss → .exe installer.
Generates checksums plus Scoop/Homebrew manifests from the built artifacts, then publishes every file in the GitHub Release.

Building installers locally

Code signing & notarization (current status)

Builds are unsigned today (no paid developer certificates):
  • macOS: Gatekeeper blocks first launch. Removing this friction needs an Apple Developer ID ($99/yr) and a notarization step (codesign + xcrun notarytool submit). The build script already ad-hoc signs so it runs locally.
  • Windows: SmartScreen shows an “unknown publisher” warning. An EV/OV code-signing certificate would remove it.
When certificates are available, add the signing secrets and explicit signing and notarization steps to the CI jobs.

Rollback

If a release is broken, delete the GitHub Release + tag, fix, and re-tag with a new PATCH version. Never re-use a published version number.