出貨鏈三站上 main:release-ship 前置①改看 tag 的樹、release-check 可指定版本、信標開場報「打了 tag 沒 release」(inkstone/ISEP#67)
- hooks/lib/release_chain.py:問 Gitea 的判準一份三處用(匿名讀,D20) - scripts/release-ship:前置①比「要建的那個 tag 的樹」裡的 plugin.json,不比工作樹/最新 tag (總管 09-07 在 v0.23.0 被擋的情境現在放行);note 從 Gitea compare 生,從 plugin 快取跑也行; 覆核改跑 release-check <那個 tag> - scripts/release-check [vX.Y.Z]:指定版本;v0.19/0.20/0.21 依裁決標「不補」不再黃字;補法印正本絕對路徑 - hooks/lib/beacon_report.py ④:最新 tag 沒 release/main 定版沒打 tag ⇒ 一行缺站+補法;都在安靜; 只快取「都在」6 小時 - 測試:test-release-ship 14、test-release-check 14、信標 26→33;docs:TESTING A37/A38、盤點表、README 60 支腳本、 白名單加 release-ship/release-check 形狀、mistakes 一條 - 沒改 plugin.json 版本號(待總管定版) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
This commit is contained in:
@@ -2,9 +2,10 @@
|
||||
# scripts/release-check 的迴歸測試(inkstone/ISEP#67)
|
||||
#
|
||||
# 兩個方向都要有證據:
|
||||
# A 群「該擋」(exit 2)——現行版本缺 tag 或缺 release,且**說得出缺哪一站**
|
||||
# A 群「該擋」(exit 2)——現行版本缺 tag 或缺 release,且**說得出缺哪一站+怎麼補**
|
||||
# (這就是工單驗收 4:「故意漏一步 → 管線要擋下來並說出缺哪一站」)
|
||||
# B 群「該過」(exit 0)——現行版本 tag+release 都在;更舊版本缺件只黃字提醒不擋
|
||||
# B 群「該過」(exit 0)——現行版本 tag+release 都在;更舊版本缺件只黃字提醒不擋;
|
||||
# 指定版本時看的是那一版;裁定不補的版本不再黃字
|
||||
#
|
||||
# 🔴 全程離線(RELEASE_CHECK_FIXTURE),不打 Gitea。fixture 直接給收貨端與送貨端的事實。
|
||||
set -u
|
||||
@@ -16,13 +17,11 @@ mkfx() { # $1=檔名 之後 heredoc
|
||||
cat > "$TMP/$1"
|
||||
}
|
||||
|
||||
run() { RELEASE_CHECK_FIXTURE="$TMP/$1" python3 "$TOOL" 2>&1; }
|
||||
|
||||
# t <期望exit> <說明> <必須出現的字串> <fixture檔>
|
||||
# t <期望exit> <說明> <必須出現的字串> <fixture檔> [額外參數…]
|
||||
t() {
|
||||
want="$1"; desc="$2"; must="$3"; fx="$4"
|
||||
want="$1"; desc="$2"; must="$3"; fx="$4"; shift 4
|
||||
N=$((N+1))
|
||||
out=$(RELEASE_CHECK_FIXTURE="$TMP/$fx" python3 "$TOOL" 2>&1); rc=$?
|
||||
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
|
||||
@@ -30,24 +29,33 @@ t() {
|
||||
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))
|
||||
printf '%s\n' "$out" | sed -n '1,16p' | sed 's/^/ /'; FAIL=$((FAIL+1))
|
||||
fi
|
||||
}
|
||||
# not <說明> <不該出現的字串> <fixture檔> [額外參數…]
|
||||
not() {
|
||||
desc="$1"; bad="$2"; fx="$3"; shift 3
|
||||
N=$((N+1))
|
||||
out=$(RELEASE_CHECK_FIXTURE="$TMP/$fx" python3 "$TOOL" "$@" 2>&1)
|
||||
if printf '%s' "$out" | grep -qF "$bad"; then
|
||||
printf ' ❌ %s —— 不該出現卻出現了:%s\n' "$desc" "$bad"; FAIL=$((FAIL+1))
|
||||
else printf ' ✅ %s\n' "$desc"; PASS=$((PASS+1)); fi
|
||||
}
|
||||
|
||||
echo "── A 群:該擋(現行版本送貨端斷了,要說出缺哪一站)──"
|
||||
|
||||
# A1:這就是 2026-09-05 的真實狀態——v0.22.0 有 tag、沒 release
|
||||
# A1:這就是 2026-09-07 的真實狀態——v0.24.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"}
|
||||
{"current":"0.24.0",
|
||||
"dingban":["0.24.0","0.23.0","0.22.0"],
|
||||
"tags":["v0.24.0","v0.23.0","v0.22.0"],
|
||||
"releases":["v0.22.0"],
|
||||
"loaded":"0.24.0"}
|
||||
JSON
|
||||
t 2 "現行 v0.22.0 有 tag 沒 release → 擋,且指名缺 release 站" "release(Gitea)" a1.json
|
||||
t 2 "缺 release 時給得出補法(release-ship)" "release-ship" a1.json
|
||||
t 2 "現行 v0.24.0 有 tag 沒 release → 擋,且指名缺 release 站" "缺這一站:release(Gitea)" a1.json
|
||||
t 2 "缺 release 時給得出補法,而且是正本的絕對路徑(貼了就能跑)" "$(dirname "$TOOL")/release-ship v0.24.0" a1.json
|
||||
|
||||
# A2:連 tag 都沒有(v0.19-0.21 的真實狀態搬成現行來測)
|
||||
# A2:連 tag 都沒有(定版了、tag 沒推)
|
||||
mkfx a2.json <<'JSON'
|
||||
{"current":"0.20.0",
|
||||
"dingban":["0.20.0","0.18.0"],
|
||||
@@ -55,8 +63,19 @@ mkfx a2.json <<'JSON'
|
||||
"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
|
||||
t 2 "現行版本連 tag 都沒有 → 擋,且指名缺 tag 站" "缺這一站:tag(Gitea)" a2.json
|
||||
t 2 "缺 tag 時給得出補法(push tag)" "git push origin v0.20.0" a2.json
|
||||
|
||||
# A3:指定版本 → 判的是那一版
|
||||
mkfx a3.json <<'JSON'
|
||||
{"current":"0.24.0",
|
||||
"dingban":["0.24.0","0.23.0"],
|
||||
"tags":["v0.24.0","v0.23.0"],
|
||||
"releases":["v0.24.0"],
|
||||
"loaded":"0.24.0"}
|
||||
JSON
|
||||
t 2 "指定 v0.23.0 而它沒 release → 擋(就算工作樹宣稱的 v0.24.0 是好的)" "現行版本 v0.23.0 的送貨端斷了" a3.json v0.23.0
|
||||
t 0 "同一份事實不指定版本 → 看 v0.24.0,放行" "送貨端完成" a3.json
|
||||
|
||||
echo "── B 群:該過(現行版本 tag+release 都在)──"
|
||||
|
||||
@@ -72,14 +91,14 @@ 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"}
|
||||
{"current":"0.24.0",
|
||||
"dingban":["0.24.0","0.23.0","0.22.0"],
|
||||
"tags":["v0.24.0","v0.22.0"],
|
||||
"releases":["v0.24.0","v0.22.0"],
|
||||
"loaded":"0.24.0"}
|
||||
JSON
|
||||
t 0 "現行送到、舊版缺件 → 放行(不 over-block)" "送貨端完成" b2.json
|
||||
t 0 "舊版缺件會被黃字提醒出來" "更舊的定版版本也缺件" b2.json
|
||||
t 0 "舊版缺件會被黃字提醒出來" "v0.23.0 缺:tag(Gitea)+release(Gitea)" b2.json
|
||||
|
||||
# B3:載入端落後(送貨端完成,但這個 session 掛的是舊版)→ 仍 exit 0,但要報出來
|
||||
mkfx b3.json <<'JSON'
|
||||
@@ -92,6 +111,18 @@ JSON
|
||||
t 0 "載入端落後 → 送貨端仍算完成(exit 0)" "送貨端完成" b3.json
|
||||
t 0 "載入端落後會被明確報出+給 update/重啟的修法" "載入端落後" b3.json
|
||||
|
||||
# B4:裁定不補的三版(總管 09-07)→ 不再黃字,表上標「裁定不補」
|
||||
mkfx b4.json <<'JSON'
|
||||
{"current":"0.24.0",
|
||||
"dingban":["0.24.0","0.22.0","0.21.0","0.20.0","0.19.0","0.18.0"],
|
||||
"tags":["v0.24.0","v0.22.0","v0.18.0"],
|
||||
"releases":["v0.24.0","v0.22.0","v0.18.0"],
|
||||
"loaded":"0.24.0"}
|
||||
JSON
|
||||
t 0 "v0.19/0.20/0.21 缺 tag+release 但已裁定不補 → 表上標出裁決出處" "裁定不補(inkstone/ISEP#67 → 6574)" b4.json
|
||||
not "裁定不補的版本不再黃字念(天天念會被學會忽略)" "更舊的定版版本也缺件" b4.json
|
||||
t 2 "但指定 v0.21.0 來問,它就是現行、照擋(裁決只免黃字,不改事實)" "現行版本 v0.21.0 的送貨端斷了" b4.json v0.21.0
|
||||
|
||||
echo ""
|
||||
echo "──────────────────────────────"
|
||||
printf '共 %d 項:✅ %d / ❌ %d\n' "$N" "$PASS" "$FAIL"
|
||||
|
||||
Reference in New Issue
Block a user