Next 发布频道
next 分支是一个长期存在的预发布频道,用于在包被提升到稳定发布流程之前发布它们。从该分支发布的版本会以 next dist-tag 向 npm 发布 prerelease 版本,因此用户可以显式安装它们,而不会移动稳定的 latest 标签。
分支设置
next 分支有意携带 .changeset/pre.json:
{
"mode": "pre",
"tag": "next"
}在 next 上保持此文件处于 prerelease 模式。tag 必须保持为 next,以便 Changesets 使用 npm 的 next dist-tag 发布 prerelease 包。
不要将 master 置于 next prerelease 模式。当前的 master 不应包含 .changeset/pre.json;从 master 进行的稳定发布继续正常发布,并且只通过常规的稳定发布流程移动 latest。
日常操作
根据需要把稳定分支的更新带入 next,可以合并 master,也可以 cherry-pick 特定提交:
git switch next
git fetch origin
git merge origin/master如果合并在 .changeset/pre.json 上发生冲突,通过保留 next 分支的 prerelease 文件("mode": "pre" 和 "tag": "next")来解决冲突。
功能工作也可以直接落在 next 上,以便在提升前进行 prerelease 验证。面向用户的包变更需包含常规的 Changesets;发布工作流会将这些 changesets 转换为 next 上生成的 prerelease 版本提交。
将工作提升回 master
不要将 next 整体合并回 master。提升应只复制已准备好进入稳定发布的人工编写的功能工作:
git switch master
git fetch origin
git cherry-pick <feature-commit-sha>Cherry-pick 描述该功能的源码、文档、测试和常规 changeset 提交。绝不要将生成的 Version Packages (next) 提交从 next cherry-pick 到 master。
提升时,如果所选提交中包含发布生成的文件,请将其从 cherry-pick 中排除:
.changeset/pre.json- 包的
CHANGELOG.md文件 - 仅版本号变更的
package.json修改
这些文件会在提升的 changesets 落到 master 后由稳定发布工作流单独生成。
如果一次 cherry-pick 同时包含功能代码和生成的发布变更,请使用不提交的 cherry-pick,并在提交前重置生成的发布文件。直接恢复 prerelease 元数据和生成的更新日志,然后逐块检查包清单,确保仅版本号的变更不会移动到 master:
git cherry-pick --no-commit <feature-commit-sha>
git restore --staged --worktree \
.changeset/pre.json \
'packages/*/CHANGELOG.md' \
'packages/plugins/*/CHANGELOG.md'
git restore --source=HEAD --staged --worktree -p \
-- 'packages/*/package.json' 'packages/plugins/*/package.json'
git diff -- packages
git commit在交互式 git restore -p 期间,丢弃由 next 发布生成的仅版本号的包 package.json 变更。仅当依赖、脚本、导出或元数据变更属于被提升的功能时才保留它们。
发布工作流与 Chrome 扩展
发布工作流同时在 master 和 next 上运行。在 next 上,Changesets 使用 next dist-tag 将 prerelease 包发布到 npm。
Chrome 扩展的发布也是按分支区分的:
master发布正式版扩展商店条目。其扩展 ID 硬编码在.github/workflows/release.yml中,并使用现有的CWS_CLIENT_ID、CWS_CLIENT_SECRET和CWS_REFRESH_TOKENsecrets。next使用NEXT_CWS_EXTENSION_ID、NEXT_CWS_CLIENT_ID、NEXT_CWS_CLIENT_SECRET和NEXT_CWS_REFRESH_TOKEN发布 prerelease 扩展商店条目。
请保持这些列表与凭据相互独立。对 next 列表的更改不应影响 master 使用的正式版 Chrome Web Store 列表。