Repository navigation
Updater: release builds check their channel and update themselves - #389
Merged
Merged
Conversation
Nightly and stable builds made by the new release workflow carry lemonstudio-updater (tools/updater), which checks the channel's signed manifest, downloads the newer build and, once Lemon Studio closes, replaces the .exe, the AppImage or the .app and starts it again. Builds from source have no channel and never update. - Versions: nightlies are dated (YEAR.MONTH.DAY.N), stable releases semantic; the app, diagnostics, panic log and the Windows version resource show the build's version (version.rs). - In the app (update.rs): the check at start, the Install and restart / Skip this version / Later prompt, HELP > Check for updates, the General > Updates checks, and the About tab's channel line and Check for updates button. - Release workflow: a nightly from main every night (if main moved), a stable release from a vMAJOR.MINOR.PATCH tag; Windows .exe, Linux AppImage, macOS .app (Apple silicon, not notarized: the release notes say how to open it) and the VST3/CLAP plugins as a zip per platform. Manifests are signed with minisign (MINISIGN_SECRET_KEY secret, MINISIGN_PUBLIC_KEY variable). - docs/releasing.md, README, alpha checklist, third-party notices. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The schedule only runs with the repository variable NIGHTLIES set to "on", so merging the workflow with the signing keys set publishes nothing by itself. Run workflow gains a dry run: it builds, packages and signs, and keeps the files as the run's artifacts. It can rehearse a tag as well as a nightly. An alpha is a plain vMAJOR.MINOR.PATCH tag with major version 0. Builds say so in the app, the diagnostics and the release's title, instead of "pre-alpha". Also: a tag has to be on main; the first build on a channel doesn't list every pull request ever merged; appimagetool is a fixed version with its checksum; a nightly and an alpha on one computer keep their downloads in separate folders. The plan moves to tools/package/plan.sh, tested with the manifest by tools/package/test.sh in CI, and CI checks a nightly's and a tagged build's settings compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/releasing.md has the steps in order, from the signing key to the first nightly, and says an alpha is a tag with major version 0. The README no longer says no prebuilt binaries will be published. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LemonStudio.exe and LemonStudio.AppImage, and LemonStudioNightly for a nightly, so a nightly and a tagged release can sit in one folder. An update replaces the file in place, keeping its name, so a version in it went stale after the first update. Now a shortcut never points at a misleading name, and never has to change. The macOS zip keeps its version: it's only unpacked, and the app inside has a fixed name already. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ItsAlphaNeon
marked this pull request as ready for review
November 9, 2026 00:53
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merge order: this one, then #370, then #393. Merging publishes nothing: the schedule stays off until the repository variable
NIGHTLIESison, and a run by hand refuses to start without the signing key.What this adds
Builds made by the new release workflow update themselves on their own channel. Builds from source have no channel and never update.
tools/updater,lemonstudio-updater. It checks the channel's manifest, verifies its minisign signature, downloads the build and checks its SHA-256. Once Lemon Studio closes, it replaces the Windows.exe, the Linux AppImage ($APPIMAGE) or the macOS.app, then starts the new version. The app carries it inside itself (build.rs,LEMON_UPDATER) and writes it to<user folder>/Updates/<channel>to run it. HTTPS uses rustls with ring and the system's certificate store.YEAR.MONTH.DAY.N) and tagged releases useMAJOR.MINOR.PATCH. The two are never compared, and the updater never moves to an older version. The version shown everywhere follows the build: the app, diagnostics, the panic log, the "saved by" stamp and the Windows version resource.v0.1.0, is an alpha.alphais not in the tag. The app, the diagnostics and the release's title say "alpha", where nightlies and builds from source say "pre-alpha". An alpha isn't a GitHub pre-release, because the updater finds it as GitHub's latest release, and it updates on tov1.0.0like any newer version.OPENSTUDIO_NO_UPDATE_CHECK=1turns off the check at start, andOPENSTUDIO_UPDATE_BASEpoints it at a test servermainevery night once turned on, skipped ifmainhasn't moved, keeping the newest 14vMAJOR.MINOR.PATCHtag that is onmainand matchesCargo.tomlLemonStudio.exe,LemonStudio.AppImage(built on Ubuntu 22.04), macOS.app(Apple silicon, signed ad hoc, not notarized; the release notes say how to open it), and the VST3/CLAP plugins as a zip per platform. The.exeand AppImage have no version in their names, and a nightly's areLemonStudioNightly: an update replaces the file in place, so shortcuts to it never breakTHIRD-PARTY-NOTICES.txt.After merging
The steps are under "Going live" in docs/releasing.md:
MINISIGN_SECRET_KEYand variableMINISIGN_PUBLIC_KEYsetNIGHTLIESset toonversioninCargo.tomlset (it is still0.0.1) and merged, then the tag pushedTesting
cargo test --workspaceon Windows, with Nightly builds: their own name, icon and splash (Moonrise) #370 and HELP menu: opens the website, and About works #393 merged in: 2523 passed, 0 failed.tools/package/test.sh, which CI now runs: the release plan against a throwaway repository (nightly numbering, no nightly whenmainhasn't moved, a tag not matchingCargo.toml, offmainor withalphain it refused, rehearsals), and the manifest.cargo checkof the app and updater on Ubuntu 22.04.lemonstudio.exeand relaunched it, and a tampered manifest was refused. Not repeated since the update folders became per channel.Not run: the Release workflow itself, by request, so the AppImage and
.appof a real build, and the Linux and macOS update and swap code outside CI's tests, are still untried. The tag path'sreleases/latestlookup can't be tried until a tagged release exists.🤖 Generated with Claude Code