# Regular release (next patch version)
just release
# Patch release
just release patch
# Minor release
just release 0.4.0
# Any explicit version
just release 1.0.0This creates a version-bump/<version> PR that bumps all version manifests, regenerates lockfiles, and appends a changelog entry. Merge the PR to trigger the build automatically.
-
just releaseruns locally onmain— computes the next version, creates aversion-bump/<version>branch, bumps versions in all manifests, regenerates lockfiles, generates a changelog entry, commits, pushes, and opens a PR. -
Merge the PR — the
auto-tag-on-release-pr-mergeworkflow detects theversion-bump/*branch merge and pushes av<version>tag. -
Tag triggers
release.yml— the existing release workflow builds, signs, notarizes, and publishes the desktop app for macOS and Linux.
| Command | Version | Example |
|---|---|---|
just release |
Next patch | 0.3.0 → 0.3.1 |
just release patch |
Next patch | 0.3.0 → 0.3.1 |
just release 0.4.0 |
Explicit minor | 0.3.1 → 0.4.0 |
just release 1.0.0 |
Explicit | 1.0.0 |
just bump-version <version> updates these files:
| File | Field |
|---|---|
desktop/package.json |
"version" |
desktop/src-tauri/tauri.conf.json |
"version" |
desktop/src-tauri/Cargo.toml |
version (under [package]) |
mobile/pubspec.yaml |
version: (preserves build number) |
It also regenerates pnpm-lock.yaml, desktop/src-tauri/Cargo.lock, and mobile/pubspec.lock.
If the automated flow isn't suitable (e.g., building from a non-main ref):
- Go to Actions > Release in the GitHub UI
- Click Run workflow
- Provide the semver version (no
vprefix) and the ref to build from
After the OSS release ships, trigger an internal build via the sprout-releases Buildkite pipeline:
-
Go to the sprout-releases pipeline and click New Build
-
Fill in the input fields:
Field Value Notes version0.3.0Semver, no vprefixsprout_refv0.3.0The OSS git tag — use the tag, not a branch name relay_url(default) Pre-filled with the production relay; usually leave as-is publish_latesttrueUpdates latest.jsonon Artifactory so installed apps auto-update. Set tofalsefor test builds.
Internal desktop builds display a -block suffix in the version (e.g., v0.3.0-block in the Settings panel). This distinguishes them from OSS builds at a glance. iOS builds and GitHub release tags use the clean version (0.3.0) since Apple's CFBundleShortVersionString rejects pre-release suffixes.
Each release produces two GitHub releases:
-
v<version>— the user-facing release with the.dmginstaller (macOS) and.deb/.AppImage(Linux). -
sprout-desktop-latest— a rolling pre-release for the Tauri auto-updater containinglatest.json, the signed.tar.gzarchive, and its.sigsignature.
-
Write access to the
block/sproutGitHub repository -
ghCLI authenticated (gh auth status) -
The following GitHub Actions secrets must be configured:
Secret Purpose SPROUT_UPDATER_PUBLIC_KEYTauri updater public key (minisign) TAURI_SIGNING_PRIVATE_KEYTauri updater private key TAURI_SIGNING_PRIVATE_KEY_PASSWORDPassword for the private key
Switch to main and pull latest before running just release.
Commit or stash your changes before running just release.
The version string must be valid semver: MAJOR.MINOR.PATCH with an optional pre-release suffix. Do not include a v prefix.
Verify that the sprout-desktop-latest release exists and contains a valid latest.json.