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:
BumpWhenWire/config
PATCHbug fixesno wire or config changes
MINORnew featuresbackward-compatible (old configs still load via #[serde(default)]; PROTOCOL_VERSION unchanged)
MAJORbreaking changesalso bump PROTOCOL_VERSION in crates/protocol/src/lib.rs and document the migration
The crate version lives once in the workspace: Cargo.toml → [workspace.package] version. All crates inherit it.

Release checklist

1

Green build & tests

cargo test                       # native
cargo test --no-default-features # core
cargo build --release --features tray
cargo run --release -- bench --encrypted   # no latency regression
2

Bump the version

In Cargo.toml ([workspace.package] version). Run cargo build once so Cargo.lock updates.
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

git add -A && git commit -m "release: vX.Y.Z"
5

Tag & push

This triggers the CI release workflow:
git tag vX.Y.Z
git push origin main --tags
6

Wait for CI

.github/workflows/release.yml builds and attaches ShareClick-X.Y.Z.dmg (macOS universal) and ShareClick-Setup-X.Y.Z.exe (Windows installer) to a GitHub Release.
7

Smoke-test & announce

Install, launch and connect once on both OSes. 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, then choco install innosetup and ISCC /DMyAppVersion=$VERSION shareclick.iss.exe installer.
Downloads both artifacts and publishes the GitHub Release with auto-generated notes.

Building installers locally

# produces dist/ShareClick.app + dist/ShareClick-<ver>.dmg
bash packaging/macos/build-app.sh 0.1.0
# after cargo build --release --features tray
iscc /DMyAppVersion=0.1.0 packaging\windows\shareclick.iss

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 steps to the CI jobs (see the TODO markers in release.yml).

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.