This document captures the current release flow for a new BenchLocal desktop release.
- BenchLocal desktop releases use the workspace/app version, for example
0.2.1. - For a desktop client-only release, update:
package.jsonapp/package.jsonpackage-lock.json
@benchlocal/coreand@benchlocal/sdkshould only be bumped when those npm packages are actually being released.- Internal workspace packages do not need to be version-bumped for every desktop release.
- Bump the desktop client version without creating a tag yet:
npm version <version> --workspace app --include-workspace-root --no-git-tag-versionExample:
npm version 0.2.2 --workspace app --include-workspace-root --no-git-tag-version- Review the working tree and commit the release prep:
git status --short
git add package.json app/package.json package-lock.json
git commit -m "Release BenchLocal v<version>"- Build release artifacts from that exact release commit:
npm run release:mac
npm run build:win
npm run build:linuxNotes:
- macOS should use
release:mac, notbuild:mac - Windows and Linux use
build:winandbuild:linux npm run release:allruns the same three builds in order
- Confirm release artifacts in
app/dist:
BenchLocal-<version>-apple-silicon.dmgBenchLocal-<version>-apple-silicon.dmg.blockmapBenchLocal-<version>-apple-silicon.zipBenchLocal-<version>-apple-silicon.zip.blockmapBenchLocal-<version>-windows-x64.exeBenchLocal-<version>-windows-x64.exe.blockmapBenchLocal-<version>-windows-x64.zipBenchLocal-<version>-linux-x64.AppImageBenchLocal-<version>-linux-x64.tar.gzlatest.ymllatest-mac.ymllatest-linux.yml
Notes:
- these
latest*.ymlfiles power the in-app self-update flow - every desktop release must publish the matching metadata files alongside the platform artifacts
- the blockmap files are used by
electron-updaterfor differential downloads and should be uploaded with the artifacts that generated them - the GitHub tag must be
v<version>because the updater is configured withtagNamePrefix: v
- Push the release commit and create the release tag:
git push origin main
git tag v<version>
git push origin v<version>- Create the GitHub release for
v<version>and upload the artifacts fromapp/dist.
Notes:
- publish the GitHub release after all assets are uploaded; draft releases are not visible to the updater feed
- upload the
latest*.ymlmetadata files and.blockmapfiles along with the installers and archives - if a release is published without
latest-mac.yml,latest.yml, orlatest-linux.yml, installed apps can show 404 errors when users click "Check for Updates"
BenchLocal uses electron-updater with the GitHub Releases provider. Production update checks look for the latest published GitHub release and download the matching updater metadata:
- macOS:
latest-mac.yml - Windows:
latest.yml - Linux:
latest-linux.yml
Before announcing a release, verify these URLs return HTTP 200:
curl -fsSL https://github.com/stevibe/BenchLocal/releases/download/v<version>/latest-mac.yml
curl -fsSL https://github.com/stevibe/BenchLocal/releases/download/v<version>/latest.yml
curl -fsSL https://github.com/stevibe/BenchLocal/releases/download/v<version>/latest-linux.ymlThen inspect each metadata file and confirm:
version:matches<version>- every referenced
url:file exists in the same GitHub release assets - macOS metadata references the
.zipartifact because that is what Squirrel.Mac applies during update installation
v0.2.2 is the first release that includes the self-update client. Users on v0.2.1 still need to install v0.2.2 manually. After users are on v0.2.2 or later, future releases can be installed through the in-app updater.
Before using release:mac, make sure the local macOS release environment is ready:
npm run release:doctor:macIf setup is needed:
npm run release:setup:macYou can test the updater end to end without creating a GitHub release by pointing an installed BenchLocal build at a local HTTP feed.
- Install an older packaged build, for example
0.2.2. - Build a newer release, for example
0.2.3, soapp/distcontains:- the platform artifacts
latest.ymllatest-mac.ymllatest-linux.yml
- Serve
app/distover HTTP, for example:
cd app/dist
python3 -m http.server 9000- Launch the installed older app with
BENCHLOCAL_UPDATE_URLpointed at that server:
BENCHLOCAL_UPDATE_URL=http://127.0.0.1:9000/ /Applications/BenchLocal.app/Contents/MacOS/BenchLocalNotes:
- the updater override is intended for packaged app testing; dev mode still disables self-update
BENCHLOCAL_UPDATE_CHANNELis optional if you need to override the update channel name- the About dialog shows the active update feed so you can confirm the app is using the local test server
- after "Restart to Update", relaunch with
BENCHLOCAL_UPDATE_URLagain if you want another local-feed check; the environment override may not be preserved by the updater relaunch
Before publishing, collect:
- commit log since the previous release tag
- user-facing changes since the previous release
- new official Bench Pack support or platform/runtime changes
- installer/runtime fixes that affect production usage
Useful command:
git log --oneline <previous-tag>..HEAD- verify the tag points to the intended release commit
- verify the GitHub release assets match the current version number
- verify the
latest*.ymlGitHub URLs return HTTP 200 - verify an installed update-capable build can detect the new release from GitHub Releases
- verify the app launches and reports the new version correctly
- if the release bundles updated runtime packages, verify Bench Pack installation and execution still work on the built app