feat: V1.1 - 责任人区分
All checks were successful
序列化结构检查 / serialization-schema-check (push) Successful in 2s
All checks were successful
序列化结构检查 / serialization-schema-check (push) Successful in 2s
This commit is contained in:
@@ -29,7 +29,7 @@ mode=block 且含任意结构变更 → exit 1(流水线失败)
|
||||
|
||||
一次 push 推了多个 commit 时,只跑 **一次** 检测,覆盖整次 push 的累计代码差,**不会**因为「变更发生在中间 commit、最后一个 commit 没改相关文件」而漏检。
|
||||
|
||||
不需要全量历史:工作树是当前 tip;`before` 通过 `git fetch --depth 1 <sha>`(或 deepen)取到即可。
|
||||
不需要全量历史:工作树是当前 tip;`before` 通过 `git fetch --depth 1 <sha>`(或 deepen)取到即可。责任人过滤依赖 `git log old..new`,流水线已通过 `ensure_range` deepen,保证区间提交可见。
|
||||
|
||||
边界:
|
||||
|
||||
@@ -38,6 +38,28 @@ mode=block 且含任意结构变更 → exit 1(流水线失败)
|
||||
- 中间 commit 改坏又被末 commit 改回 → 累计可能无告警(以最终结构为准)
|
||||
- commit 计数:优先取 `gitea.event.commits` 长度;否则 deepen 到 `before` 为祖先后再 `git rev-list`(浅克隆下直接 `rev-list` 会少算)
|
||||
|
||||
### 1.2 责任人过滤(合并推送不背锅)
|
||||
|
||||
**前提**:A/B 各自 push 都会跑检测;B 的结构变更已在 B 的 push 告警。合并/代推时不应再让推送人背他人的锅,也不按人拆多条通知。
|
||||
|
||||
| 项 | 行为 |
|
||||
|----|------|
|
||||
| 对比区间 | 仍为整次 push 的 `before → after`(Schema 新旧用全量 diff 回填) |
|
||||
| 触发集 | 仅 **责任人非 merge 提交** 触及的 Java 文件 ∩ 区间 diff |
|
||||
| 责任人参数 | `--responsible-author`(流水线传 `gitea.actor`);`--modifier` 同为 actor,报告抬头「责任人」 |
|
||||
| Author 匹配 | 对 `git log` 的 `%an <%ae>` **不区分大小写包含** actor(中文名/邮箱对不上时可能匹配失败) |
|
||||
| `--no-merges` | 纯 merge 推送 → 触发集为空 → **不告警**(符合前提) |
|
||||
| 责任人无自有 Java 改动 | 空报告、打日志跳过 |
|
||||
|
||||
```bash
|
||||
java -jar serialization-schema-checker-1.0.0.jar \
|
||||
--old-sha "$OLD_SHA" \
|
||||
--new-sha "$NEW_SHA" \
|
||||
--modifier "${{ gitea.actor }}" \
|
||||
--responsible-author "${{ gitea.actor }}" \
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 前置条件
|
||||
@@ -83,10 +105,12 @@ git checkout -B "$BRANCH" "$NEW_SHA" # NEW_SHA = gitea.sha
|
||||
git fetch --depth 1 origin "$OLD_SHA" # 优先
|
||||
# 或 git fetch --deepen N # 兜底
|
||||
|
||||
# 4) 执行
|
||||
# 4) 执行(对比区间全量;责任人过滤触发集)
|
||||
java -jar serialization-schema-checker-1.0.0.jar \
|
||||
--old-sha "$OLD_SHA" \
|
||||
--new-sha "$NEW_SHA" \
|
||||
--modifier "${{ gitea.actor }}" \
|
||||
--responsible-author "${{ gitea.actor }}" \
|
||||
...
|
||||
```
|
||||
|
||||
@@ -146,6 +170,8 @@ com/codechecker/serialization-schema-checker/1.0.0/
|
||||
| commit 数显示为 1(实际多个) | 浅克隆下 `rev-list` 看不到中间提交 | 已修复:优先事件 `commits` 长度;并 deepen 到 before 为祖先 |
|
||||
| 漏报(模式/模块) | W0x/MQ 未开 / include_modules 过窄 | 确认 W01~W05 与 mq_patterns(含 MQ03~05、MQ-K03/K04);检查 `mq_read_hints_enabled` 与模块过滤 |
|
||||
| 类型展开不完整 | 类型在依赖 jar 中 | 补充 `manual_mappings.value_type` |
|
||||
| 合并推送仍告他人改动 | 未传 `--responsible-author` / jar 过旧 | 同步流水线模板;确认 jar ≥ 含责任人过滤的版本 |
|
||||
| 责任人过滤后漏报自己的改动 | actor 与 `%an <%ae>` 对不上 | 看日志「责任人过滤…」;核对 commit author 是否含 actor 子串 |
|
||||
|
||||
---
|
||||
|
||||
@@ -157,6 +183,7 @@ com/codechecker/serialization-schema-checker/1.0.0/
|
||||
# OLD = 推送前 tip,NEW = 当前 tip(可用 origin/branch@{1} 或显式 sha)
|
||||
OLD_SHA=$(git rev-parse origin/$(git branch --show-current)~3) # 示例:假设 ahead 3
|
||||
NEW_SHA=$(git rev-parse HEAD)
|
||||
AUTHOR=$(git log -1 --format=%an)
|
||||
|
||||
java -jar /path/to/serialization-schema-checker-1.0.0.jar \
|
||||
--config .gitea/config/serialization-schema-check-config.yaml \
|
||||
@@ -164,12 +191,13 @@ java -jar /path/to/serialization-schema-checker-1.0.0.jar \
|
||||
--old-sha "$OLD_SHA" \
|
||||
--new-sha "$NEW_SHA" \
|
||||
--branch $(git branch --show-current) \
|
||||
--modifier "$(git log -1 --format=%an)" \
|
||||
--modifier "$AUTHOR" \
|
||||
--responsible-author "$AUTHOR" \
|
||||
--modify-time "$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')" \
|
||||
--dry-run
|
||||
```
|
||||
|
||||
单 commit 自测仍可用 `--old-sha HEAD~1 --new-sha HEAD`。
|
||||
单 commit 自测仍可用 `--old-sha HEAD~1 --new-sha HEAD`。未传 `--responsible-author` 时不做作者过滤(全量 diff 触发)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user