Standalone Perforce changelist review bot for the Ceramica project.

P4 Review Bot 是一个独立运行的 Perforce changelist 审查工具。它轮询已提交的 changelist,读取描述、文件列表和文本 diff,加载 TechDoc.rules.yaml 中的确定性规则并逐条评估,把结果写入 review-last.json,最后按 changelist 向 Discord 发送通知。

工作原理

工具把“人肉检查 changelist”变成一条可复现的流水线:

  1. 轮询 Perforce:通过 p4 changes -s submitted 获取已提交的 changelist。
  2. 读取提交内容:提取 changelist 描述、涉及文件路径、文本 diff。
  3. 加载规则:用 Node.js + js-yamlTechDoc.rules.yaml 解析成规则集合。
  4. 规则评估:按 submission / naming / organization 分类逐条检查。
  5. 写回结果:输出到 review-last.json,便于后续读取和回放。
  6. 发送通知:可选把结果发到 Discord,并按 warning / error / blocker 分级展示。

规则系统

规则不是写死在 PowerShell 里,而是从 YAML 动态加载。每条规则包含:

  • id
  • category
  • severity
  • applies_to
  • check
  • exceptions
  • message

以三个提交规则为例:

  • CER-SUBMIT-001:changelist 描述必须以作者名结尾。
  • CER-SUBMIT-002:描述不能为空或使用默认文本。
  • CER-SUBMIT-003:生成的本地文件不得提交到 depot。

这种结构让规则可以独立修改,而不需要改动主脚本。

输出与通知

  • 没有 warning / error / blocker:发送绿色 success embed。
  • warning:黄色 embed。
  • error:红色 embed。
  • blocker:加粗红色错误。
  • info:写入 review-last.json,但不发到 Discord。

每个 changelist 会单独发一条消息,并在对应 embed 上方 @ 作者。

运行示例

P4 Review Bot 运行示例

运行

# 单次审查
.\P4Poller.ps1 -Once

# 持续轮询
.\P4Poller.ps1 -LoopSeconds 60

# 单次审查并发送 Discord
.\P4Poller.ps1 -Once -PostToDiscord

技术栈

  • Windows PowerShell 5.1+
  • Perforce p4.exe
  • Node.js / js-yaml
  • Discord Webhook

链接