← Back to home@feely0208

dsh-release-selfcheck

dsh-release-selfcheck · DSH 插件

Stars
0
Language
Shell
Created
Oct 16, 2026
Updated
Oct 16, 2026

Introduction

@deepwhale-cn/dsh-release-selfcheck

安装

dsh plugin --profile web add @deepwhale-cn/dsh-release-selfcheck

给 AI Agent 用的发布前自检能力。装进 DeepSeek Harness(DSH)后,Agent 在发版、上传安装包、切换下载链接、创建 Release 之前会自动按这套清单自查。

一句话:它挡的不是"报错",而是**「没有报错但事情没做成 / 做错了」**。


为什么需要它

最常见的发布事故,全都发生在所有 CI job 都是绿的、日志里没有任何异常的时候。下面每一条都是真实踩过的坑:

事故表面现象真实后果
迁移脚本的临时目录叫了 assets,撞上仓库已有的 assets/工作流"成功"把 11 个无关的网站图片一起传上了对象存储
两个 macOS 构建 job 的产物同名四个 job 全绿macOS arm64 整个丢失,该平台用户没得下载
用 unzip -l 的输出做断言,把完好的包判成坏包构建"失败"正确产物被拦下,排查方向被带偏
命令行参数 --key=value 不被解析器支持脚本打印"无需处理"、退出码 0阈值静默丢失,该做的一件没做
改一个 JSON 字段时整段配置被顺手删掉构建成功打出签名无效的包,只影响其中一个平台
验证步骤用 curl -o /dev/null 而非 -I看起来在"验证"几个 GB 白下载,白等十几分钟

共同点:没有报错,但事情没做成或做错了。所以本 skill 的核心不是"看有没有报错",而是逐个断言可核对的最终结果。


三条铁律

1. 断言「结果」,不要断言「过程」

❌✅
函数返回了 changed=true目标文件里到底有没有那段内容
所有 job 都 success产物清单里每个平台在不在
命令 exit 0HTTP 状态码是不是 200(用 -I)
日志里没报错下载回来的哈希与原件一致

并且:判据要对着「应该是什么」,不能对着「手里有什么」。验证器与上传器的过滤规则必须同源——否则会出现"上传器刻意跳过某类文件,验证器却拿整个目录去核对",于是报出假失败。

2. 只上传「显式清单」,不上传「某个目录的全部内容」

目录内容会变,清单不会。这是"多传了 11 个无关文件"那次事故的根因。

3. 先自检环境与权限,再验业务逻辑

否则一旦失败,你无法判断是环境问题还是逻辑问题,排查时间成倍增加。


安装

npm install @deepwhale-cn/dsh-release-selfcheck

然后在你的 DSH profile 里把它列为 bundle:

{
  "dependencies": {
    "@deepwhale-cn/dsh-release-selfcheck": "^0.1.0"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "@deepwhale-cn/dsh-release-selfcheck"
      ]
    }
  }
}

重启后,Agent 在涉及发布的对话里会自动带上这套检查清单。


自检脚本

技能正文里带一个可直接运行的脚本(路径在注册时自动替换为真实完整路径):

SELFCHECK=/path/to/skill/selfcheck.sh      # 由技能正文给出

# 看当前配置与自动推断结果
bash $SELFCHECK config

# 产物清单比对(核心):多一个要问为什么,少一个要问为什么
bash $SELFCHECK manifest expected.txt ./实际目录

# 版本一致性:包版本 / git tag / 各站点 / 各产品线
bash $SELFCHECK versions

# 线上页面下载链接逐条 HEAD(403 = 源站没有;000 = 网络抖动)
bash $SELFCHECK links https://example.com/download.html

# 发布纪律:主程序是否正式发布、附加发布是否标了 Pre-release、latest 指向谁
bash $SELFCHECK release v1.0.19 suite-v1.0.19

配置(全部可选,不设则自动推断)

环境变量说明默认
SELFCHECK_REPO_DIR仓库根目录从当前目录向上找 package.json
SELFCHECK_REPO_SLUG仓库 slug(owner/repo)从 git remote origin 推断
SELFCHECK_MAIN_SITE主站目录(用于跨站版本比对)不设则跳过该项
SELFCHECK_PAGES_INDEX静态托管站的 index 路径<repo>/docs/index.html
SELFCHECK_MAIN_SITE=/path/to/main-site bash $SELFCHECK versions

覆盖范围

  • A. 产物清单 —— 预期 vs 实际逐一比对,防止多传/漏传
  • B. 版本一致性 —— 包版本、git tag、多个站点、多个产品线互不覆盖
  • C. 平台与架构 —— 解包看二进制头,不只看文件名;随包载荷架构要与包一致
  • D. 上传内容过滤 —— 该排除的排除,但同名不同用途的别一刀切
  • E. 站点上线前 —— 从线上页面抽链接、逐条 HEAD、部署后再验
  • F. 发布纪律 —— 正式/预发布标记、latest 不被附加发布抢走
  • G. 对外内容合规 —— 与合规审核 skill 配合(本 skill 管"东西对不对",它管"话能不能说")
  • H. 现场清理 —— 进程回收、临时文件清理、不误删别人的文件

另含一节**「已知假阳性」**,防止检查本身误伤(例如下载目录里出现 .blockmap 是正常的、锁文件里的敏感词是 base64 巧合)。


注意

  • 本 skill 提供的是检查方法与判据,不是任何具体项目的发布脚本;命令里的仓库名、站点路径都需按你的情况配置。
  • 脚本只做能机械核对的部分。架构是否正确、清单是否合理这类判断,仍需人(或 Agent)来看。
  • 依赖 ctx.skills(由 @deepseek-ai/dsh-skill 提供)。该服务缺失时插件静默跳过,不会影响 profile 启动。

相关

  • DeepSeek Harness —— DSH 本体
  • 同系列:@deepwhale-cn/dsh-cn-compliance(对外内容合规红线审核)、 @deepwhale-cn/dsh-cn-doc-formatter(中文公文排版)
  • 深鲸官网:https://deepwhale.org.cn

License

MIT