4 Commits
Author SHA1 Message Date
viettranx 52cb4fc3c6 fix(ci): prevent scheduler test hang + add beta release workflow
Scheduler tests hung on CI when t.Fatal fired before close(blockCh) —
defer sched.Stop() called wg.Wait() on goroutines still blocked on
blockCh. Fix: defer close(blockCh) after defer Stop() (LIFO order
ensures blockCh closes first).

Add release-beta.yaml for dev branch beta releases:
- Triggers on v*-beta* and v*-rc* tags
- Builds Linux binaries + Docker images (latest, full variants)
- Creates GitHub prerelease
- Docker tags: version-specific + "beta" rolling tag
- No overlap with release.yaml (branch-triggered, clean semver)

Update release-desktop.yaml:
- Auto-detect prerelease from tag name (beta/rc → prerelease: true)
2026-04-05 11:00:03 +07:00
viettranx e297fb63b8 ci(release): add pnpm/node cache to desktop release workflow
Replace corepack-only pnpm setup with pnpm/action-setup@v4 + actions/setup-node@v4
with cache enabled. Saves ~30-60s per build by caching pnpm store.
2026-03-27 21:06:53 +07:00
viettranx 1fdc4d3228 fix(ci): use macos-14 for both arch builds (macos-13 deprecated) 2026-03-27 10:38:42 +07:00
viettranx b9c1731e31 feat(desktop): packaging, auto-update, CI/CD, and install scripts
- GitHub Actions: release-desktop.yaml builds macOS (arm64+amd64) + Windows
  on lite-v* tag push, creates DMG + tar.gz + zip GitHub Release assets
- Install scripts: install-lite.sh (macOS curl) + install-lite.ps1 (Windows PowerShell)
- Auto-update: internal/updater checks GitHub Releases, downloads + atomic
  app swap with path traversal guards, size limits, symlink handling
- UpdateBanner: thin notification bar with download progress + restart
- Wails bindings: CheckForUpdate, ApplyUpdate (server-cached, no URL from JS),
  RestartApp (graceful gateway shutdown before exit)
- AboutTab: dynamic version from backend via GetVersion()
- Windows build assets: icon.ico, info.json, wails.exe.manifest
- Makefile: desktop-dev, desktop-build, desktop-dmg targets
- README: Desktop Edition section with install commands + feature comparison
- .gitignore: desktop packaging artifacts, SQLite DB files, update backups

Security: HTTPS-only downloads, io.LimitReader on all extractions,
zip/tar path traversal validation, symlink target guard, no untrusted
URL from frontend (ApplyUpdate uses server-cached info).
2026-03-27 10:15:15 +07:00