前言¶
在 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。