Versioning policy (SemVer)
MAJOR.MINOR.PATCH:
| Bump | When | Wire/config |
|---|---|---|
| PATCH | bug fixes | no wire or config changes |
| MINOR | new features | backward-compatible (old configs still load via #[serde(default)]; PROTOCOL_VERSION unchanged) |
| MAJOR | breaking changes | also bump PROTOCOL_VERSION in crates/protocol/src/lib.rs and document the migration |
Cargo.toml → [workspace.package] version. All crates inherit it.
Release checklist
Bump the version
In
Cargo.toml ([workspace.package] version). Run cargo build once so
Cargo.lock updates.Update CHANGELOG.md
Move
## [Unreleased] items under a new ## [X.Y.Z] - YYYY-MM-DD heading;
start a fresh empty Unreleased.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.What CI does
Trigger
Trigger
Pushing a tag matching
v* (or a manual workflow_dispatch).macos job (macos-14)
macos job (macos-14)
Adds both Apple targets, runs
packaging/macos/build-app.sh $VERSION →
universal .app + .dmg (arm64 + Intel).windows job (windows-latest)
windows job (windows-latest)
cargo build --release --features tray, then choco install innosetup and
ISCC /DMyAppVersion=$VERSION shareclick.iss → .exe installer.release job
release job
Downloads both artifacts and publishes the GitHub Release with auto-generated
notes.
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.
release.yml).