dsh-action:在 GitHub Actions 里做有成本上限的 DSH PR 审查

前言

在 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)。

核心功能

  1. GitHub Action 入口:通过 lengrufeng2008/dsh-action@v0.1.0(或更新 tag)在 pull_request 工作流中运行;Action 会准备 Node 22、安装 @deepseek-ai/dsh,并将本 bundle 安装到 headless profile。
  2. PR diff 审查:基于 gh pr diff 与本地 checkout,由 pr-review 技能生成 Markdown 审查;输出变量 review_path 指向该 Markdown 文件,也可作为 artifact 上传而不发评论。
  3. 可选 PR 评论:comment 默认为 true 时,将审查以 PR comment 形式发布(需具备 pull-requests: write 的 token)。
  4. 墙钟成本上限:max-minutes 默认 15,作为硬性墙钟上限;README 说明此处不是 token 上限,headless 运行没有 per-run token 开关,应配合专用 API key 与预算控制。
  5. 本地 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜