Skip to content

feat(updater): pre-release update checker + version indicator in nav#16

Merged
0xMMA merged 2 commits intomainfrom
feat/prerelease-updater
Mar 8, 2026
Merged

feat(updater): pre-release update checker + version indicator in nav#16
0xMMA merged 2 commits intomainfrom
feat/prerelease-updater

Conversation

@0xMMA
Copy link
Owner

@0xMMA 0xMMA commented Mar 8, 2026

Summary

  • Fix pre-release update checker: Switch from latest.json (which only works for stable releases via GitHub's /releases/latest/) to the GitHub Releases API. Rewrite isNewer() with full semver pre-release support (alpha < beta < rc < stable, with numeric suffixes like rc2).
  • Add update channel setting: New UpdateChannel field in settings with a UI selector (Auto / Stable / Pre-release). Auto-detect mode infers the channel from the current version's suffix.
  • Mark pre-release tags in CI: Release workflow now auto-detects -alpha|-beta|-rc tags and sets prerelease: true on the GitHub Release.
  • Version + update indicator in sidebar nav: Display app version at the bottom-left of the shell sidebar with a pulsing icon when an update is available. Clicking navigates to Settings → About.

Files changed

Area Files
Go backend internal/features/updater/service.go, model.go, service_test.go, internal/features/settings/model.go, main.go
Frontend shell.component.ts/scss/spec.ts, settings.component.ts/spec.ts, wails.service.ts, wails-mock.ts
Bindings settings/models.js, updater/models.js
CI .github/workflows/release.yml

Test plan

  • go test ./internal/... — all pass (including 10 TestParseVersion + 17 TestIsNewer + channel-aware update tests)
  • cd frontend && npm test — 90 tests pass (including new shell + settings tests)
  • go build -o bin/KeyLint . — compiles cleanly
  • Manual: set version to 4.1.7-alpha, mock GitHub API returning 4.1.8-alpha → update offered
  • Manual: switch channel to stable → only stable releases offered
  • Manual: verify version text and update icon appear in sidebar

build-linux.yml CI will run automatically on this PR.

🤖 Generated with Claude Code

0xMMA and others added 2 commits March 8, 2026 12:46
The updater previously fetched `/releases/latest/download/latest.json`,
which only serves stable releases — pre-release users never saw updates.
Additionally, `isNewer()` ignored pre-release suffixes entirely.

- Rewrite `isNewer()` with `parseVersion()` supporting alpha/beta/rc
  suffixes and numeric suffixes (e.g. rc2)
- Switch from latest.json to GitHub Releases API with filtering
- Add `UpdateChannel` setting (auto/stable/pre-release) with UI selector
- Auto-detect channel from current version when set to auto
- Mark pre-release tags in CI release workflow
- Comprehensive test coverage for version parsing, comparison, and
  channel-aware update checking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Display app version at the bottom of the sidebar with a pulsing icon
when an update is available. Clicking navigates to Settings → About.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@0xMMA 0xMMA merged commit 641e8a0 into main Mar 8, 2026
1 check passed
@0xMMA 0xMMA deleted the feat/prerelease-updater branch March 8, 2026 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant