dsh-ci-cd-bot:把 GitHub issues/PRs 接入 DSH 的执行与评审队列

前言

在 DSH Web UI 中,agent 已经可以执行编码任务;如果账号下有多个 GitHub 仓库,issues、PR、本地修复、审查和回写 GitHub 之间仍需要人工串联。dsh-ci-cd-bot 是一个 DSH Web UI 插件,用于监听账号仓库的 issues/PRs,把本地已有 checkout 的 bug 自动修复,并把 PR、feature request 和其他事项放入看板,供一键执行、评审和推送。

下面介绍它的定位、能力、安装方式和注意事项。

这是什么

dsh-ci-cd-bot 是 bkMoon1024 维护的 DSH Web UI 插件,采用 MIT 许可证。它由 host half 和 browser half 两部分组成:host 侧轮询 GitHub、匹配本地仓库并执行 agent;browser 侧在 DSH Web UI 注入 CI/CD 侧栏入口和中间列看板。

它适合需要把 GitHub issues/PRs 与本地 DSH 工作流接起来的场景。运行要求是 Node.js ≥ 22,且 dsh 版本为 0.1.0-rc.6package.json 声明的 engines 为 Node.js ^22.19.0 || >=24.0.0

核心功能

先做监听,再做分类和本地匹配,最后进入看板执行或自动修复。

输入 处理方式
Bug issue,仓库已在本地 checkout 自动入队;agent 在本地 checkout 中修复并自测;插件提交、推送,可选创建 PR,并回复 issue
Feature request 进入看板队列;点击 Run;agent 实现;推送;回复 issue
Other issue 进入看板队列;如果本地 checkout 存在,则实现并推送;否则 agent 起草回复,插件以评论发布
Pull request 进入看板队列;点击 Review;拉取 diff;agent 评审;提交 APPROVE / REQUEST_CHANGES / COMMENT;approve 时可自动合并

几个关键约束:

  • 轮询对象是账号下的仓库,issues/PRs 的轮询间隔可配置。
  • 首次轮询使用 watermark,只补最近几天。
  • 分类基于 label rules 以及 title/body keywords。
  • 本地匹配会在配置的 scan roots 和 DSH workspaces 下查找 git checkout。
  • 每次运行都是真实 agent session,会保留在 session list 中查看 transcript。
  • git 分支、commit、push 由插件执行;agent prompt 中禁止 git。
  • push policy 可以是 auto,也可以在 board 中选择 confirm
  • 修复后开 PR 默认开启且可配置。
  • approve 后自动合并默认开启且可配置。

安装与启用

包已发布在 npm,推荐从 npm 安装。

dsh plugin --profile web add dsh-ci-cd-bot
dsh web

首次使用时,在看板打开设置:粘贴 GitHub token(repo scope),按需配置 scan roots,然后保存。

可以确认配置层是否挂载:

dsh --profile web --dump-config | grep ci-cd-bot

从源码构建

如果要从源码构建,可以使用项目仓库中的构建和测试命令:

git clone https://github.com/bkMoon1024/dsh-ci-cd-bot.git
cd dsh-ci-cd-bot
npm install --ignore-scripts
npm run build
npm test

构建完成后以 link 方式安装:

dsh plugin --profile web add link:$(pwd)
dsh web

手动安装与切换

手动安装时,可以把当前目录链接到 DSH profile 的 node_modules

ln -sfn "$(pwd)" ~/.dsh/profiles/node_modules/dsh-ci-cd-bot
dsh web

从手动安装切换到 dsh plugin add 前,先移除手动添加的 insert 条目,避免重复行。

卸载

dsh plugin --profile web remove dsh-ci-cd-bot
dsh web

手动安装则删除 symlink 和 insert 条目。

典型用法

以本地 bug 为例,插件会先找到本地 checkout,然后让 agent 修复并自测。之后插件执行固定 git 流程:

fetch → checkout ghbot/#<n>-<slug> → add → commit → push

如果开启“修复后开 PR”,插件会推送 ghbot/… 分支并创建 PR;如果不开启,则推送 ghbot/… 分支但不创建 PR。插件还会回复 issue。

对 feature request,通常在看板点击 Run。agent 实现后,插件按 push policy 推送并回复 issue。若 push policy 为 confirm,运行会停在看板确认环节。

对其他 issue,如果本地 checkout 存在,插件会安排实现并推送;如果没有本地 checkout,agent 会起草回复,插件将回复作为评论发布。

对 PR,点击 Review 后,插件拉取 diff,agent 给出评审结果,并提交 APPROVEREQUEST_CHANGESCOMMENT。如果 approve 后自动合并开启,插件会执行合并。

配置与安全

配置保存在:

~/.dsh/dsh-ci-cd-bot.json

状态保存在:

~/.dsh/dsh-ci-cd-bot-state.json

GUI 设置页通过 loopback-fenced /api/dsh-ghbot/* 路由族编辑配置;配置文件权限为 0600。GitHub token 是 host 侧保留的 PAT(repo scope),不会发送到 browser。

可配置项包括 scan roots、include/exclude repo filters、run concurrency、run timeout、announceToAgent 等。其中 announceToAgent 仅通过 JSON/API 配置。

适用场景与注意

这个插件适合:

  • 需要跟踪自己 GitHub 账号下多仓库 issues/PRs;
  • 本地已有相关仓库 checkout 或 DSH workspaces;
  • 希望 agent 执行后由插件统一提交、推送、回复或评审。

注意:

  • 插件会以当前 dsh 进程权限运行,安装前应检查源码与许可证。
  • 插件会执行 git branch、commit、push 操作;如果要求人工确认,可将 push policy 设为 confirm in the board
  • GitHub token 需要 repo scope;只放在 host 侧。
  • 从手动安装切换到 dsh plugin add 时,必须先移除手动添加的 insert 条目。

链接

  • GitHub:https://github.com/bkMoon1024/dsh-ci-cd-bot
羽毛球分组比赛记分
小程序二维码

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

小夜