feat(ci): beta release channel + live updater channel switching #98
No reviewers
Labels
No Label
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: sarman/tftsr-devops_investigation#98
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/proxmox-v1.2.1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
release-beta.yml: Triggered on push tobeta; createsv{CARGO}-beta.Npre-release tags, builds all four platforms withprerelease: true. Tag counter resets whenCargo.tomlversion bumps. Wiki sync omitted (master only).sync-beta.yml: Triggered on every push tomaster; merges master into beta usingRELEASE_TOKEN(admin — same mechanismauto-tag.ymluses to push CHANGELOG commits to protected master). Skips gracefully if beta does not exist or is already up to date. Fails loudly on merge conflict.test.yml: Addedbetato push triggers.AppSettings.update_channel(state.rs): New field with serde default"stable".get/set_update_channel(system.rs): Replaced no-op stubs with real AppState read/write.check_app_updates(system.rs): Queries/releases?limit=20, filters client-side by channel; drafts always skipped.docs/wiki/CICD-Pipeline.md: Documents the two-channel strategy, tag format, beta promotion flow, and Gitea branch protection config.Caveats
[skip ci]commits (e.g. the CHANGELOG commit fromauto-tag.yml) suppress all workflow runs includingsync-beta.yml. Those commits are carried along on the next real push to master. If immediate sync of every commit is required, remove[skip ci]from the CHANGELOG commit and gateauto-tag.ymldifferently.Manual steps required after merge
betabranch frommasterin Giteamastertobeta(PR required, all 5 CI checks, dismiss stale reviews)betaTest plan
beta→release-beta.ymltriggers, createsv1.2.2-beta.1pre-releasev1.2.2-beta.2master→sync-beta.ymlmerges it intobetaautomaticallyv1.x.xbeta → masterPR →auto-tag.ymlcreates stable release,sync-beta.ymlfast-forwards beta back to master- Add release-beta.yml: triggers on push to beta, creates v{CARGO}-beta.N pre-release tags with prerelease: true, builds all four platforms; tag counter resets when Cargo.toml version bumps - Add beta to test.yml push triggers so CI runs on direct pushes to beta (pull_request already covers PRs targeting beta) - Implement update_channel in AppSettings (state.rs) with serde default "stable"; wire get/set_update_channel commands to AppState instead of returning hardcoded stubs - Implement channel-aware check_app_updates: queries /releases?limit=20 and picks first non-draft release matching the active channel (stable = !prerelease, beta = prerelease), skipping drafts - Document two-channel strategy in docs/wiki/CICD-Pipeline.md Manual steps still required in Gitea UI: 1. Create beta branch from master 2. Apply same branch protection rules as master to beta 3. Set repo default PR target branch to betaAutomated PR Review (qwen3-coder-next via liteLLM):\n\nSummary
The PR introduces a two-channel update system (stable/beta) with CI workflows, new update channel management commands, and supporting documentation. The changes are well-structured and comprehensive. After thorough review, no critical bugs or blocking issues were identified in the changed code.
Findings
No findings.
Verdict: APPROVE
The implementation is solid:
release-beta.ymlproperly creates pre-release tags with incrementingbeta.NcountersAppSettings,get_update_channel,set_update_channel, andcheck_app_updatescheck_app_updatescorrectly handles stable vs beta and skips drafts"stable"via serde defaultAutomated PR Review (qwen3-coder-next via liteLLM):\n\nSummary
The PR introduces a two-channel update system (stable/beta) with CI workflows and client-side update channel switching. After thorough review of all changed files against the codebase index and previous review context, no new blocking or high-severity issues were identified. The implementation aligns with the documented design and passes existing CI checks.
Findings
[WARNING] src-tauri/src/commands/system.rs:477-495 -
check_app_updatesqueries the releases endpoint viahttps://gogs.tftsr.combut the API path in.gitea/workflows/files useshttp://172.0.0.29:3000. While both point to the same service, this inconsistency could cause confusion or connection issues ifgogs.tftsr.combecomes unreachable while the local IP remains accessible.Evidence:
Fix: Standardize to the internal Gitea endpoint used in CI workflows:
http://172.0.0.29:3000. Since this is an internal app feature, using the local Gitea URL is more reliable and avoids external dependencies.[SUGGESTION] src-tauri/src/commands/system.rs:546-556 - The
is_newer_versionfunction does not handle semver pre-release identifiers (e.g.,-beta.1,-rc.1). This could lead to incorrect comparison when stable versions like1.2.3are compared against beta versions like1.2.4-beta.1.Evidence:
Fix: Strip leading
vand trailing pre-release identifiers before parsing numeric parts, or use thesemvercrate for proper semver comparison.Verdict: APPROVE WITH COMMENTS
The core logic is sound and consistent with the test plan. The two findings are minor:
Please address these before merging, especially the endpoint fix to ensure reliable update checks.