t150: 小幫手自我更新(背景備妥+重啟完成)+版本一致性
leo 07-29 三句話定調:
「小白不會動不動就刪除再裝新的」
「如果它都掛着,那準備好就告訴他重啓更新」
「**我要他下載多幾次他就放棄了,所以抓到一個客戶後不能讓他有機會離開**」
① 版本一致性(leo:「我的和下載下來的會是同一個嗎?」)
真因:build-mac.sh L22/build-windows.sh L46 **只有 tray 注入版本,collector 沒有**
⇒ 托盤顯示 tray 的版本,實際幹活的 collector 無版本可查、可能不同版。
修:collector 加 version/buildTime 變數與 --version 旗標;兩個 build 腳本都改為
兩支注入同一個 LDFLAGS_VER(各 2 處)。
驗:collector --version → v0.15.0 (build 20260729-2238);tray 內含同一組值。
② 自我更新(leo 選 1+3:完全自動,但要有提醒與手動檢查)
- 背景每日檢查 manifest 的 daemon 版本(單一 CDN 靜態檔,非 GitHub API,不違反不輪詢紅線)
- 有新版**默默下載並驗 sha256**,備妥後選單變「🟢 新版已就緒 — 點此重新啟動完成更新」
- daemon 常駐不重啟 ⇒ 不偷換正在跑的自己;使用者按一下才 ditto 覆蓋並重啟
- 另有「檢查更新…」讓人隨時手動按(不必等每日排程)
- 驗章不符或解壓失敗=保留舊版不動(壞掉的 .app 比舊版更糟)
⇒ **封測者完全不必再下載任何東西**
驗:go build/go vet 過;三個版本比較測試通過(dev 不提示/同版不提示/新版要提示);
未剝離符號版確認 5 個更新函式在 build 範圍內
(註:打包版被 -s -w 剝符號,用 grep/strings 驗會誤判為「功能沒進去」)。
This commit is contained in:
@@ -39,12 +39,34 @@ type runMode struct {
|
||||
withTrigger bool
|
||||
}
|
||||
|
||||
// 版本資訊(t150,2026-07-29 leo:「我的和下載下來的會是同一個嗎?」)。
|
||||
//
|
||||
// 為什麼 collector 也要:先前**只有 tray 注入版本**(build-mac.sh L34),
|
||||
// collector 是另一支獨立編譯的執行檔、完全沒有版本號(L22 不帶 LDFLAGS_VER)。
|
||||
// ⇒ 托盤選單顯示的是 tray 的版本,**實際幹活的 collector 可能是任何版本**——
|
||||
// 選單說 v0.14.1 也證明不了 collector 有沒有含某個修復(如 t149 多帳號同步)。
|
||||
// 兩支必須注入**同一個版本值**,「顯示的」才等於「跑的」。
|
||||
var (
|
||||
version = "dev"
|
||||
buildTime = ""
|
||||
)
|
||||
|
||||
func versionString() string {
|
||||
if buildTime == "" {
|
||||
return version
|
||||
}
|
||||
return version + " (build " + buildTime + ")"
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
usage()
|
||||
os.Exit(2)
|
||||
}
|
||||
switch os.Args[1] {
|
||||
case "--version", "-v", "version":
|
||||
fmt.Println(versionString())
|
||||
os.Exit(0)
|
||||
case "scan":
|
||||
os.Exit(run(os.Args[2:], runMode{}))
|
||||
case "upload":
|
||||
|
||||
Reference in New Issue
Block a user