Skip to content

Release & Changeset

概述

Walnut Admin 使用 Changesets 管理 monorepo 的多包版本号,配合 git-cliff 生成 CHANGELOG。版本策略是 5 个共享包 fixed 组(同步版本) + 3 个 app 独立版本

我们做了什么

1. Changesets 三段式工作流

开发时:pnpm changeset:auto  →  生成 .changeset/*.md 文件
版本时:pnpm changeset version  →  消费 changeset,更新 package.json 版本号
发布时:pnpm changeset publish  →  (内部项目,暂不发布到 npm)

2. Fixed Group(共享包同步版本)

.changeset/config.json

jsonc
{
  "fixed": [[
    "@walnut/utils",
    "@walnut/contract",
    "@walnut/client",
    "@walnut/axios",
    "@walnut/eslint-config"
  ]],
  "changelog": false,         // 不用 Changesets 自带的 changelog(用 git-cliff)
  "commit": false,            // 不让 CLI 自动 commit
  "access": "public",
  "baseBranch": "main",
  "updateInternalDependencies": "patch"  // 依赖升级 → 消费者至少 patch bump
}

5 个共享包永远同版本号。为什么?

  • @walnut/contract 的类型变更会影响所有消费者
  • @walnut/utils 被前后端同时依赖
  • 它们是紧密耦合的一组——"一荣俱荣,一损俱损"

3 个 app 独立版本。为什么?

  • apps/admin UI 变更不关 apps/server 的事
  • apps/docs 文档更新不影响 apps/server
  • 各自有独立的 release cycle

3. 自动 changeset 生成

scripts/version/auto-changeset.ts 从 conventional commits 自动生成 changeset 文件:

bash
pnpm changeset:auto   # 扫描自上次 tag 以来的 commits → 生成 .changeset/*.md

开发者不需要手动运行 pnpm changeset——只需保持 conventional commit 格式,脚本自动处理。

4. 发布流程

scripts/version/release.ts 编排完整发布流程:

auto-changeset → changeset version → git-cliff changelog → git tag → git push
bash
pnpm release   # 仅在 main 分支执行

没做什么 / 为什么

不用 Changesets 自带的 changelog

Changesets 的默认 changelog 格式较简单(仅显示 changeset 摘要 + commit hash)。git-cliff 可以按 conventional commit 类型分组、带 emoji、显示 scope 和 PR 链接——格式更丰富。两者各司其职:Changesets 管版本号,git-cliff 管 changelog 格式。

不用 semantic-release

semantic-release 从 commit message 自动推断 semver bump 类型(fix: → patch, feat: → minor)。Changesets 让开发者手动确认 bump 类型——更可控,避免一条 commit message 的格式错误触发错误的版本号。

不发布到 npm

所有包 private: true 移除后设为 "access": "public"——但这代表代码公开可见(public repo),不代表实际发布到 npm。当前是内部 monorepo,通过 workspace:* 消费。


关键文件

文件作用
.changeset/config.jsonChangeset 配置:fixed group、access、changelog
scripts/version/auto-changeset.ts从 conventional commits 自动生成 changeset
scripts/version/release.ts发布流水线编排

相关 ADR

基于 MIT 许可发布