51 lines
2.4 KiB
YAML
51 lines
2.4 KiB
YAML
# gatekeeper.strict.yaml — 严格预设(高合并门槛,适合核心库 / 稳定分支 / 严格 review 团队)
|
||
|
||
version: 1 # 策略 schema 版本,整数,当前为 1
|
||
|
||
# —— 加权评分维度,5 项权重之和必须 = 100 ——
|
||
weights:
|
||
review_findings: 40 # AI 代码审查发现(按严重度扣分)
|
||
test_coverage: 20 # 改动的源码是否伴随测试
|
||
pr_hygiene: 15 # PR 描述 / 关联 Issue / 体量
|
||
commit_quality: 15 # commit 是否符合 Conventional Commits
|
||
ci_status: 10 # CI 是否通过
|
||
|
||
# —— 硬门禁:全部开启,命中任一 → 直接 REQUEST_CHANGES(无视总分)——
|
||
hard_gates:
|
||
forbid_blocker_findings: true # 出现 blocker 级发现即拦截
|
||
require_ci_pass: true # CI 未通过即拦截
|
||
require_tests_for_src_changes: true # 改了源码却没加测试即拦截
|
||
require_linked_issue: true # 严格:PR 必须关联 Issue
|
||
max_changed_files: 40 # 严格:PR 体量收紧到 40 个文件
|
||
|
||
# —— 严重度 → 扣分(用于 review_findings 维度)——
|
||
severity_penalty:
|
||
blocker: 100 # 单条即清零本维度,且触发硬门禁
|
||
major: 25
|
||
minor: 5
|
||
nit: 1
|
||
|
||
# —— 最终 0-100 总分 → 裁决阈值(整体上移,更难 PASS、更易拦截)——
|
||
thresholds:
|
||
pass: 92 # 总分 ≥ 92 且无硬门禁失败 → PASS
|
||
request_changes: 75 # 总分 < 75 → REQUEST_CHANGES
|
||
# 介于两者之间 → COMMENT
|
||
|
||
# —— 各裁决对应回写的标签(依赖 gitlink-cli label)——
|
||
labels:
|
||
pass: "gatekeeper:pass"
|
||
request_changes: "gatekeeper:needs-changes"
|
||
comment: "gatekeeper:review"
|
||
|
||
# —— 源码判定:用于 test_coverage / require_tests_for_src_changes ——
|
||
source_globs: ["**/*.go", "**/*.py", "**/*.js", "**/*.ts", "**/*.rs", "**/*.java"]
|
||
test_globs: ["**/*_test.go", "**/test_*.py", "**/*.test.*", "**/*.spec.*", "tests/**"]
|
||
|
||
# —— 行为开关 ——
|
||
behavior:
|
||
dry_run_default: true # 默认只预览,不写任何东西
|
||
post_comment: true # 把评分卡作为评论回写 PR
|
||
apply_label: true # 按裁决打标签
|
||
auto_merge: false # 仅当 true 且裁决=PASS 且显式 --apply 时才合并
|
||
merge_method: squash # merge | rebase | squash
|