发布方法
本文档面向项目维护者,介绍如何发布 xiaozhi-client 项目到 npm。
发布权限要求:
你需要拥有项目仓库的维护权限,并且配置了正确的 NPM_TOKEN 密钥。
版本号规范
项目采用语义化版本号(Semantic Versioning),支持以下版本类型:
| 版本类型 | 格式示例 | 说明 |
|---|---|---|
| 正式版 | 1.0.0 | 稳定的生产版本 |
| Beta版 | 1.0.0-beta.0 | 测试版本,可能包含未完成的功能 |
| RC版 | 1.0.0-rc.0 | 候选发布版本,接近正式版 |
版本号规则:
- 正式版必须在
main分支发布 - Beta/RC 版本可以在任意分支发布测试
- 所有包使用统一版本号
发布的包
项目采用多包发布策略,每次发布会同时发布以下包:
xiaozhi-client- 主包,CLI 工具@xiaozhi-client/cli- CLI 核心库@xiaozhi-client/config- 配置管理库@xiaozhi-client/shared-types- 共享类型定义
所有包使用相同的版本号,由 nx release 自动管理。
发布步骤
准备工作
- 确保当前代码已通过所有测试
- 检查
CHANGELOG.md或docs/changelog.mdx是否需要更新 - 确认要发布的版本号
触发 GitHub Actions
- 进入项目的 GitHub Actions 页面
- 选择
NPM 发布工作流 - 点击
Run workflow按钮 - 选择要发布的分支(正式版必须选择
main分支)
填写发布参数
在工作流触发页面填写以下信息:
- 目标版本号: 如
1.0.0、1.0.0-beta.0、1.0.0-rc.0 - 预演模式: 首次发布建议勾选,进行预演测试
正式版
# 正式版示例
目标版本号: 1.9.5
预演模式: false (首次建议先 true)执行发布
点击 Run workflow 开始发布流程,系统会自动:
- 验证版本号格式
- 检查分支权限
- 运行代码质量检查
- 同步所有包的版本号
- 构建项目
- 发布到 npm
- 创建 Git 标签
- 创建 GitHub Release
验证发布结果
发布完成后,验证以下内容:
- 检查 GitHub Actions 执行状态
- 在 npm 确认包版本
- 检查 GitHub Releases 是否创建
- 验证子包是否正确发布:
预演模式
预演模式(Dry Run): 预演模式会执行完整的发布流程,但不会实际发布到 npm 或创建 Git 标签。 强烈建议在正式发布前先运行一次预演模式。
预演模式下,系统会:
- ✅ 验证版本号格式
- ✅ 运行代码质量检查
- ✅ 同步版本号到所有包
- ✅ 构建项目
- ❌ 不会发布到 npm
- ❌ 不会创建 Git 标签
- ❌ 不会创建 GitHub Release
本地测试
在正式发布前,你可以在本地进行测试:
测试 nx release
# 预演模式:查看将要发布的版本(不实际修改)
pnpm release:dry
# 或者直接使用 nx 命令
nx release version --dry-run测试本地构建
# 构建所有包
pnpm run build
# 检查构建产物
ls -la dist/回滚处理
如果发布发现问题,可以执行以下回滚操作:
npm 包回滚
# 标记包为已废弃
npm deprecate xiaozhi-client@VERSION "This version has issues"
npm deprecate @xiaozhi-client/cli@VERSION "This version has issues"
npm deprecate @xiaozhi-client/config@VERSION "This version has issues"
npm deprecate @xiaozhi-client/shared-types@VERSION "This version has issues"Git 标签回滚
# 删除本地标签
git tag -d vVERSION
# 删除远程标签
git push origin :refs/tags/vVERSION恢复版本号
# 恢复 package.json 版本到上一个提交
git checkout HEAD~1 -- package.json packages/*/package.json
# 或者使用 nx release 重新指定正确的版本
nx release version --version 1.9.4常见问题
⚠️
正式版必须在 main 分支发布 如果你尝试在其他分支发布正式版,工作流会报错。请先合并到 main 分支再发布。
⚠️
版本号格式必须正确
版本号必须符合语义化版本规范:主版本.次版本.修订版本(如 1.0.0)
预发布版本格式:主版本.次版本.修订版本-预发布标识.预发布版本(如 1.0.0-beta.0)
ℹ️
版本同步 nx release 会自动同步所有包的版本号,你只需要在 GitHub Actions 中填写一次版本号即可。所有包将使用相同的版本号(固定版本模式)。
Last updated on