feat(update): OTA 更新源切换到 GitHub Releases

- RELEASES_API 指向 api.github.com/repos/LiJoeAllen/mqttx/releases;
  latest 端点优先,回退列表分页改 per_page=5(GitHub 参数)
- agent 显式设置 User-Agent: mqttx-ota(GitHub API 要求携带 UA)
- api.github.com 未认证配额 60 次/小时/IP:共享出口 IP 打满时检查静默
  降级(错误仅记录),附件下载走 github.com CDN 不受配额限制
- 设置对话框「关于」的更新源展示改为 GitHub(UPDATE_SOURCE 常量)
- v1.0.x 老客户端 OTA 源仍是 Gitea,靠 CI mirror-gitea job 喂养
  (配置 GITEA_URL/GITEA_TOKEN/GITEA_OWNER Secrets 后生效),
  老客户端升级完毕后可移除镜像 job 与 publish-gitea 脚本
This commit is contained in:
2026-09-30 12:41:11 +08:00
parent 1132cdd41d
commit 68273e8e63
5 changed files with 27 additions and 16 deletions
+6 -3
View File
@@ -5,6 +5,9 @@ use super::*;
pub(super) fn agent() -> ureq::Agent {
ureq::Agent::new_with_config(
ureq::Agent::config_builder()
// GitHub API 要求请求携带 User-Agent(缺省 ureq/x.y 也能过,
// 但标识应用更符合其规范,也便于服务端区分流量)
.user_agent("mqttx-ota")
// 整体上限:防止慢速滴流的下载无限占用阻塞线程
.timeout_global(Some(std::time::Duration::from_secs(10 * 60)))
.timeout_connect(Some(std::time::Duration::from_secs(HTTP_TIMEOUT_SECS)))
@@ -66,12 +69,12 @@ pub fn pick_assets(rel: &serde_json::Value) -> Option<(String, String, u64, Opti
/// 检查更新。返回 Ok(None) 表示已是最新。
pub fn check_latest() -> Result<Option<UpdateInfo>, String> {
let base = format!("{GITEA_URL}/api/v1/repos/{PKG_OWNER}/{PKG_REPO}/releases");
// 优先 latest 端点;旧版 Gitea 没有时回退到列表取第一个非草稿/预发布
let base = RELEASES_API;
// 优先 latest 端点(GitHub 恒可用);回退到列表取第一个非草稿/预发布,作容错
let rel = match http_get_json(&format!("{base}/latest")) {
Ok(v) => v,
Err(_) => {
let list = http_get_json(&format!("{base}?limit=5"))?;
let list = http_get_json(&format!("{base}?per_page=5"))?;
let first = list
.as_array()
.and_then(|l| l.iter().find(|r| {