#!/bin/bash # check-all.sh — 框架的機械閘總入口(commit 前跑這一支就好) # # 為什麼要有總入口:三支閘分開跑,遲早有人只記得跑其中一支。 # 一個入口 = 一個習慣,而不是三個要記得的步驟。 # # 掛法(版控在 .githooks/,跟著 repo 走,不必每台機器重設): # git config core.hooksPath .githooks # # 為什麼不用 CI workflow:本組織的鐵律禁止在 repo 上掛自動化 workflow #(歷史上正是「一個 push 觸發大量自動化」把帳號弄到被停權)。 # 閘要跑在**人的機器上、commit 的那一刻**,不是掛在雲端等事件。 set -uo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$REPO_ROOT" FAIL=0 run() { # $1=名稱 $2...=命令 local name="$1"; shift printf '── %s\n' "$name" if "$@"; then :; else FAIL=1; fi echo "" } echo "════════════════════════════════════════════════" echo "🔎 框架機械閘(commit 前檢查)" echo "════════════════════════════════════════════════" run "框架不含實例資料" bash scripts/check-no-instance-names.sh run "已發佈路徑只增不移" bash scripts/check-legacy-paths.sh run "單一活性規格" bash system-dev/scripts/sdd-active-check.sh docs/3-specs # 腳本語法(壞掉的 shell 推出去,實例的更新機制就跟著壞) printf '── 腳本語法\n' SYNTAX_BAD=0 for f in scripts/*.sh template/.claude/hooks/*.sh template/.claude/hooks/lib/*.sh \ template/profiles/*/hooks/*.sh template/scripts/*.sh; do [ -f "$f" ] || continue bash -n "$f" 2>/dev/null || { echo " ❌ 語法錯誤:$f"; SYNTAX_BAD=1; FAIL=1; } done [ $SYNTAX_BAD -eq 0 ] && echo " ✅ 全部通過" echo "" if [ $FAIL -ne 0 ]; then echo "════════════════════════════════════════════════" echo "❌ 有檢查沒過——先修,別 commit" echo "════════════════════════════════════════════════" exit 1 fi echo "✅ 全部通過" exit 0