dsh-release:一次调用走完发布,并用 sha256 证明三处产物一致

前言

在 DeepSeek Harness(DSH)里维护插件或 npm 包时,发布往往是一串彼此依赖的步骤:改版本、跑测试、打包、提交并打 tag、推远端、开 GitHub Release、再 npm publish,最后还要确认 registry 上真的是新版本。npm 的 publish 还可能返回 202 Accepted,命令成功退出并不等于包已经可查。社区目录 skillhub.cn 里归类为「工作流」的 dsh-release(维护者 KNLCXY)把这条链路收成 DSH 工具 release:默认只出计划,显式 apply 才改文件和写远端;只有在 registry 能查到且哈希对得上时,才在报告里认定发布成功。

这是什么

dsh-release 是给 DSH 提供的 release 工具:一次调用完成版本同步、测试、npm pack、git 提交/tag/推送、GitHub Release、npm 发布(token / staged / OIDC 等通道),并用 sha256 比对 npm 下载的 tarball、GitHub Release 附件 digest 与 本地 pack 产物 是否字节一致。仓库尚未发布到 npm,当前安装渠道以 GitHub 为准。许可证 MIT,package.json 版本为 0.1.1。

核心功能

两条硬规矩

  1. 默认只出计划。 action: "prepare"(也是默认)不改任何文件、不写远端,只展示将要执行的内容、风险与下一步建议;真正执行必须 action: "apply"。
  2. 可核验才算成功。 报告各行有出处:从 npm 拉 tarball 算 sha256 与本地比;GitHub Release 附件的 digest 与本地比。任一不一致则失败并写出两侧哈希。

固定流水线(apply)

顺序为:

版本同步 → 测试 → npm pack → git commit/tag/push → GitHub Release → npm 发布 → 核验 → (可选) 装进 profile

任一步失败即停止,报告说明卡在哪一步及原始错误。

工具参数(节选)

参数 说明
action prepare(默认)/ apply / setup-ci / verify
repo 仓库目录,默认当前会话工作目录
version / bump 目标版本;bump 为 patch / minor / major
channel auto(默认)/ token / stage / ci
prerelease auto(默认)/ true / false
changelog_entry apply 时插入 CHANGELOG.md 顶部的本版说明
notes / name / message Release 正文、标题、提交信息
install / profile 发布后把产物装进某个 DSH profile
github / tag / skip_tests 关闭对应步骤

npm 发布三通道

应对 npm 逐步限制 bypass-2FA 令牌(账号类操作自 2026-08 起需交互式 2FA,直接发布预计 2027-01 起也会受影响):

通道 用途
token 本机 ~/.npmrc 有可用凭证时直接 npm publish
stage npm stage publish 进暂存区,网页 2FA 批准后公开
ci 打 tag 后由 GitHub Actions 用 OIDC 换一次性凭证发布

channel 默认 auto:仓库已有 OIDC workflow 则走 ci(本地不再 publish);否则有凭证走 token;都没有则退回 stage。

release({ action: "setup-ci", repo: "…" }) 会生成含 id-token: write 的 .github/workflows/release.yml,并提示在 npm 侧执行 npm trust github …(需交互式 2FA;workflow 文件名须与配置一致,含 release.yml 扩展名)。

发布口径

0.x 一律预发布(GitHub Release 标 prerelease,不算 Latest);1.x 起为正式版。可用 prerelease: "true"/"false" 覆盖。

无 node/npm 环境时的自举

面向 PATH 里没有 node、npm 的机器:按序探活 git(含插件包内 ucrt64 等路径)、从 registry 缓存 npm CLI 到 ~/.dsh/storages/release/npm/、用 DSH 的 Electron 垫片充当 Node 跑 npm test;GitHub 令牌来自插件配置、dsh-github 存储或 git credential fill。机器上不必预先安装 Node 工具链。

安装与启用

从 GitHub 安装(README 给出的官方命令):

dsh plugin --profile desktop add github:KNLCXY/dsh-release

或使用本机源码目录:

dsh plugin --profile desktop add file:/path/to/dsh-release

改源码后需 bump package.json 的 version 再重新 add(pnpm 按版本号判断是否复制),并重启 DSH 才会加载宿主侧。插件以当前 DSH 进程权限运行,安装前应自行查看仓库源码与 MIT 许可证。

运行时配置写在 ~/.dsh/storages/release/settings.json,字段包括 gitPath、npmCli、npmVersion、githubToken、profile、access(默认 public)、verifyTimeoutMs(默认 240000)等。可通过 GET http://127.0.0.1:<GUI 端口>/_release/settings 查看当前探到的 git 与存储位置。

典型用法

先看计划,不改任何东西:

release({ action: "prepare", repo: "…/repo/dsh-websift" })

确认后再执行发布(示例为 patch bump):

release({ action: "apply", repo: "…/repo/dsh-websift", bump: "patch" })

为 OIDC trusted publishing 一次性生成 workflow:

release({ action: "setup-ci", repo: "…/repo/dsh-websift" })

适用场景与注意

适合: 在 DSH 会话里维护单个 package.json 的插件或 npm 包,希望发布步骤可预览、失败可定位,且要用哈希证明 npm、GitHub 与本地 pack 三份产物一致;或在 Windows 等未预装 node/npm 但仍需完整发布链的环境。

注意(来自 README 已知限制):

  • 主要在 Windows 上实测;POSIX 有分支但未充分验证。
  • ci 通道生成 workflow 后,npm 侧 npm trust 仍需人工 2FA,工具不能代点。
  • 无 package.json 的 test 脚本会跳过测试并标注;不处理 monorepo,一次只发一个目录。
  • 不会自动生成 CHANGELOG 正文,仅检查版本段落;需自动插入时传 changelog_entry。
  • 生态里存在名称或定位相近的其他 dsh-release-* 工具;本插件强调三处字节一致与 token/stage/OIDC 自动选型,安装时以仓库 KNLCXY/dsh-release 为准。

结尾

dsh-release 把「计划 → 执行 → 三源哈希核验」绑在同一条 release 工具里,并兼顾 npm 发布凭证迁移与无 Node 环境的工具链自举。目录页:https://www.skillhub.cn/plugins/KNLCXY/dsh-release;源码与文档:https://github.com/KNLCXY/dsh-release。

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

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

Xiaoye