跳转到内容

Changesets

pubm 将 changeset 作为“下一次应该发布什么”的持久记录。它不会根据提交信息或分支名推断版本,而是读取 .pubm/changesets/ 中已提交的文件,并将它们转换为版本变更和 changelog 条目。

  • 每个 pull request 中都能保留可审阅的发布计划
  • 跨包的版本 bump 计算是确定性的
  • changelog 内容在发布日前就能写好,而不是发布后补写

待处理的 changeset 位于:

.pubm/changesets/

运行交互式 setup 向导来初始化该目录:

Terminal window
pubm init

在 setup 过程中,pubm init 会询问是否启用 changesets 工作流。选择”是”会创建 .pubm/changesets/ 目录,生成 .github/workflows/changeset-check.yml 用于 PR 强制检查,并更新 .gitignore 以跟踪 changeset 文件,同时忽略其他 .pubm/ 内容。

Terminal window
pubm changesets add

在 monorepo 中,pubm 还会询问受影响的包,以及每个包应该获得什么 bump 类型。

非交互式用法:

Terminal window
pubm changesets add \
--packages @acme/core,@acme/react \
--bump minor \
--message "Add token-based auth to the public client."
---
"@acme/core": minor
"@acme/react": patch
---
Add token-based auth to the public client.

元数据控制版本计算,正文会成为 changelog 摘要。

在消耗 changeset 之前,先检查它们:

Terminal window
pubm changesets status
pubm changesets status --verbose
pubm changesets version --dry-run

当你用 pubm 运行正常发布流程时,待处理的 changeset 会在版本步骤中被消耗。

该流程会:

  1. 读取待处理的 .pubm/changesets/*.md 文件
  2. 计算最终的包版本
  3. 更新 manifest 版本
  4. 生成 changelog 条目
  5. 删除已消耗的 changeset 文件
  6. 创建发布提交和 tags

如果你只想提前执行版本计算部分,也可以运行:

Terminal window
pubm changesets version

这个命令适合编辑流程或受控流程,但在 pubmpubm --mode ci --phase publish 之前并不是必需的。

如果你想先生成 changelog 文本,而不消耗版本:

Terminal window
pubm changesets changelog --dry-run
pubm changesets changelog --version 1.8.0

versionSources"all"(默认值)时,pubm changesets version 会对没有待处理 changeset 文件的包自动回退到 conventional commits。这使团队可以逐步采用 changeset:有 changeset 的包使用 changeset;没有 changeset 的包则回退到提交历史。

提交类型Bump
featminor
fixpatch
perfpatch

footer 中包含 BREAKING CHANGE,或使用 ! 后缀(如 feat!:),始终产生 major bump。

pubm.config.ts 中覆盖默认映射:

export default defineConfig({
versionSources: "all",
conventionalCommits: {
types: {
feat: "minor",
fix: "patch",
perf: "patch",
docs: "patch",
},
},
});

设置 versionSources: "commits" 可仅使用 conventional commits,完全忽略 changeset 文件。设置 versionSources: "changesets" 可禁用回退,仅使用 changeset 文件。

Terminal window
pubm changesets migrate

这会把 .changeset/ 中的待处理文件迁移到 .pubm/