前言¶
在 Pull Request 上跑自动化代码审查,常见做法是接第三方 SaaS,或在 CI 里自己拼脚本调模型。前者要额外账号与计费链路,后者往往缺少统一的技能封装,也难以给单次运行设硬性的时间与成本边界。DeepSeek Harness(DSH)把能力拆成可安装的插件与技能;若希望审查逻辑留在 CI 内、由 headless DSH 执行,并把结果写回 PR 评论,就需要一个把 pr-review 技能与 GitHub Action 绑在一起的组件。下面介绍社区插件 lengrufeng2008/dsh-action:在 PR 事件触发下,用有墙钟上限的 headless DSH 跑审查,输出 Markdown 审查稿,并可选择发到 PR 评论。
这是什么¶
dsh-action 由维护者 lengrufeng2008 发布,在 SkillHub 目录中归类为工作流。仓库自述将其定位为 Claude Code Action 思路在 DSH 上的 CI 原生移植:安装 @deepseek-ai/dsh、把本 bundle 装进 headless profile,读取 gh pr diff,调用 pr-review 技能生成审查内容。需要明确:产出的是审查意见,不是自动批准、合并或安全审计结论。许可证为 MIT;设计灵感来自 anthropics/claude-code-action,未复制其源码(见仓库 NOTICE.md)。
核心功能¶
- GitHub Action 入口:通过
lengrufeng2008/dsh-action@v0.1.0(或更新 tag)在pull_request工作流中运行;Action 会准备 Node 22、安装@deepseek-ai/dsh,并将本 bundle 安装到 headless profile。 - PR diff 审查:基于
gh pr diff与本地 checkout,由pr-review技能生成 Markdown 审查;输出变量review_path指向该 Markdown 文件,也可作为 artifact 上传而不发评论。 - 可选 PR 评论:
comment默认为true时,将审查以 PR comment 形式发布(需具备pull-requests: write的 token)。 - 墙钟成本上限:
max-minutes默认15,作为硬性墙钟上限;README 说明此处不是 token 上限,headless 运行没有 per-run token 开关,应配合专用 API key 与预算控制。 - 本地 bundle:同一技能可在无 CI 环境下通过 DSH 插件命令安装到指定 profile,在本地 diff 上复用审查契约。
安装与启用¶
在 GitHub 仓库中启用 Action¶
在仓库 Secrets 中配置 DEEPSEEK_API_KEY。工作流需为 pull_request 触发,并为 job 授予足够权限(发评论时需要 pull-requests: write)。README 给出的最小示例如下:
name: DSH PR review
on: pull_request
permissions:
contents: read
pull-requests: write
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lengrufeng2008/dsh-action@v0.1.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
api-key: ${{ secrets.DEEPSEEK_API_KEY }}
comment: "true"
max-minutes: "15"
Action 输入参数¶
| Input | 默认值 | 含义 |
|---|---|---|
github-token |
必填 | 发 PR 评论需 pull-requests: write |
api-key |
必填 | DSH 使用的 DeepSeek API key |
comment |
true |
是否将审查发为 PR comment |
max-minutes |
15 |
墙钟上限(分钟) |
dsh-version |
latest |
固定 @deepseek-ai/dsh 版本以便复现 |
本地安装同一 bundle(非 CI)¶
README 给出的本地安装示例(路径为作者环境示例,实际应替换为你 clone 或下载后的 bundle 目录):
dsh plugin --profile web add /home/lrf/dsh/products/dsh-action
安装后可向 DSH 发起类似请求:「Use pr-review on the current diff; output the review contract.」
DSH 生态遵循「一切皆插件」:社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 dsh 进程权限运行,安装或引用 Action 前请自行查看仓库源码与 MIT 许可证。
典型用法¶
经过上面的 YAML 配置,PR 打开或更新时会触发 review job:checkout 后 Action 完成 DSH 与 headless profile 准备,拉取 diff 并执行 pr-review,在 max-minutes 内结束;若 comment 为 true 且 token 权限足够,审查 Markdown 会出现在 PR 讨论区。若不想公开评论,可将 comment 设为 false,再通过 review_path 上传 artifact 供内部流转。
仓库内测试不调用模型或 GitHub,仅校验 skill provider、action YAML 与 shell 入口:
npm test
完整 PR 审查仍需 runner、真实 PR 与 API key。
适用场景与注意¶
适合:已在用 DSH 技能体系、希望在 PR 流水线内做一致性代码审查(非 merge gate)、并愿意用墙钟分钟数约束单次运行时间的团队。
务必注意(摘自 README「Cost and security limits」):
- 不要使用
pull_request_target向 fork PR 暴露 API key 或写 token;fork 场景需在无 secrets 的隔离 job 中审查,再通过受信任工作流发帖。 - PR diff 与元数据不可信;技能会禁止跟随其中的指令,但 agent 仍可能使用工具——除审查所需外不要授予多余写权限。
- 许多仓库默认
GITHUB_TOKEN对 PR 为只读,gh pr comment需显式pull-requests: write。 - 不要运行不可信 PR 中的代码;默认仅读 diff 与 checkout,agent 可能打开文件,宜保持 job 只读。
结尾¶
dsh-action 把 DSH 的 pr-review 技能接到 GitHub Actions,用 max-minutes 约束单次审查的墙钟时间,并可选写回 PR 评论,适合把 PR 审查纳入 CI 而不另接一套审查 SaaS 的流程。目录页:https://www.skillhub.cn/plugins/lengrufeng2008/dsh-action;源码与 Action 定义:https://github.com/lengrufeng2008/dsh-action。