diff --git a/cmd/arcrun-app/build-mac.sh b/cmd/arcrun-app/build-mac.sh index e43b1c0..d27e02a 100755 --- a/cmd/arcrun-app/build-mac.sh +++ b/cmd/arcrun-app/build-mac.sh @@ -11,6 +11,13 @@ cd "$(dirname "$0")" # ⇒ 只能靠打包時人工敲 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" diff --git a/cmd/arcrun-app/build-win.sh b/cmd/arcrun-app/build-win.sh index 2d98476..17fc32b 100755 --- a/cmd/arcrun-app/build-win.sh +++ b/cmd/arcrun-app/build-win.sh @@ -29,6 +29,12 @@ VERSION="${VERSION:-$(./daemon-version.sh)}" BUILD_TIME="$(date '+%Y%m%d-%H%M')" echo "🏷 版本:${VERSION}(build ${BUILD_TIME})" +# 🔴 2026-08-06 機械閘:這一版的「更新內容」沒寫進 changelog ⇒ 不准打包。 +# leo:「給版本號、本版更新內容、打包產品、顯示在前端,這一整串都應該是機械化」。 +# 單一真相源=docs-site/.../help/changelog.md;manifest.notes 與前端全部投影自它。 +# 理由與格式見 changelog-section.sh。 +./changelog-section.sh "$VERSION" --check + command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1 || { echo "❌ 缺 mingw-w64(Wails Windows 版需要 CGo 交叉編譯器)" echo " 裝一次就好:brew install mingw-w64" diff --git a/cmd/arcrun-app/changelog-section.sh b/cmd/arcrun-app/changelog-section.sh new file mode 100755 index 0000000..89f82d6 --- /dev/null +++ b/cmd/arcrun-app/changelog-section.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# changelog-section.sh — 抽出某一版的「更新內容」,並在缺漏時擋下打包(2026-08-06) +# +# 🔴 leo 08-06:「更新內容還要寫在 docs 裡,機械化要怎麼做」 +# +# 答:改的是「**寫在哪**」,不是「誰來寫」。 +# 文字一定得人寫(機器編不出「語意搜尋什麼都搜不到」這種人話), +# 但**只准寫一個地方**= docs-site/src/content/docs/help/changelog.md(用戶語言那份)。 +# 其餘全是投影、不准手改(=頂層 principles「投影不可手改,要改去改源頭」): +# · manifest.daemon.notes ← 打包時由本腳本抽出 +# · docs-site 的「版本說明」頁 ← 本來就是它自己 +# · portal/rag.arcrun.dev/App 的「版本與更新」 ← 讀同一份 manifest +# +# **關鍵是這道閘**:打包時若 changelog 找不到這一版的段落 ⇒ 直接中止、不准打包。 +# ⇒ 「忘了寫更新內容」變成**不可能**,而不是靠誰記得。 +# (病根:manifest.daemon.notes 過去是手寫的,於是可以跟產物完全脫節。) +# +# 用法: +# ./changelog-section.sh v0.18.7 # 印出該版段落(純文字,供 manifest.notes 用) +# ./changelog-section.sh v0.18.7 --check # 只檢查存不存在 +set -euo pipefail +cd "$(dirname "$0")" +REPO_ROOT="$(git rev-parse --show-toplevel)" +FILE="$REPO_ROOT/docs-site/src/content/docs/help/changelog.md" + +VERSION="${1:?用法:changelog-section.sh <版本,例 v0.18.7> [--check]}" +CHECK_ONLY="${2:-}" + +[ -f "$FILE" ] || { echo "❌ 找不到 changelog:$FILE" >&2; exit 1; } + +# 段落格式:「## v0.18.7(2026-08-06)」——標題行以 `## <版本>(` 開頭。 +SECTION="$(awk -v ver="## ${VERSION}(" ' + index($0, ver) == 1 { inside = 1; next } + inside && /^## / { exit } + inside { print } +' "$FILE")" + +if [ -z "$(printf '%s' "$SECTION" | tr -d '[:space:]')" ]; then + cat >&2 <