|
| 1 | +# ✅ 版本发布流程 Checklist |
| 2 | + |
| 3 | +> 本文档用于规范化版本发布流程,确保每次发布都**一致、可审计、可追溯** |
| 4 | +> 当前项目版本管理方案基于: |
| 5 | +> - [`bump2version`](https://github.com/c4urself/bump2version):版本号控制 |
| 6 | +> - 自定义脚本 `bump.py`:自动封装版本更新、changelog 生成、tag 创建、git 提交 |
| 7 | +> - [`git-cliff`](https://github.com/orhun/git-cliff):自动生成 changelog |
| 8 | +> - 版本号遵循 [Semantic Versioning 2.0.0](https://semver.org/lang/zh-CN/) |
| 9 | +
|
| 10 | +--- |
| 11 | + |
| 12 | +## 📦 准备发布 |
| 13 | + |
| 14 | +### ✅ 1. 确保主分支是干净的 |
| 15 | + |
| 16 | +- 分支切换至主分支(如 `main` 或 `master`): |
| 17 | + ```bash |
| 18 | + git checkout main |
| 19 | + git pull origin main |
| 20 | + ``` |
| 21 | +- 所有待发布的功能已合并进主分支 |
| 22 | +- 本地无未提交更改(`git status` 应为空) |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +## 🧰 2. 运行发布脚本 bump.py |
| 27 | + |
| 28 | +使用封装好的脚本自动完成以下内容: |
| 29 | + |
| 30 | +- 更新版本号(修改 `pyproject.toml`、`.bumpversion.cfg`、`core/__init__.py` 等) |
| 31 | +- 同步 `uv.lock` 中的版本元信息 |
| 32 | +- 自动生成 `CHANGELOG.md`(调用 `git-cliff`) |
| 33 | +- 使用规范化格式提交变更 |
| 34 | +- 自动打 Git tag(如 `v1.2.4`) |
| 35 | + |
| 36 | +### 🎯 命令示例: |
| 37 | + |
| 38 | +```bash |
| 39 | +python -m utils.bump patch --commit --tag --changelog |
| 40 | +``` |
| 41 | + |
| 42 | +或使用其他版本级别(major / minor / pre-release): |
| 43 | + |
| 44 | +```bash |
| 45 | +python -m utils.bump minor --commit --tag --changelog |
| 46 | +python -m utils.bump alpha --commit --tag |
| 47 | +``` |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +## 📜 3. 自动生成的内容 |
| 52 | + |
| 53 | +### ✅ 提交信息格式: |
| 54 | + |
| 55 | +``` |
| 56 | +chore(release): 版本更新 v1.2.3 → v1.2.4 |
| 57 | +``` |
| 58 | + |
| 59 | +### ✅ 更新的文件包括: |
| 60 | + |
| 61 | +- `pyproject.toml`:版本号 |
| 62 | +- `core/__init__.py`:`__version__` |
| 63 | +- `.bumpversion.cfg`:current_version |
| 64 | +- `uv.lock`:元信息 version |
| 65 | +- `CHANGELOG.md`:根据 git 提交历史生成(分组) |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +## 🏷️ 4. Git tag 自动生成 |
| 70 | + |
| 71 | +- 生成格式为 `v1.2.4` |
| 72 | +- tag 创建在主分支最新提交上 |
| 73 | +- 可用于 CI/CD 构建与发布流程触发器 |
| 74 | + |
| 75 | +--- |
| 76 | + |
| 77 | +## ☁️ 5. 推送提交与 tag |
| 78 | + |
| 79 | +完成变更后,统一推送代码和 tag: |
| 80 | + |
| 81 | +```bash |
| 82 | +git push origin main --tags |
| 83 | +``` |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +## 🧪 6. 后续验证 |
| 88 | + |
| 89 | +- CI/CD 会监听 tag 推送并触发构建 |
| 90 | +- 可在 Git 平台(如 Gitea、GitHub)中验证: |
| 91 | + - tag 是否存在 |
| 92 | + - changelog 是否正确 |
| 93 | + - changelog 段落是否匹配该版本 |
| 94 | + |
| 95 | +--- |
| 96 | + |
| 97 | +## 🔒 7. 注意事项与最佳实践 |
| 98 | + |
| 99 | +| 项目 | 说明 | |
| 100 | +|---------------------|--------------------------------| |
| 101 | +| tag 必须在主分支上创建 | 避免 tag 指向临时或未发布的提交 | |
| 102 | +| 版本号应与 changelog 对应 | 生成日志前确保 `git log` 包含完整提交 | |
| 103 | +| commit message 遵循规范 | `chore(release): 版本更新 vX → vY` | |
| 104 | +| 每次发布都 bump | 避免重复使用旧版本号 | |
| 105 | +| 将 `uv.lock` 纳入 Git | 保证依赖版本一致,避免构建漂移 | |
| 106 | + |
| 107 | +--- |
| 108 | + |
| 109 | +## ✅ 参考命令速查表 |
| 110 | + |
| 111 | +| 操作 | 命令 | |
| 112 | +|------------------|-----------------------------------------------------------| |
| 113 | +| 增加补丁版本 | `python -m utils.bump patch --commit --tag --changelog` | |
| 114 | +| 增加次版本 | `python -m utils.bump minor --commit --tag --changelog` | |
| 115 | +| 发布正式版(移除 pre 标签) | `python -m utils.bump release --commit --tag --changelog` | |
| 116 | +| 添加预发布标签 | `python -m utils.bump rc --commit --tag` | |
| 117 | +| 仅查看当前版本 | `python -m utils.bump info` | |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## ✅ 推荐工具版本依赖 |
| 122 | + |
| 123 | +| 工具 | 推荐安装方式 | |
| 124 | +|----------------|--------------------------------------------| |
| 125 | +| `bump2version` | `uv add bump2version` | |
| 126 | +| `git-cliff` | 下载二进制或使用 `cargo install git-cliff` | |
| 127 | +| `uv` | 用于依赖管理与 lock 更新 | |
| 128 | +| `tomli` | Python 解析 pyproject.toml(Python < 3.11 必装) | |
0 commit comments