補上運送鏈缺的兩站:建 release + 回頭覆核(inkstone/ISEP#67)
工單的斷點是「沒有任何東西會建 release」——v0.22.0 tag 早推了, Gitea Releases 頁卻停在 v0.18.0,對 leo 等於這一版不存在。 新增兩支獨立的站(不改任何既有閘,只補送貨鏈缺的那兩段): - scripts/release-ship(= arcrun-rag 的 release-record 站) 把「已推的 tag」變成「leo 看得到的 release」。三個前置條件「必須在場」才放行: ①版本一致(重用 check-version-consistency.sh,不另立判準)②tag 真的在 Gitea ③release note 有內容(沒給就從 git log 自動生事實清單)。冪等;建完回頭跑 release-check 拿收貨端覆核——送的人說成功不算。 - scripts/release-check(= release-check 站) 回頭問每一段「到了嗎」,而且**問的是收貨端**(Gitea tags/releases、這個 session 載到的 plugin.json),不聽送的人說。現行版本缺 tag 或缺 release ⇒ exit 2 並指名 缺哪一站+怎麼補(工單驗收 4)。判準是結構(定版 commit / tag / release 在不在), 不是關鍵字黑名單。 - 兩支離線測試(RELEASE_*_FIXTURE,不打 Gitea):release-check 9 項、release-ship 7 項全過。 實跑證據:release-ship v0.22.0 已在 Gitea 建起 https://git.uncle6.me/inkstone/ISEP/releases/tag/v0.22.0 release-check 覆核 v0.22.0 tag+release 都在(收貨端事實)。 版本:新增的是 scripts/(非自動載入),本身不需升版;待總管定版隨下一版一起送出。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012656SLtw96aCxTgScH5bbK
This commit is contained in:
Executable
+98
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
# scripts/release-check 的迴歸測試(inkstone/ISEP#67)
|
||||
#
|
||||
# 兩個方向都要有證據:
|
||||
# A 群「該擋」(exit 2)——現行版本缺 tag 或缺 release,且**說得出缺哪一站**
|
||||
# (這就是工單驗收 4:「故意漏一步 → 管線要擋下來並說出缺哪一站」)
|
||||
# B 群「該過」(exit 0)——現行版本 tag+release 都在;更舊版本缺件只黃字提醒不擋
|
||||
#
|
||||
# 🔴 全程離線(RELEASE_CHECK_FIXTURE),不打 Gitea。fixture 直接給收貨端與送貨端的事實。
|
||||
set -u
|
||||
TOOL="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/release-check}"
|
||||
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
|
||||
PASS=0; FAIL=0; N=0
|
||||
|
||||
mkfx() { # $1=檔名 之後 heredoc
|
||||
cat > "$TMP/$1"
|
||||
}
|
||||
|
||||
run() { RELEASE_CHECK_FIXTURE="$TMP/$1" python3 "$TOOL" 2>&1; }
|
||||
|
||||
# t <期望exit> <說明> <必須出現的字串> <fixture檔>
|
||||
t() {
|
||||
want="$1"; desc="$2"; must="$3"; fx="$4"
|
||||
N=$((N+1))
|
||||
out=$(RELEASE_CHECK_FIXTURE="$TMP/$fx" python3 "$TOOL" 2>&1); rc=$?
|
||||
ok=1
|
||||
[ "$rc" -eq "$want" ] || ok=0
|
||||
if [ -n "$must" ] && ! printf '%s' "$out" | grep -qF "$must"; then ok=0; fi
|
||||
if [ "$ok" -eq 1 ]; then printf ' ✅ %s\n' "$desc"; PASS=$((PASS+1))
|
||||
else
|
||||
printf ' ❌ %s —— 期望 exit=%s%s,實得 exit=%s\n' "$desc" "$want" \
|
||||
"${must:+ 且輸出含「$must」}" "$rc"
|
||||
printf '%s\n' "$out" | sed -n '1,14p' | sed 's/^/ /'; FAIL=$((FAIL+1))
|
||||
fi
|
||||
}
|
||||
|
||||
echo "── A 群:該擋(現行版本送貨端斷了,要說出缺哪一站)──"
|
||||
|
||||
# A1:這就是 2026-09-05 的真實狀態——v0.22.0 有 tag、沒 release
|
||||
mkfx a1.json <<'JSON'
|
||||
{"current":"0.22.0",
|
||||
"dingban":["0.22.0","0.21.0","0.20.0","0.19.0","0.18.0"],
|
||||
"tags":["v0.22.0","v0.18.0"],
|
||||
"releases":["v0.18.0"],
|
||||
"loaded":"0.22.0"}
|
||||
JSON
|
||||
t 2 "現行 v0.22.0 有 tag 沒 release → 擋,且指名缺 release 站" "release(Gitea)" a1.json
|
||||
t 2 "缺 release 時給得出補法(release-ship)" "release-ship" a1.json
|
||||
|
||||
# A2:連 tag 都沒有(v0.19-0.21 的真實狀態搬成現行來測)
|
||||
mkfx a2.json <<'JSON'
|
||||
{"current":"0.20.0",
|
||||
"dingban":["0.20.0","0.18.0"],
|
||||
"tags":["v0.18.0"],
|
||||
"releases":["v0.18.0"],
|
||||
"loaded":"0.20.0"}
|
||||
JSON
|
||||
t 2 "現行版本連 tag 都沒有 → 擋,且指名缺 tag 站" "tag(Gitea)" a2.json
|
||||
t 2 "缺 tag 時給得出補法(push tag)" "git push origin" a2.json
|
||||
|
||||
echo "── B 群:該過(現行版本 tag+release 都在)──"
|
||||
|
||||
# B1:全部送到
|
||||
mkfx b1.json <<'JSON'
|
||||
{"current":"0.18.0",
|
||||
"dingban":["0.18.0","0.9.0"],
|
||||
"tags":["v0.18.0","v0.9.0"],
|
||||
"releases":["v0.18.0","v0.9.0"],
|
||||
"loaded":"0.18.0"}
|
||||
JSON
|
||||
t 0 "現行版本 tag+release 都在 → 放行" "送貨端完成" b1.json
|
||||
|
||||
# B2:現行版本送到了,但更舊的 定版 版本缺件 → 仍放行,只黃字
|
||||
mkfx b2.json <<'JSON'
|
||||
{"current":"0.22.0",
|
||||
"dingban":["0.22.0","0.21.0","0.20.0","0.19.0","0.18.0"],
|
||||
"tags":["v0.22.0","v0.18.0"],
|
||||
"releases":["v0.22.0","v0.18.0"],
|
||||
"loaded":"0.22.0"}
|
||||
JSON
|
||||
t 0 "現行送到、舊版缺件 → 放行(不 over-block)" "送貨端完成" b2.json
|
||||
t 0 "舊版缺件會被黃字提醒出來" "更舊的定版版本也缺件" b2.json
|
||||
|
||||
# B3:載入端落後(送貨端完成,但這個 session 掛的是舊版)→ 仍 exit 0,但要報出來
|
||||
mkfx b3.json <<'JSON'
|
||||
{"current":"0.22.0",
|
||||
"dingban":["0.22.0","0.18.0"],
|
||||
"tags":["v0.22.0","v0.18.0"],
|
||||
"releases":["v0.22.0","v0.18.0"],
|
||||
"loaded":"0.21.0"}
|
||||
JSON
|
||||
t 0 "載入端落後 → 送貨端仍算完成(exit 0)" "送貨端完成" b3.json
|
||||
t 0 "載入端落後會被明確報出+給 update/重啟的修法" "載入端落後" b3.json
|
||||
|
||||
echo ""
|
||||
echo "──────────────────────────────"
|
||||
printf '共 %d 項:✅ %d / ❌ %d\n' "$N" "$PASS" "$FAIL"
|
||||
[ "$FAIL" -eq 0 ]
|
||||
Reference in New Issue
Block a user