3.6 KiB
Releasing Sprout Desktop
This document describes how to create a new OSS release of the Sprout desktop app.
Prerequisites
- Write access to the
block/sproutGitHub repository. Only collaborators with push permissions can trigger the release workflow. - The following GitHub Actions secrets must be configured on the repo
(Settings > Secrets and variables > Actions):
Secret Purpose SPROUT_UPDATER_PUBLIC_KEYTauri updater public key (minisign) TAURI_SIGNING_PRIVATE_KEYTauri updater private key (used to sign the update archive) TAURI_SIGNING_PRIVATE_KEY_PASSWORDPassword for the private key
Creating a Release
-
Go to Actions > Release in the GitHub UI:
https://github.com/block/sprout/actions/workflows/release.yml -
Click "Run workflow".
-
Fill in the inputs:
- version — a semver version string, e.g.
0.4.0or1.0.0-beta.1. Do not include avprefix. - ref — the branch, tag, or commit SHA to build from. Defaults to
main.
- version — a semver version string, e.g.
-
Click "Run workflow" to start the build.
The workflow will:
- Validate the version string
- Check out the specified ref
- Patch the version into
package.json,tauri.conf.json, andCargo.toml - Build all sidecar binaries (
sprout-acp,sprout-mcp,git-credential-nostr) - Build the Tauri desktop app with updater signing enabled
- Create a versioned GitHub release (
v0.4.0) with the.dmginstaller - Update the rolling
sprout-desktop-latestrelease with the signed update archive andlatest.jsonmanifest for the auto-updater
What Gets Published
Each release produces two GitHub releases:
-
v<version>(e.g.v0.4.0) — the user-facing release with the.dmginstaller. This is what users download manually. -
sprout-desktop-latest— a rolling pre-release used by the Tauri auto-updater. Containslatest.json, the signed.tar.gzarchive, and its.sigsignature. Users should not download from this release directly.
Platform Support
The release workflow currently builds for macOS ARM64 only
(darwin-aarch64). Intel Mac (darwin-x86_64) support would require
adding a matrix build to the workflow.
Code Signing (macOS)
OSS release builds use ad-hoc code signing (signingIdentity: "-")
rather than a Developer ID certificate. This means the app is not
notarized by Apple.
On first launch, macOS Gatekeeper will block the app with a "damaged" or "unidentified developer" message. Users can bypass this by right-clicking the app > Open (or via System Settings > Privacy & Security). After the first launch the app will open normally.
Auto-Updater
The desktop app checks for updates by fetching latest.json from the
sprout-desktop-latest release:
https://github.com/block/sprout/releases/download/sprout-desktop-latest/latest.json
When a new version is available, the app downloads the signed archive, verifies the signature against the embedded public key, and applies the update.
Troubleshooting
Build fails at "Validate version"
The version string must be valid semver: MAJOR.MINOR.PATCH with an
optional pre-release suffix (e.g. 1.0.0-beta.1). Do not include a v
prefix.
Build fails at "Build Tauri app"
Check that the signing secrets are configured correctly. The build
requires TAURI_SIGNING_PRIVATE_KEY and
TAURI_SIGNING_PRIVATE_KEY_PASSWORD to be set.
Auto-updater reports "no update available"
Verify that the sprout-desktop-latest release exists and contains a
valid latest.json. If the user is on Intel Mac, no update will be
found (ARM64 only).