Skip to content

Next 发布频道

next 分支是一个长期存在的预发布频道,用于在包被提升到稳定发布流程之前发布它们。从该分支发布的版本会以 next dist-tag 向 npm 发布 prerelease 版本,因此用户可以显式安装它们,而不会移动稳定的 latest 标签。

分支设置

next 分支有意携带 .changeset/pre.json

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 特定提交:

sh
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。提升应只复制已准备好进入稳定发布的人工编写的功能工作:

sh
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

sh
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 扩展

发布工作流同时在 masternext 上运行。在 next 上,Changesets 使用 next dist-tag 将 prerelease 包发布到 npm。

Chrome 扩展的发布也是按分支区分的:

  • master 发布正式版扩展商店条目。其扩展 ID 硬编码在 .github/workflows/release.yml 中,并使用现有的 CWS_CLIENT_IDCWS_CLIENT_SECRETCWS_REFRESH_TOKEN secrets。
  • next 使用 NEXT_CWS_EXTENSION_IDNEXT_CWS_CLIENT_IDNEXT_CWS_CLIENT_SECRETNEXT_CWS_REFRESH_TOKEN 发布 prerelease 扩展商店条目。

请保持这些列表与凭据相互独立。对 next 列表的更改不应影响 master 使用的正式版 Chrome Web Store 列表。