dsh-github-actions
September 12, 2026 · View on GitHub
DeepSeek Harness 插件:离线检查、概览与展开 GitHub Actions 工作流 YAML。
内置一个 YAML 子集解析器与 Actions 规则集,全部逻辑都是纯函数:不调用 gh CLI、不联网、
不读写文件系统、不启动子进程。因此结果完全确定,可以在单元测试中复现。
安装
npx -y @deepseek-ai/dsh plugin --profile web add @qingshanjiluo/dsh-github-actions
仓库内也提供了 cordis.patch.yml 包层片段,可手工插入到 profile 的层栈中。
工具
| 工具名 | 描述 | 参数 |
|---|---|---|
gh_workflow_validate | 校验工作流 YAML:必填键、job/step 结构、action 引用、触发器与过滤条件、cron、needs 悬空与环、permissions/concurrency、${{ matrix.* }} 引用;返回全部阻断错误与不阻断建议 | yamlText (string, 必填) |
gh_workflow_outline | 输出工作流概览:名称、触发器列表,以及每个 job 的 id、显示名、runs-on、needs、matrix 维度、步骤摘要 | yamlText (string, 必填) |
gh_matrix_expand | 把 strategy.matrix 展开为 GitHub 实际会调度的组合列表,按 GitHub 语义应用 include / exclude 并去重 | matrixJson (string, 必填)、limit (number, 选填) |
gh_matrix_expand 接受 JSON 对象(推荐),也接受 YAML 映射作为回退,并可自动解包
strategy: / matrix: 外层。走 YAML 回退路径时所有值都是文本。
使用示例
gh_workflow_validate
yamlText: |
name: CI
on: [push]
jobs:
build:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
返回 ok: false,并给出 jobs.build: references ${{ matrix.os }} but strategy.matrix declares no "os" dimension(该 job 也没有 strategy.matrix)。
gh_matrix_expand
matrixJson: {"os":["ubuntu-latest","windows-latest"],"node":[18,20]}
返回 count: 4,组合顺序为 os 最慢、node 最快:
{os:ubuntu-latest,node:18}、{os:ubuntu-latest,node:20}、{os:windows-latest,node:18}、
{os:windows-latest,node:20}。
配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
maxCombos | number | 256 | 单次矩阵展开允许返回的最大组合数(GitHub 自身的上限是 256) |
maxWorkflowLines | number | 4000 | 解析器允许读取的工作流最大行数 |
解析器范围
支持:块映射与块序列、流式 [a, b] 与 {a: b}、| / > 块标量(含 - / + 修饰)、
单双引号标量、行内 # 注释、--- 文档标记、锚点/标签前缀剥离。
不支持(会作为错误报出而不是静默忽略):显式 ? key 复杂键、跨行引号标量、多行纯量续行。
超过 64 层块嵌套或 32 层流嵌套时解析会提前停止,避免异常输入拖垮宿主进程。
开发
npm install --no-audit --no-fund
npx tsc --noEmit
npm run build
npx vitest run
node scripts/load-smoke.mjs
scripts/load-smoke.mjs 会加载构建产物 lib/index.js,断言导出面并实际调用三个工具。
License
MIT