关于 plugin-release
plugin-release 是面向插件开发者的发布技能,覆盖 GitHub、npm 和 hub 发布流程。它指导打包验证与分层检查,并要求发布前确认,不会自动决定或提升版本号。
主要功能
- 01插件打包与产物验证
- 02分层发布门禁检查
- 03版本与 dist-tag 校验
- 04消费者安装冒烟测试
- 05发布确认与回滚指导
适用场景
- 01发布前验证插件压缩包
- 02检查发布标签和 npm dist-tag
- 03在隔离配置中测试插件
- 04规划问题发布后的回滚
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oh-my-dsh/ dsh-plugin-upgrade-skill --skill plugin-release安装后在 Claude Code 中输入/plugin-release确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
SKILL.zh-CN.mdreferences/profile-dependency-management.mdpublish-playbook.mdscripts/verify-release.mjsverify-release.test.mjs详细介绍
English | 简体中文
plugin-release
安全发布已开发并测试的插件。发布是单向的外发操作——在实际发布或推送标签之前,先展示计划并获得确认;此技能不会替你决定版本号,也绝不会自动提升版本号。
第 0 步:确认目标版本和发布渠道
| 发布渠道 | 适用场景 | 关键事实 |
|---|---|---|
| GitHub 直接安装 | dsh plugin --profile <p> add github:owner/repo | 使用者会解析默认分支的 HEAD;发布 = 推送到 main——推送前运行完整的发布检查 |
| npm registry | npm publish | 仅适用于官方发布线;带有 alpha/rc 前缀的 @deepseek-ai/* 版本不保证会发布到 npm——发布前通过 npm view <pkg> versions 验证 |
| hub 列表 | 在 hub 目录中注册 | 注册是独立操作,不能替代打包验证 |
| 集合 | 将成员插件打包进集合产物 | 遵循所属集合仓库自身的流程 |
未发布的批次(例如从未发布到 npm 的某个批次版本——alpha.1 仅发布于 GitHub;alpha.2 到 alpha.4 则以 alpha dist-tag 发布)应按照 references/publish-playbook.md 中的覆盖流程处理。不要查找 npm 上不存在的版本,也不要因此切换包管理器。
第 1 步:打包并验证产物
- 使用仓库指定的唯一包管理器和锁文件(
package-lock.json→ npm,pnpm-lock.yaml→ pnpm); - 运行完整的发布检查(见第 3 步),然后执行
npm pack/pnpm pack; - 解包并验证:
files覆盖所有运行时相对导入和资源;产物中没有遗留的.ts文件;cordis.patch.yml/dsh.plugin.json/SKILL.md等清单文件均已包含; - 将 tarball 安装到隔离的 profile 中进行使用验证(插件条目会出现在
dsh --profile compat --dump-config中 → 工具已真正注册并可以执行)。
第 2 步:版本依赖基线(alpha 阶段)
- devDependencies 使用 npm 发布线(当前为 0.1.1-rc.2)作为类型基线,确保公共仓库在任何机器上执行
npm install后都能通过类型检查; - peer 范围使用较宽的范围(例如
<0.2.0),以覆盖未发布的 alpha/rc 版本; - 当代码必须同时兼容本地测试框架(GitHub 标签)和 npm 发布线时,使用 双兼容模式:保留 npm 发布线类型所要求的结构,同时确保 alpha 运行时语义保持不变(见 playbook 中的“双兼容模式”章节);
- 绝不要在已提交的 package.json 中写入本地绝对路径(junction/file:)。
第 3 步:发布检查(逐层进行;较低层通过后才能进入下一层)
- 依赖解析:锁文件的变更符合预期;没有混用不同批次;
- 静态检查:类型检查 + 插件测试 + 构建;
- 实际挂载:在隔离的 profile 上冷启动目标宿主,并固定到精确的 DSH 标签(绝不能让可变的 master/main 冒充验收版本);确保入口处于启用状态,且没有未完成的服务。Web Client 插件还必须验证:宿主公布的资源(启动清单/启动列表中的 bundle 入口)可访问、bundle 注册成功、DOM 挂载完成,且没有页面错误——仅查看
--dump-config并不能完成这一层的验证; - 行为验证:实际执行一条核心路径(对于工具插件:一条消息 → 工具 → 响应;或等效的专用流程);
- 包装器:验证退出代码以及 stdout/stderr 的归属。
第 4 步:发布语义门禁(任一检查失败即停止发布)
- GitHub Release 标签必须与
v${package.json.version}相同; - 版本是否带有预发布后缀(
-之后、+构建元数据之前的部分)必须与 GitHub Release 的预发布状态一致; - 预发布版本只能使用项目声明的非 latest dist-tag(名称由项目选择,例如
next或alpha——此技能不会硬编码特定名称);只有不带后缀的稳定版本才能使用latest; - 发布稳定版本之前,查询当前的
latest(npm view <pkg> dist-tags.latest),如果 semver 低于现有的 latest,则拒绝发布,以防 latest 回退到较低版本。
第 5 步:发布与回滚
- 发布之前:提交和标签都必须干净;记录 lockfile 和组合基线的哈希;
- 发布之后:以使用者身份重新安装一次并进行冒烟测试;
- 回滚:优先撤销发布(删除标签/将标签重新指向旧提交);不要发布“兼容新旧两侧”的补丁来掩盖问题;
- 关于尚未发布 cohort 的 CI,请参阅操作手册中的“CI 和发布门禁”部分(cohort 存储缓存、
NPM_PUBLISH_ENABLED开关)。
安全边界
- 任何发布/推送标签/写入 hub 注册信息之前,都要展示计划并获得确认;绝不自动提升版本;
- 绝不发布包含凭据、
.npmrc内容、会话日志或私有路径的构件; - 不要切换包管理器或改写其他 lockfile;如果失败,只回滚本次运行所管理的路径,并报告遗留内容。
参考资料
| 文件 | 内容 |
|---|---|
| references/publish-playbook.md | 尚未发布 cohort 的安装、双兼容模式、CI/发布门禁、真实问题列表和回滚方案 |
| references/profile-dependency-management.md | Profile 安装/更新方案:GitHub 依赖锁缓存、重命名包时的三处同步、junction 清理和主机升级关联 |
评论
支持 Markdown