Skip to content

feat: add opt-in canary update channel (desktop + CLI)#3514

Merged
esengine merged 2 commits into
main-v2from
feat/desktop-canary-channel
Jun 8, 2026
Merged

feat: add opt-in canary update channel (desktop + CLI)#3514
esengine merged 2 commits into
main-v2from
feat/desktop-canary-channel

Conversation

@esengine

@esengine esengine commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Adds an opt-in canary channel — desktop and CLI — so testers shake out bugs on a pre-release line before a real release, instead of the stable release doubling as the beta.

Desktop

  • A build carries its channel via -X main.channel=canary; the updater then polls R2's canary/latest.json pointer instead of latest/, so the channels never cross.
  • Folded into release-desktop.yml (not a new file): build/sign/manifest are shared jobs; only version/publish/mirror branch on channel. The stable desktop-v* tag path is unchanged.
  • Cut one: Actions → Release desktop → Run workflow → channel: canary, base_version: 1.5.0. Builds main-v2 HEAD, publishes a rolling desktop-canary pre-release, mirrors to R2 canary/.
  • mirror moves only the channel's own pointer — canary writes canary/, stable writes latest/, an rc moves neither. TestChannelSelectsDistinctPointers pins the URL isolation.

CLI

  • npm dist-tags are independent pointers. A version containing -canary. publishes to a new canary tag (npm i reasonix@canary); it never moves next or latest, so 1.x-on-next and 0.x-on-latest users are untouched.
  • release-npm.yml gains a workflow_dispatch canary mode: Actions → Release npm → Run workflow → base_version: 1.5.0 builds the current ref as <base>-canary.<run_number> and publishes it --tag canary. Tag-push (npm-v*) behaviour is unchanged.
  • Verified routing: 0.53.1→latest, 0.53.1-beta→next, 1.5.0→next, 1.5.0-rc.1→next, 1.5.0-canary.42→canary.

Why both

The stable release currently doubles as the beta on both surfaces. CLI was the gap I'd missed first: next is the live channel for all 1.x users, not a test buffer, so testers on @next get production. The separate canary tag is the actual buffer.

Verified

  • go build / go vet / desktop unit tests green (incl. channel-isolation test)
  • node --check on build.mjs; dist-tag routing exercised across all version shapes
  • both workflow YAMLs valid; resolve-desktop-release.sh exercised across tag-push / stable-dispatch / canary-dispatch / rc cases
  • shell scripts stored LF

Needs a live run to fully validate

The R2 canary/ write + rolling desktop-canary release, and the npm --tag canary publish, can only be confirmed by dispatching once each — recommend a test dispatch of both after merge.

A canary build (-X main.channel=canary) polls R2's canary/ pointer instead of
latest/, so a stable install can never auto-update onto it. Folded into the
existing desktop release workflow as a dispatch-only channel input: build/sign/
manifest are shared, only version/publish/mirror branch on channel. Tag/version/
channel resolution is centralized in scripts/resolve-desktop-release.sh. CLI is
unchanged (stays on the npm next tag).
@esengine esengine requested a review from SivanCola as a code owner June 8, 2026 04:03
@github-actions github-actions Bot added v2 Go rewrite (1.x) — main-v2 branch, active development desktop Wails desktop app (desktop/**) updater Auto-update / installer / release packaging and removed v2 Go rewrite (1.x) — main-v2 branch, active development labels Jun 8, 2026
A version containing -canary. publishes to the canary dist-tag instead of
next/latest, so npm i reasonix@canary opts in and 1.x (next) / 0.x (latest)
users are untouched. release-npm.yml gains a workflow_dispatch canary mode
that builds the current ref as <base>-canary.<run_number>.
@esengine esengine changed the title feat(desktop): add opt-in canary update channel feat: add opt-in canary update channel (desktop + CLI) Jun 8, 2026
@github-actions github-actions Bot added the v2 Go rewrite (1.x) — main-v2 branch, active development label Jun 8, 2026
@esengine esengine merged commit 78b19bf into main-v2 Jun 8, 2026
10 checks passed
@esengine esengine deleted the feat/desktop-canary-channel branch June 8, 2026 04:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

desktop Wails desktop app (desktop/**) updater Auto-update / installer / release packaging v2 Go rewrite (1.x) — main-v2 branch, active development

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant