2026-04-17 升级 init-release-base-relizy-and-bumpp 技能以支持官方 bumpp push 策略
背景
本次在 11comm 仓库内落地最新版 init-release-base-relizy-and-bumpp 技能时,我们确认了一个新的全局优化点:
根包发版同时存在两种真实使用方式:
- 串行模式:
release->release:sub->release:root->git:push - 单独模式:开发者直接运行
release:bumpp/bumpp
旧版技能模板在 bump.config.ts 中写死 push: false,这对串行模式是成立的,但会破坏单独运行 bumpp 的场景:本地会打 tag,但远程没有 tag,最终表现为 GitHub Actions 的 release.yaml 没有被触发。
后续我们一度尝试过项目私有环境变量方案(如 BUMPP_PUSH),但进一步核对 bumpp@10.4.1 官方能力后确认:
BUMPP_PUSH不是bumpp官方环境变量- 官方支持的是命令行参数
--push/--no-push - 因此最干净、最稳妥、最可复用的全局技能升级方案,是把 push 策略显式收敛到
package.jsonscripts,而不是继续在bump.config.ts里写死
这意味着:init-release-base-relizy-and-bumpp 技能需要升级一轮模板、文档和验证矩阵。
本次确认的全局结论
1. 根包发版的 push 策略必须回到官方 CLI 参数
推荐的根包脚本基线应改为:
{
"release:bumpp": "bumpp --push",
"release:root": "bumpp --no-push --yes --release patch"
}含义如下:
release:root用于串行主链路中的根包 bump,只负责本地 commit/tag,不负责推送release:bumpp用于单独执行bumpp的场景,需要立即推送 tag- 不再依赖技能模板里写死的
push: false
2. bump.config.ts 不应承担“智能 push 决策”
bump.config.ts 是静态配置文件,会同时服务于“串行执行”和“单独执行”两种入口。
因此它不适合承担动态推送策略。
推荐做法是:
- 配置文件里保留说明注释
- 把
push配置注释掉,不作为生效配置 - 让命令行入口显式通过
--push/--no-push决定行为
推荐模板形态:
export default defineConfig({
commit: "📢 publish(root): release v%s",
tag: "v%s",
// bump.config.ts 可能单独使用,也可能被串行命令复用。
// 因此 push 策略需要在命令行里通过 --push / --no-push 显式控制,
// 不能在配置文件里写死。
// push: false,
execute: (operation) => {
execSync(`pnpm exec changelogen --output CHANGELOG.md -r ${operation.state.newVersion}`, {
cwd: operation.options.cwd,
stdio: "inherit",
});
},
all: true,
});3. “工作流未触发”不一定是 release.yaml 识别失败
这次实测暴露出一个非常容易误判的问题:
- 本地存在
v0.11.5-beta.1 CHANGELOG.md里也存在## v0.11.5-beta.1release.yaml的匹配逻辑本身也兼容v0.11.5-beta.1- 但远程根本没有这个 tag,所以 GitHub Actions 没有触发
根因是:单独运行 bumpp 时没有 push tag。
因此技能文档必须新增一条明确的排障认知:
- 若 GitHub Release 工作流未触发,先检查远程 tag 是否存在
- 不要第一时间怀疑
release.yaml的 changelog 提取逻辑
建议加入的排障命令:
git tag --list "v0.11.5-beta.1"
git ls-remote --tags origin "v0.11.5-beta.1"目标技能仓库
本计划的目标不是修改当前 11comm 仓库,而是后续在以下技能仓库中升级:
D:\code\ruan-cat\monorepo\ai-plugins\dev-skills\skills\init-release-base-relizy-and-bumpp
建议升级范围
一、升级模板文件
1. templates/bump.config.ts
必须修改:
- 删除生效中的
push: false - 不引入任何项目私有环境变量协议,如
BUMPP_PUSH - 保留
commit、tag、execute、all的原有模板语义 - 在
push位置改为注释说明
验收标准:
- 模板中不存在生效中的
push:字段 - 模板中保留注释化的
// push: false, - 模板中明确说明“push 由 CLI 控制,而不是配置文件控制”
2. templates/package-scripts.md
必须修改:
- 把根包脚本模板改成官方 CLI 方案
- 显式区分“单独 bumpp”和“串行根发版”两个入口
建议模板:
{
"release": "pnpm run release:sub && pnpm run release:root && pnpm run git:push",
"release:sub": "relizy-runner release --no-publish --no-provider-release --no-push --yes",
"release:root": "bumpp --no-push --yes --release patch",
"release:bumpp": "bumpp --push",
"changelog:root": "changelogen --output CHANGELOG.md",
"git:push": "git push --follow-tags"
}验收标准:
- 文档中不再把
release:root写成bumpp --yes --release patch - 文档中明确新增
release:bumpp - 文档中不出现
BUMPP_PUSH
二、升级主技能文档
3. SKILL.md
必须同步修改以下位置:
- “设计理念”
- “根包 scripts 模板”
- “核心决策(速查)”
- “验证命令基线”
- 任意提到
push: false为固定策略的段落
必须新增的认知说明:
- 根包存在两种合法入口:
- 串行入口:
release:root - 单独入口:
release:bumpp
- 串行入口:
bump.config.ts不做 push 动态决策bumpp的推送策略必须使用官方--push/--no-push- 若工作流未触发,应先检查远程 tag 是否存在
建议将技能版本从 2.0.0 升到:
2.1.0
这是一次模板行为层面的增量优化,不属于完全重写,但已经改变了技能输出的推荐基线。
三、升级 reference 文档
4. references/release-workflow-architecture.md
补充说明:
- 为什么
release:root必须--no-push - 为什么
release:bumpp必须--push - 为什么
push不能写死在bump.config.ts
5. references/verification-matrix.md
补充以下验证内容:
pnpm exec bumpp --help
pnpm exec bumpp --dry-run --release patch
git ls-remote --tags origin "v0.0.1"并明确分成两类验收:
- 配置正确性验收
- 远程 tag 触发链路验收
6. 新增一份排障参考文档
建议新增:
references/bumpp-push-and-remote-tag-troubleshooting.md
内容应覆盖:
- 本地 tag 存在但远程 tag 不存在的症状
- GitHub Actions 未触发时的排查顺序
release.yaml识别失败 与 “根本没有推送 tag” 的区别- 典型命令与预期输出
如果不想新增文件,也至少应把这些内容并入:
references/verification-matrix.md- 或
references/rollback-and-risks.md
非目标
本轮技能升级不建议顺手引入以下内容:
- 不要再发明
BUMPP_PUSH之类的项目私有环境变量协议 - 不要把
bump.config.ts改造成读取npm_lifecycle_event的“智能配置” - 不要把
release.yaml的 root tag 识别问题与“远程 tag 缺失”混为一谈 - 不要回退到
push: false固定策略 - 不要为了这个问题重新引入本地 runner 或额外 shell 包装层
推荐实施顺序
- 修改
templates/bump.config.ts - 修改
templates/package-scripts.md - 修改
SKILL.md中所有关于根包 push 策略的描述 - 修改
references/release-workflow-architecture.md - 修改
references/verification-matrix.md - 视需要新增
references/bumpp-push-and-remote-tag-troubleshooting.md - 用一个最小示例 monorepo 手工演练一次:
- 串行模式
- 单独
release:bumpp模式
- 回填技能版本号和变更摘要
验收标准
完成后,应满足以下条件:
文档与模板验收
- 全技能目录中不再把
push: false写成默认生效配置 - 全技能目录中不再出现
BUMPP_PUSH package-scripts模板明确包含release:bumpprelease:root明确使用--no-pushrelease:bumpp明确使用--push
行为验收
使用技能模板落地一个测试仓库后:
- 运行串行主链路:
pnpm run release应表现为:
release:sub不推送release:root不推送git:push统一推送 tags
- 单独运行:
pnpm run release:bumpp应表现为:
- 本地产生 commit/tag
- tag 被直接推送到远程
- 若使用预发布版本(例如
v0.11.5-beta.1),在远程 tag 存在时,release.yaml应能被正常触发
可直接交给下一个 AI 的执行口令
下面这段可以直接发给负责修改技能仓库的独立 AI:
请升级
D:\code\ruan-cat\monorepo\ai-plugins\dev-skills\skills\init-release-base-relizy-and-bumpp技能。
目标是把根包bumpp的 push 策略从配置文件固定值,升级为官方 CLI 参数控制。
具体要求:
templates/bump.config.ts中删除生效中的push: false,改为注释说明:bump.config.ts可能单独使用,也可能被串行命令复用,因此 push 必须通过--push / --no-push在命令行中控制。templates/package-scripts.md中将根包脚本改为:release:root = bumpp --no-push --yes --release patch,release:bumpp = bumpp --push。SKILL.md中所有关于根包 push 策略、scripts 模板、验证命令、核心决策的文字,全部同步到上述新口径。references/release-workflow-architecture.md和references/verification-matrix.md增加“远程 tag 缺失会导致工作流未触发”的排障说明。- 全目录内不得引入
BUMPP_PUSH等自定义环境变量协议。- 将技能版本从
2.0.0升到2.1.0。- 完成后输出修改文件清单、关键 diff 摘要、以及一份最小验收清单。
结论
这次在 11comm 的实践,已经证明原技能的“push: false 固定模板”存在边界问题。
下一步应该把这次经验回灌到全局技能中,形成统一、官方、可复用的 bumpp push 策略基线,避免后续仓库重复踩坑。