feat(updater): in-app nightly release channel - #497
Merged
debba merged 14 commits intoJul 26, 2026
Conversation
… can return to stable
A prerelease sorts below its own base in SemVer, so `0.15.0-nightly.<ts>` would be seen as older than stable 0.15.0 and never offered. Bake the NEXT patch as the base (`0.15.1-nightly.<ts>`) so a nightly always supersedes the current stable, and any real next release (patch/minor/major) supersedes the nightly. A stable cut promotes the channel by shipping that base without the `-nightly.<ts>` suffix.
Contributor
Code Review SummaryStatus: 2 Issues Found | Recommendation: Address before merge Overview
Issue Details (click to expand)CRITICAL
WARNING
Files Reviewed (8 files)
Fix these issues in Kilo Cloud Previous Review Summaries (2 snapshots, latest commit 65b7155)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 65b7155)Status: 2 Issues Found | Recommendation: Address before merge Overview
Issue Details (click to expand)CRITICAL
WARNING
Files Reviewed (8 files)
Fix these issues in Kilo Cloud Previous review (commit d26a884)Status: 2 Issues Found | Recommendation: Address before merge Overview
Issue Details (click to expand)CRITICAL
WARNING
Files Reviewed (8 files)
Reviewed by ling-3.0-flash-free · Input: 83.6K · Output: 22.1K · Cached: 461.1K |
- release_channel was missing from the save_config merge block, so the nightly channel selection was silently dropped on every save - skip package-manager detection in debug builds: the AUR check inspects the system-wide pacman database and matched a tabularis-bin package installed alongside the dev environment - log channel, current version and resolved release on every update check to make channel issues diagnosable
Tauri's MSI (WiX) and NSIS bundlers reject non-numeric or multi-part prerelease identifiers (tauri-apps/tauri#8038, #5286), so `0.15.1-nightly.<ts>` would fail the Windows build entirely. Switch to `<next-patch>-<run_number>` (single numeric, monotonic, small) which orders correctly and is bundler-safe. Readable date/sha stays in the tag + release name.
…sion override detect_installation_source returned early on debug_assertions, which also short-circuited the env-based snap/flatpak checks — so the snap/flatpak tests always saw None. Scope the guard to just the AUR pacman-db lookup (the only part that misbehaves in dev), leaving env detection intact. Also make the Cargo.toml version sed portable (sed -i.bak + rm) so the nightly version override doesn't fail on macOS BSD sed.
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.
What
Adds an in-app release channel selector (Stable / Nightly) so users on direct installs can opt into nightly builds and receive in-app updates from the newest
nightly-*prerelease. Default stays stable — nothing changes for users who never touch the setting.Follow-up to #419 (nightly workflow) and #490 (glibc container).
How it works
AppConfig.release_channel("stable"default |"nightly"), persisted like the other update settings. Single source of truth — the channel never crosses the IPC boundary.updater.rs): for the nightly channel,check_for_updates/download_and_install_updateresolve the newestnightly-*prerelease at runtime (GitHub/releases→ newest bypublished_at), read itslatest.jsonasset URL, and override thetauri-plugin-updaterendpoint with it. Stable path is untouched. Nightlies are signed with the same key, so the existingtauri.conf.jsonpubkey validates them — no key work.InfoTab.tsx): segmented Stable/Nightly control in the Updates section, only for direct installs (installationSource == null); managed installs (AUR/Snap/Flatpak) keep the existing "managed by package manager" note. Nightly shows a warning banner.Versioning (the important part)
The updater compares via SemVer, where a prerelease sorts below its base — so a naive
0.15.0-nightly.<ts>would be seen as older than stable0.15.0and never offered. To fix this, the nightly build bakes the next patch as its base:mainversion bump needed; the base auto-trackstauri.conf.json.A stable release then "promotes" the channel by shipping that same base without the
-nightly.<ts>suffix (convention on the release cut for now; automating it in the release path is a follow-up, since it touches the production release process).Also hardens
is_newer_versionwith a SemVer fallback so a user running a nightly build can still be offered the stable release when switching back to the stable channel (the old 3-part-only parser returnedfalsefor prerelease versions, stranding them).Testing
select_newest_nightly,nightly_latest_json_url) and the prerelease version comparison (is_newer_versionnightly↔stable ordering).cargo test updater::→ 25 pass.InfoTabtests — selector renders on direct install, persists the channel, hidden for managed installs. 4 pass.nightly-20260718-e8e729crelease (its signedlatest.jsonvalidates against the pubkey).Notes / out of scope
-nightlysuffix cleanly. Documented here; release-path automation is a follow-up.