4.1 KiB
Releasing Sprout Desktop
Quick Start
# Regular release (next minor version)
just release
# Patch release
just release patch
# Explicit version
just release 1.0.0
This 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.
How It Works
-
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.
Release Types
| Command | Version | Example |
|---|---|---|
just release |
Next minor | 0.3.0 → 0.4.0 |
just release patch |
Next patch | 0.3.0 → 0.3.1 |
just release 1.0.0 |
Explicit | 1.0.0 |
Version Files
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.
Manual Fallback
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
Internal Releases
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.
What Gets Published
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.
Prerequisites
- 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
Troubleshooting
just release fails with "must be on main branch"
Switch to main and pull latest before running just release.
just release fails with "working tree is dirty"
Commit or stash your changes before running just release.
Build fails at "Validate version"
The version string must be valid semver: MAJOR.MINOR.PATCH with an optional pre-release suffix. Do not include a v prefix.
Auto-updater reports "no update available"
Verify that the sprout-desktop-latest release exists and contains a valid latest.json.