8dd15fbe43
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 驗會誤判為「功能沒進去」)。
72 lines
3.7 KiB
Bash
72 lines
3.7 KiB
Bash
#!/usr/bin/env bash
|
||
# build-windows.sh — 打包 Arcrun RAG 托盤(Windows 未簽章版,daemon-beta t72)。
|
||
#
|
||
# 🎯 這支腳本的重點:**在 Mac 上就能交叉編譯出 Windows 版**,不需要 Windows 機器、
|
||
# 不需要 Docker、不需要 fyne-cross。條件只有一個——裝 mingw-w64。
|
||
# (這推翻了先前「fyne GUI 編不了 CGo+GL → 歸屬真機」的假設;2026-07-27 本機實測通過。)
|
||
#
|
||
# t77-lite(2026-07-28):arcrun-collector.exe 用 //go:embed 吃進 tray,
|
||
# 產物只剩一個 exe,瀏覽器不再多擋一個(leo:「如果只有 1 個,我還可以把 exe 改成 e_e
|
||
# 讓朋友改回來,但現在這樣完全不行」)。
|
||
#
|
||
# 前置(一次就好):
|
||
# brew install mingw-w64 # 提供 x86_64-w64-mingw32-gcc
|
||
#
|
||
# 用法:
|
||
# cd collector/cmd/arcrun-tray && bash build-windows.sh
|
||
# 產物:dist-windows/ArcrunRAG-win-unsigned.zip(只含 arcrun-tray.exe)
|
||
#
|
||
# ⚠️ 誠實界定:**本腳本只證明「編得出來」,沒證明「跑起來對」**。
|
||
# 托盤 icon 會不會出現、選資料夾對話框、SmartScreen 實際攔截行為,
|
||
# **只有真的在 Windows 上跑才驗得到**——那一步歸 leo/真機。
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")"
|
||
|
||
# 版本編號(leo 2026-07-27:「daemon 要加上版本編號」)——與 build-mac.sh 同一套。
|
||
# 沒版本號時只能靠 shasum 對帳,使用者根本做不到(見 daemon-beta tasks t63)。
|
||
VERSION="${VERSION:-$(git describe --tags --always --dirty 2>/dev/null || echo dev)}"
|
||
BUILD_TIME="$(date '+%Y%m%d-%H%M')"
|
||
LDFLAGS_VER="-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}"
|
||
echo "🏷 版本:${VERSION}(build ${BUILD_TIME})"
|
||
|
||
OUT="dist-windows"
|
||
CC_WIN="${CC_WIN:-x86_64-w64-mingw32-gcc}"
|
||
|
||
echo "① 檢查交叉編譯器"
|
||
if ! command -v "$CC_WIN" >/dev/null 2>&1; then
|
||
echo "❌ 找不到 $CC_WIN。先跑:brew install mingw-w64" >&2
|
||
exit 1
|
||
fi
|
||
echo " $($CC_WIN --version | head -1)"
|
||
|
||
rm -rf "$OUT" && mkdir -p "$OUT"
|
||
|
||
echo "② 編 collector.exe 到本目錄(供 //go:embed 吃進 tray)"
|
||
( cd ../.. && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
|
||
# t150(leo 07-29):collector 也要注入版本,否則顯示的與實際跑的可能不同版。
|
||
go build -ldflags "-s -w ${LDFLAGS_VER}" -o "cmd/arcrun-tray/arcrun-collector.exe" . )
|
||
|
||
echo "③ 編托盤 GUI(fyne=CGo+GL,走 mingw;collector.exe embed 進去成為單一 exe)"
|
||
CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC="$CC_WIN" \
|
||
go build -ldflags "-H windowsgui -s -w ${LDFLAGS_VER}" -o "$OUT/arcrun-tray.exe" .
|
||
|
||
echo "④ 打包 zip(單一 exe,瀏覽器下載只有一個)"
|
||
( cd "$OUT" && zip -9 -q ArcrunRAG-win-unsigned.zip arcrun-tray.exe )
|
||
|
||
echo "⑤ 刪除本目錄臨時用的 collector.exe(已 embed 進 tray,不進版控)"
|
||
rm -f arcrun-collector.exe
|
||
|
||
echo
|
||
echo "✅ 完成:$OUT/ArcrunRAG-win-unsigned.zip"
|
||
ls -lh "$OUT"/*.exe "$OUT"/*.zip | awk '{print " "$9" "$5}'
|
||
echo
|
||
echo "📏 體積基準(t77-lite embed 後 tray 吃進 collector,+~6.5 MB):"
|
||
echo " arcrun-tray.exe ~30 MB(含內嵌 collector;未加 -s -w 是 ~47 MB)"
|
||
echo " zip 單檔 ~14 MB(和舊版雙檔 zip 相近,同樣在 jsDelivr 20 MB 上限內)"
|
||
echo
|
||
echo "🔬 驗法(這台機器上驗得到的部分):"
|
||
echo " file $OUT/arcrun-tray.exe → 應為 'PE32+ executable (GUI) x86-64, for MS Windows'"
|
||
echo " unzip -l $OUT/ArcrunRAG-win-unsigned.zip → 只應有 arcrun-tray.exe 一個檔案"
|
||
echo " grep -c 'PDF 打不開' $OUT/arcrun-tray.exe → 應輸出 1(collector 特徵字串在肚裡)"
|
||
echo "⛔ 驗不到、必須真 Windows 機器的部分:托盤 icon 顯示/選資料夾對話框/SmartScreen 實際行為。"
|