test(ci): 第4刀a pre-commit hook(闸3 提交前本地把关)
复用 CI 同款检查的快子集,提交前本地拦截: - .githooks/pre-commit:红线词 + 可移植SQL + codegen 漂移(成功静默/失败打详情) - ci/install-hooks.sh:一键启用(core.hooksPath=.githooks) - 不放 flutter/go test(慢,留 CI 闸4);可 --no-verify 临时跳过 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/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)"
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# install-hooks.sh — 启用本地 git hooks(闸 3:提交前把关)。
|
||||
#
|
||||
# 一次性运行即可;之后每次 git commit 会自动跑 .githooks/pre-commit
|
||||
# (红线词 + 可移植 SQL + codegen 漂移)。失败会中止提交。
|
||||
#
|
||||
# 卸载: git config --unset core.hooksPath
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(git rev-parse --show-toplevel)"
|
||||
cd "$ROOT"
|
||||
|
||||
git config core.hooksPath .githooks
|
||||
chmod +x .githooks/* 2>/dev/null || true
|
||||
|
||||
echo "✓ 已启用 git hooks(core.hooksPath=.githooks)"
|
||||
echo " pre-commit 将跑:红线词扫描 · 可移植 SQL 扫描 · codegen 漂移检查"
|
||||
echo " 卸载:git config --unset core.hooksPath"
|
||||
Reference in New Issue
Block a user