-
Notifications
You must be signed in to change notification settings - Fork 140
Expand file tree
/
Copy pathlefthook.yml
More file actions
61 lines (57 loc) · 2.97 KB
/
Copy pathlefthook.yml
File metadata and controls
61 lines (57 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Git hooks 配置(lefthook)
# 参考:https://lefthook.dev/configuration/
#
# 规则说明:
# - pre-push git-guard:通用护盾(分支基线 + lockfile 同步检查),
# 见 scripts/git-guard-pre-push.sh(2026-08-24,PR #952/#953 教训沉淀)。
# 任何依赖升级 / 开分支的推送都会被机械校验,失败拒绝 push。
# - pre-commit internal-restore:specs/ 与 .workbuddy/ 从版本控制移除后,
# 切分支会被 git 清空,自动从私有归档仓捞回,见 scripts/internal-sync.sh。
# - pre-commit internal-docs-guard:拦截 specs/ 与 .workbuddy/ 内部文件入库,
# 见 scripts/git-guard-internal.sh(2026-08-28)。文档约定拦不住 AI agent 与
# 旧 worktree,所以加机械防线兜底。
#
# 注意:hook 依赖仓库内的 lefthook.yml,因此只对包含本文件的分支生效。
# 基于旧 main 的 worktree 不会加载这些 job,那种情况由 CI 的
# internal-docs-guard workflow 兜底。
pre-commit:
parallel: false
jobs:
# specs/ 与 .workbuddy/ 都已从版本控制移除,切分支或 merge 时 git 会顺手
# 把工作区里这些文件删掉。这里负责自动从私有归档仓捞回来,见
# scripts/internal-sync.sh。
# 挂在 pre-commit 而不只是 post-checkout:本机的 post-checkout/post-merge
# 被 git-lfs 的 other-* 链接管,不走 lefthook,写了也不会跑。
- name: internal-restore
run: bash scripts/internal-sync.sh pull --hook
- name: internal-docs-guard
run: bash scripts/git-guard-internal.sh
# mcp 参数级 .describe() 中文棘轮(零依赖、毫秒级、不过滤文件)。
# 同一道闸有三个入口,缺一不可:
# 1. 本文件(lefthook)—— 本机生效。core.hooksPath 全局指向 ~/.git-hooks,
# 该目录下是 lefthook 的 shim,按"仓库根有无 lefthook.yml"分发。
# 2. .husky/pre-commit —— 上游 dev 生效(package.json prepare 跑 husky)。
# 本机被 (1) 挡在前面,永远不会执行。
# 3. .github/workflows/i18n-guard.yml —— CI 兜底,本地漏了还能拦。
# 故意不写 files/glob 过滤:闸门"静默不触发"比"多跑 50ms"危险得多。
# 逻辑只在这一个脚本里,本文件与 husky 只各占一行接线。
- name: i18n-coverage
run: node mcp/scripts/check-i18n-coverage.mjs
# 同上,切分支 / merge 后立刻恢复。注意:本机 post-checkout / post-merge
# 被 git-lfs 的 other-* 链接接管,不会走到 lefthook,所以这两个 job 在这里
# 属于"换个环境就自动生效"的兜底,真正兜住本机的是上面的 pre-commit。
post-checkout:
parallel: false
jobs:
- name: internal-restore
run: bash scripts/internal-sync.sh pull --hook
post-merge:
parallel: false
jobs:
- name: internal-restore
run: bash scripts/internal-sync.sh pull --hook
pre-push:
parallel: false
jobs:
- name: git-guard
run: bash scripts/git-guard-pre-push.sh