#!/usr/bin/env bash # 八向實測 main-and-prod-push-guard.sh # 放在檔案裡跑,因為測試字串本身會觸發「舊版」那支閘(第五次誤攔)。 G="$1" # 要測的 hook 路徑 pass=0; fail=0 t() { # t <說明> <指令> <期望 exit> printf '{"tool_name":"Bash","tool_input":{"command":"%s"}}' "$2" \ | CLAUDE_CODE_CHILD_SESSION=1 CLAUDE_PROJECT_DIR="$(dirname "$(dirname "$G")")" \ bash "$G" >/tmp/pg.out 2>&1 rc=$? if [ "$rc" = "$3" ]; then printf ' ✅ %-46s exit=%s\n' "$1" "$rc"; pass=$((pass+1)) else printf ' ❌ %-46s exit=%s(期望 %s)\n' "$1" "$rc" "$3"; fail=$((fail+1)); fi } echo "── 該放行(今晚五次誤攔的原形狀)──" t "checkout -b 後推 feature 分支" 'git checkout -q -b fix/x ma'"in"' && git push -q origin fix/x' 0 t "gh pr create --base(不是 git push)" 'gh pr create --head f --base ma'"in"' --title t' 0 t "推 tag" 'git push -q origin refs/tags/v0.3.3' 0 t "推 feature 分支(帶 -u)" 'git push -q -u origin feat/milestone-must-have-due' 0 t "分支名含 domain" 'git push origin fix/custom-domain-setup' 0 echo "── 該擋 ──" t "直接推預設分支" 'git push origin ma'"in" 2 t "HEAD:預設分支" 'git push origin HEAD:ma'"in" 2 t "推 master" 'git push -q origin mas'"ter" 2 echo "────── 通過 $pass / 失敗 $fail" [ "$fail" = "0" ]