#!/usr/bin/env bash # .githooks/pre-commit — 闸 3:提交前本地把关(复用 CI 同款检查的快子集)。 # # 启用:bash ci/install-hooks.sh (设 git core.hooksPath=.githooks) # 设计:成功静默、失败才打详情;只放秒级检查。flutter/go test 较慢,留给 CI(闸 4)。 # # 跑:红线词扫描 + 可移植 SQL 扫描 + codegen 漂移检查。 set -euo pipefail ROOT="$(git rev-parse --show-toplevel)" cd "$ROOT" # run_check <名称> <命令...> —— 成功静默,失败打输出并中止提交。 run_check() { local name="$1" shift local out if ! out="$("$@" 2>&1)"; then echo "[pre-commit] ✗ ${name} 未通过:" >&2 echo "${out}" >&2 echo "[pre-commit] 提交已中止。修复后重试,或临时 --no-verify 跳过(不推荐)。" >&2 exit 1 fi } run_check "红线词扫描" bash ci/scan-redline.sh run_check "可移植 SQL 扫描" bash ci/scan-portable-sql.sh if command -v node >/dev/null 2>&1; then run_check "codegen 漂移检查" bash ci/check-codegen-drift.sh fi echo "[pre-commit] ✓ 本地闸通过(完整测试见 CI)"