be817b3c16
回應 leo 08-06 兩問與兩項新需求。 ## ①「更新內容還要寫在 docs 裡,機械化要怎麼做」 答:改的是「寫在哪」,不是「誰來寫」。 - 單一真相源=docs-site/.../help/changelog.md(本來就存在,用戶語言那份) - 新增 changelog-section.sh:抽出某版段落(供 manifest.notes 投影用) + --check 模式當閘 - build-win.sh/build-mac.sh 接上閘:**changelog 找不到這版段落 ⇒ 中止打包** ⇒「忘了寫更新內容」變成不可能,而不是靠誰記得 - 已寫 v0.18.8 的用戶語言版本說明(本次五修) ## ② manifest 的閘:這次的病是從兩條規則中間的縫穿過去的 verifyManifest 對 daemon 只驗 ①version 欄在不在 ②file 指的檔存不存在。 08-06 那次**兩條都過**(宣告 v0.18.5、`-v0.18.4.zip` 檔案真的存在)⇒ 全綠放行。 新增第三條:宣告版本必須等於產物真正的版本 (a) 檔名要帶宣告的版本(光這條就足以擋下 08-06 那次) (b) .exe 再驗一層:版本字串要真的在二進位裡(檔名可改,內嵌版本改不了) 實測(用當時的真實 manifest 值重現): · 宣告 v0.18.5 + 檔名 -v0.18.4.zip → ❌ 擋下(mac/win 各一條) · 檔名改成 v0.18.8 但內容是 v0.18.7 那顆 → ❌ 擋下(規則 b) ## ③ 前端顯示同步器版本+下載入口 leo:「連我都沒辦法確認,所以用戶到底是否最新版他自己也不知道」 - /api/latest 新增 daemon 欄(version/notes/downloads),由 daemonOf(env) 讀釘點 manifest——與 releaseOf 同原則同真相源,不留手抄本。 下載網址走 raw + 釘點 sha,與 selfupdate.go:158 同源(不自創第二條路)。 - rag.arcrun.dev 步驟 4 補上**真的下載按鈕**(Win/Mac)+同步器版本+ 「這一版改了什麼」連結。以前這裡只有文案提到下載、沒有連結也沒有版本。 取不到就顯示「(查詢中)」並退回安裝說明頁——沿用 bf06ed7 的原則,不留手抄值。 ## 驗 · node --check worker.js(installer/landing)皆 OK · changelog 閘:v0.18.6 通過;不存在的 v0.18.7 → 退出碼 1 並印出可照抄的範本 · manifest 三條規則實測如上 · 未驗:線上畫面(要出貨後才有 daemon 欄位)⇒ ◐,不是 ✅
70 lines
3.7 KiB
Bash
Executable File
70 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# build-mac.sh — 打包 Arcrun.app(Wails 版,t194)
|
||
#
|
||
# 與 fyne 版最重要的差別:**要把 collector 同綑進 .app**。
|
||
# daemon 的本體是 `collector direct`(監看/萃卡/上傳),App 只是它的門面;
|
||
# 沒同綑 ⇒ 裝了也不會同步。
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")"
|
||
# 🔴 2026-08-06:版本號改由 daemon-version.sh 機械產生(不再手打/不靠 git describe)。
|
||
# 病根:本 repo 一個 git tag 都沒有 ⇒ git describe 永遠拿不到 v0.18.x
|
||
# ⇒ 只能靠打包時人工敲 VERSION= ⇒ 兩條打包線各敲各的 ⇒ manifest 說謊。
|
||
# 理由與算法全文見 daemon-version.sh。
|
||
VERSION="${VERSION:-$(./daemon-version.sh)}"
|
||
|
||
# 🔴 2026-08-06 機械閘:這一版的「更新內容」沒寫進 changelog ⇒ 不准打包。
|
||
# leo:「給版本號、本版更新內容、打包產品、顯示在前端,這一整串都應該是機械化」。
|
||
# 單一真相源=docs-site/.../help/changelog.md;manifest.notes 與前端全部投影自它。
|
||
# 理由與格式見 changelog-section.sh。
|
||
./changelog-section.sh "$VERSION" --check
|
||
|
||
BUILD_TIME="$(date '+%Y%m%d-%H%M')"
|
||
LDFLAGS_VER="-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}"
|
||
export PATH="$PATH:$(go env GOPATH)/bin"
|
||
echo "🏷 版本:${VERSION}(build ${BUILD_TIME})"
|
||
|
||
echo "① 編 collector(同綑執行檔,純 stdlib、CGO_ENABLED=0)"
|
||
# 🔴 2026-08-06 補回版本注入(**Wails 換代時掉的**):
|
||
# 退役的 fyne 版 `arcrun-tray/build-mac.sh:24` 本來就有這個(t150/t72,
|
||
# leo 07-29「我的和下載下來的會是同一個嗎?」),t194 重寫成 Wails 版時沒帶過來
|
||
# ⇒ 同綑的 collector 一路自稱 `dev`,App 門面卻顯示 v0.18.x。
|
||
# **幹活的是 collector**:它不報版本,就沒人能判斷某個修復有沒有真的到使用者手上——
|
||
# 正是「版本號是 leo 唯一驗收介面」要擋的那個病。
|
||
# 實撞:v0.18.6 打包後 `arcrun-collector --version` 回 `dev`。
|
||
( cd ../.. && CGO_ENABLED=0 go build -ldflags "-s -w ${LDFLAGS_VER}" -o "cmd/arcrun-app/arcrun-collector" . )
|
||
|
||
# 🔴 2026-08-05(leo 開 DMG 檢查時抓到):Info.plist 的 CFBundleShortVersionString
|
||
# 是 **1.0.0**(Wails 預設),不是我們的版本號——因為 wails.json 沒有 info.productVersion,
|
||
# 而 `wails build` **沒有** CLI 旗標可指定。
|
||
# ⇒ 建置前把版本寫進 wails.json 的 info,建完還原(不污染版控)。
|
||
# 為什麼要修:使用者「關於」看到的、以及 Finder 顯示的版本都讀這個欄位;
|
||
# 永遠顯示 1.0.0 ⇒ 用戶無從判斷自己是不是新版(同 leo「版本號是唯一驗收介面」的病)。
|
||
PLIST_VER="${VERSION#v}"
|
||
cp wails.json wails.json.bak
|
||
python3 - "$PLIST_VER" <<'PY'
|
||
import json, sys
|
||
c = json.load(open('wails.json'))
|
||
c.setdefault('info', {})
|
||
c['info']['productVersion'] = sys.argv[1]
|
||
c['info']['productName'] = 'Arcrun'
|
||
json.dump(c, open('wails.json', 'w'), indent=2, ensure_ascii=False)
|
||
PY
|
||
trap 'mv -f wails.json.bak wails.json 2>/dev/null || true' EXIT
|
||
|
||
echo "② wails build"
|
||
wails build -clean -ldflags "${LDFLAGS_VER}"
|
||
|
||
APP="build/bin/Arcrun.app"
|
||
[ -d "build/bin/arcrun-app.app" ] && { rm -rf "$APP"; mv "build/bin/arcrun-app.app" "$APP"; }
|
||
|
||
echo "③ 同綑 collector 進 .app(App 用 os.Executable() 找同層)"
|
||
cp arcrun-collector "$APP/Contents/MacOS/arcrun-collector"
|
||
|
||
echo "④ ad-hoc 重簽(改過 bundle 內容必重簽,否則 launchd 拒開)"
|
||
codesign --force --deep --sign - "$APP" 2>/dev/null || true
|
||
|
||
rm -f arcrun-collector
|
||
echo "✅ 完成:$APP"
|
||
echo " 驗法:open '$APP' → 選單列出現 icon、Dock **不出現** icon"
|
||
echo " 點 icon → 立刻展開視窗;右鍵 → 只有「結束 Arcrun」"
|