What:依 jsc-meta:skill-check 的稽核結果修正技能與工具——補上每個步驟的可檢核完成條件、 把留在內文的標準輸入輸出流程下放 tools/、修正查表與退碼路由造成的誤判。 Why:稽核發現這些缺失會讓技能在實際執行時走錯分支或靜默通過。 完成條件缺漏是最常被違反的一項;退碼誤判與查表錯誤則會讓良性狀況被當成失敗。 How:逐項對照 references/guidelines.md 的審核檢查清單修正,新增的工具都有 documented exit codes,並以真實執行驗證每條路徑。 Who:jsc-meta:skill-check 例行稽核(2026-08-25)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
1.9 KiB
Bash
Executable File
55 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# base-branch.sh — 決定 PR 的基底分支。
|
|
# 用法: base-branch.sh [caller-base]
|
|
# 規則: 呼叫方傳入的分支最優先;呼叫方沒傳,才依序試 develop、main、master。
|
|
# 先 git fetch --prune origin,再確認選中的分支存在於遠端。
|
|
# 「有沒有傳」看參數個數,不看參數內容:呼叫方寫 base-branch.sh "$SOURCE_BRANCH"
|
|
# 而變數沒設定時,那是空字串,不是沒傳。若當成沒傳就會悄悄退回 develop,
|
|
# 把單一工作包直接合進 develop——這支腳本存在的目的就是擋這件事。
|
|
# 輸出: 選中的分支名(一行)。
|
|
# 護欄: 參數過多回傳 2;抓不到遠端回傳 3;呼叫方指定的分支不在遠端回傳 4;
|
|
# develop、main、master 都不在遠端回傳 5;呼叫方傳入空字串回傳 6。
|
|
# 錯誤訊息一律印繁中到 stderr。
|
|
set -u
|
|
|
|
if [ "$#" -gt 1 ]; then
|
|
echo "用法: base-branch.sh [caller-base]" >&2
|
|
exit 2
|
|
fi
|
|
|
|
ARGC=$#
|
|
CALLER=${1:-}
|
|
|
|
if [ "$ARGC" -eq 1 ] && [ -z "$CALLER" ]; then
|
|
echo "錯誤: 呼叫方傳入空字串當基底分支。請確認來源分支變數有值,或整個參數不要傳。" >&2
|
|
exit 6
|
|
fi
|
|
|
|
if ! git fetch --prune origin >/dev/null 2>&1; then
|
|
echo "錯誤: 無法向 origin 取得遠端分支。請確認遠端可以連線,再重試。" >&2
|
|
exit 3
|
|
fi
|
|
|
|
remote_has() {
|
|
[ -n "$(git ls-remote --heads origin "refs/heads/$1" 2>/dev/null)" ]
|
|
}
|
|
|
|
if [ "$ARGC" -eq 1 ]; then
|
|
if remote_has "$CALLER"; then
|
|
printf '%s\n' "$CALLER"
|
|
exit 0
|
|
fi
|
|
echo "錯誤: 呼叫方指定的基底分支 $CALLER 不在 origin 上。請確認分支名,不要自行改用其他分支。" >&2
|
|
exit 4
|
|
fi
|
|
|
|
for candidate in develop main master; do
|
|
if remote_has "$candidate"; then
|
|
printf '%s\n' "$candidate"
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
echo "錯誤: origin 上找不到 develop、main、master。請由呼叫方指定基底分支。" >&2
|
|
exit 5
|