49dedbbb15
工單的斷點是「沒有任何東西會建 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
83 lines
3.4 KiB
Bash
Executable File
83 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# scripts/release-ship 的迴歸測試(inkstone/ISEP#67)
|
||
#
|
||
# 兩個方向都要有證據:
|
||
# A 群「該擋」(exit 2)——前置條件沒滿足就不給建 release,且說得出是哪一個前置
|
||
# ① 版本不一致 ② Gitea 上沒那個 tag ③ 版本寫法不對
|
||
# B 群「該放行」(exit 0)——前置都在就建;release 已存在則冪等不重複建;--dry-run 不 POST
|
||
#
|
||
# 🔴 全程離線(RELEASE_SHIP_FIXTURE + RELEASE_SHIP_SINK),不打 Gitea、不建任何真 release。
|
||
set -u
|
||
TOOL="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/release-ship}"
|
||
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
|
||
PASS=0; FAIL=0; N=0
|
||
|
||
# t <期望exit> <說明> <必須出現的字串> <fixture檔> [額外參數…]
|
||
t() {
|
||
want="$1"; desc="$2"; must="$3"; fx="$4"; shift 4
|
||
N=$((N+1))
|
||
rm -f "$TMP/sink.json" "$TMP/sink.json.checkfx.json"
|
||
out=$(RELEASE_SHIP_FIXTURE="$TMP/$fx" RELEASE_SHIP_SINK="$TMP/sink.json" \
|
||
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:版本一致性沒過
|
||
cat > "$TMP/a1.json" <<'JSON'
|
||
{"consistency_ok":false,"consistency_msg":"❌ plugin.json=0.21.0 但 tag=v0.22.0",
|
||
"tags":["v0.22.0"],"releases":[]}
|
||
JSON
|
||
t 2 "版本不一致 → 擋,指名前置①" "前置①" a1.json v0.22.0
|
||
|
||
# A2:Gitea 上沒有這個 tag
|
||
cat > "$TMP/a2.json" <<'JSON'
|
||
{"consistency_ok":true,"tags":["v0.18.0"],"releases":["v0.18.0"]}
|
||
JSON
|
||
t 2 "Gitea 沒有該 tag → 擋,指名前置②+叫人先推 tag" "git push origin v0.22.0" a2.json v0.22.0
|
||
|
||
# A3:版本寫法不對
|
||
cat > "$TMP/a3.json" <<'JSON'
|
||
{"consistency_ok":true,"tags":[],"releases":[]}
|
||
JSON
|
||
t 2 "版本寫法不對 → 擋" "版本寫法" a3.json "0.22"
|
||
|
||
echo "── B 群:該放行 ──"
|
||
|
||
# B1:前置都在、release 還沒建 → 建(fixture sink),然後覆核通過
|
||
cat > "$TMP/b1.json" <<'JSON'
|
||
{"consistency_ok":true,
|
||
"current":"0.22.0","dingban":["0.22.0","0.18.0"],"loaded":"0.22.0",
|
||
"tags":["v0.22.0","v0.18.0"],"releases":["v0.18.0"]}
|
||
JSON
|
||
t 0 "前置齊全、release 缺 → 建起來" "已建立 release「v0.22.0」" b1.json v0.22.0 --notes-file "$TMP/b1.json"
|
||
t 0 "建完回頭跑 release-check 覆核(問收貨端)" "覆核" b1.json v0.22.0 --notes-file "$TMP/b1.json"
|
||
|
||
# B2:release 已存在 → 冪等,不重複建
|
||
cat > "$TMP/b2.json" <<'JSON'
|
||
{"consistency_ok":true,
|
||
"current":"0.18.0","dingban":["0.18.0"],"loaded":"0.18.0",
|
||
"tags":["v0.18.0"],"releases":["v0.18.0"]}
|
||
JSON
|
||
t 0 "release 已存在 → 冪等放行、不重複建" "本來就在了" b2.json v0.18.0 --notes-file "$TMP/b2.json"
|
||
|
||
# B3:--dry-run 不 POST
|
||
cat > "$TMP/b3.json" <<'JSON'
|
||
{"consistency_ok":true,"tags":["v0.22.0"],"releases":[]}
|
||
JSON
|
||
t 0 "--dry-run 全走一遍但不 POST" "不 POST" b3.json v0.22.0 --dry-run
|
||
|
||
echo ""
|
||
echo "──────────────────────────────"
|
||
printf '共 %d 項:✅ %d / ❌ %d\n' "$N" "$PASS" "$FAIL"
|
||
[ "$FAIL" -eq 0 ]
|