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。

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

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

小夜