|
| 1 | +# 发布指南 |
| 2 | + |
| 3 | +本项目使用 [Changesets](https://github.com/changesets/changesets) 进行版本管理和自动发布。 |
| 4 | + |
| 5 | +## 🚀 快速开始 |
| 6 | + |
| 7 | +### 1. 添加变更记录 |
| 8 | + |
| 9 | +完成功能开发或修复后,创建变更记录: |
| 10 | + |
| 11 | +```bash |
| 12 | +pnpm changeset |
| 13 | +``` |
| 14 | + |
| 15 | +按照提示选择: |
| 16 | +- 变更类型(patch/minor/major) |
| 17 | +- 输入变更描述(支持 Markdown) |
| 18 | + |
| 19 | +### 2. 自动发布流程(推荐) |
| 20 | + |
| 21 | +1. **创建 PR**:将你的代码推送到分支,创建 PR 到 main |
| 22 | +2. **合并 PR**:代码审查通过后合并 |
| 23 | +3. **自动创建发布 PR**:Changesets bot 会自动创建 "Version Packages" PR |
| 24 | +4. **合并发布 PR**:合并后自动发布到 npm |
| 25 | + |
| 26 | +## 📦 发布流程详解 |
| 27 | + |
| 28 | +### 自动化流程 |
| 29 | + |
| 30 | +当代码合并到 main 分支后: |
| 31 | + |
| 32 | +1. GitHub Actions 检测到新的 changesets |
| 33 | +2. 自动创建/更新 "Version Packages" PR,包含: |
| 34 | + - 版本号更新 |
| 35 | + - CHANGELOG 生成 |
| 36 | + - changeset 文件清理 |
| 37 | +3. 合并该 PR 触发自动发布 |
| 38 | + |
| 39 | +### 本地发布(备选) |
| 40 | + |
| 41 | +```bash |
| 42 | +# 1. 添加变更记录 |
| 43 | +pnpm changeset |
| 44 | + |
| 45 | +# 2. 更新版本 |
| 46 | +pnpm changeset version |
| 47 | + |
| 48 | +# 3. 构建并发布 |
| 49 | +pnpm release |
| 50 | + |
| 51 | +# 4. 推送代码 |
| 52 | +git push origin main --follow-tags |
| 53 | +``` |
| 54 | + |
| 55 | +## 🏷️ 版本规范 |
| 56 | + |
| 57 | +遵循语义化版本(Semantic Versioning): |
| 58 | + |
| 59 | +| 类型 | 版本变化 | 适用场景 | |
| 60 | +|------|---------|---------| |
| 61 | +| **patch** | x.x.1 | Bug 修复、文档更新、依赖更新 | |
| 62 | +| **minor** | x.1.0 | 新增功能、向后兼容的改进 | |
| 63 | +| **major** | 1.0.0 | 破坏性更改、架构调整、API 变更 | |
| 64 | + |
| 65 | +## 🔧 配置要求 |
| 66 | + |
| 67 | +### GitHub Secrets |
| 68 | + |
| 69 | +在仓库设置中配置: |
| 70 | +- `NPM_TOKEN`: npm 发布令牌 |
| 71 | + 1. 访问 https://www.npmjs.com/settings/[username]/tokens |
| 72 | + 2. 创建 "Automation" 类型的 token |
| 73 | + 3. 添加到 GitHub Secrets |
| 74 | + |
| 75 | +### 权限设置 |
| 76 | + |
| 77 | +确保 GitHub Actions 有以下权限: |
| 78 | +- `contents: write` - 创建发布 |
| 79 | +- `pull-requests: write` - 创建 PR |
| 80 | +- `id-token: write` - npm provenance |
| 81 | + |
| 82 | +## 📋 CI/CD 工作流 |
| 83 | + |
| 84 | +### CI 工作流(ci.yml) |
| 85 | +- **触发**:Push 到 main 或 PR |
| 86 | +- **测试矩阵**: |
| 87 | + - OS: Ubuntu, macOS, Windows |
| 88 | + - Node: 18, 20 |
| 89 | +- **步骤**:依赖安装 → 类型检查 → 构建 → 测试 |
| 90 | + |
| 91 | +### Release 工作流(release.yml) |
| 92 | +- **触发**:Push 到 main |
| 93 | +- **功能**: |
| 94 | + - 检测 changesets |
| 95 | + - 创建版本 PR |
| 96 | + - 自动发布到 npm |
| 97 | + - 支持 npm provenance |
| 98 | + |
| 99 | +## 💡 最佳实践 |
| 100 | + |
| 101 | +1. **每个 PR 一个 changeset**:确保每个功能都有变更记录 |
| 102 | +2. **描述要清晰**:changeset 描述会出现在 CHANGELOG 中 |
| 103 | +3. **选择正确的版本类型**:参考版本规范 |
| 104 | +4. **不要手动修改版本号**:让 changesets 管理版本 |
| 105 | + |
| 106 | +## 🔍 常见问题 |
| 107 | + |
| 108 | +### Q: 忘记添加 changeset 怎么办? |
| 109 | +A: 可以在 PR 中补充,运行 `pnpm changeset` 并提交 |
| 110 | + |
| 111 | +### Q: 如何发布预发布版本? |
| 112 | +A: 使用 `pnpm changeset pre enter <tag>` 进入预发布模式 |
| 113 | + |
| 114 | +### Q: 如何撤销发布? |
| 115 | +A: npm 不支持撤销,只能发布新版本修复 |
| 116 | + |
| 117 | +## 📚 相关链接 |
| 118 | + |
| 119 | +- [Changesets 文档](https://github.com/changesets/changesets) |
| 120 | +- [语义化版本规范](https://semver.org/lang/zh-CN/) |
| 121 | +- [npm 发布文档](https://docs.npmjs.com/cli/v8/commands/npm-publish) |
0 commit comments