|
| 1 | +# 开发指引 |
| 2 | + |
| 3 | +------ |
| 4 | + |
| 5 | +## 发版规约 |
| 6 | + |
| 7 | +1. 拉取 master 最新代码: `git pull` |
| 8 | +2. 从 master 检出 `[版本分支]`: `git checkout -b v${x.y.z}` |
| 9 | +3. 批量修改父子所有 `pom.xml` 中的 `<version>`: 版本号 `+1`, 末尾增加 `-SNAPSHOT` 快照标识 |
| 10 | +4. push `[版本分支]` 到 Github |
| 11 | +5. 从 `[版本分支]` 检出 `[特性分支]`: `git checkout -b feature-${xxx}` |
| 12 | +6. 在 `[特性分支]` 修改代码(可以随时提交到 Github) |
| 13 | +7. 每完成一个需求修改后,在 Github 合并 `[特性分支]` 到 `[版本分支]`,此时会触发流水线自动 deploy `SNAPSHOT` 版本到 Maven 中央仓库 |
| 14 | +8. 重复步骤 4 ~ 5, 直到当前版本的需求开发完成 |
| 15 | +9. **宣布封版**,在 Github [删除](../../branches)所有 `[特性分支]` |
| 16 | +10. 在本地切换到 `[版本分支]`: `git checkout v${x.y.z}` |
| 17 | +11. 拉取 `[版本分支]` 最新代码: `git pull` |
| 18 | +12. 批量修改父子所有 `pom.xml` 中的 `<version>`: 移除末尾的 `-SNAPSHOT` 快照标识 |
| 19 | +13. 提交 `[版本分支]` 到 Github,此时会触发流水线自动生成 Javadoc |
| 20 | +14. 等待 Javadoc 发布完成(Github Actions 会推送变更到 `[版本分支]`) |
| 21 | +15. 在 Github 合并 `[版本分支]` 到 master |
| 22 | +16. 在 Github 对 `[版本分支]` 发起 `Releases` 动作(会强制新建 `Tag`,名称和 `[版本分支]` 一致),此时会触发流水线自动 deploy `Release` 版本到 Maven 中央仓库 |
| 23 | +17. 重复步骤 1, 进入下一轮迭代 |
| 24 | + |
| 25 | +> 批量修改版本号,可以借助 [`bin/set_version.sh[ps1]`](bin/set_version.sh) 脚本 |
| 26 | +
|
| 27 | + |
| 28 | +<details> |
| 29 | +<summary><b>分支示意图</b></summary> |
| 30 | +<br/> |
| 31 | + |
| 32 | +```mermaid |
| 33 | +graph LR |
| 34 | + master((master)) -- checkout --> version[vX.Y.Z<br/>版本分支] |
| 35 | + version -- checkout --> featureA(feature-AAA<br/>特性分支 A) |
| 36 | + version -- checkout --> featureN(feature-...<br/>特性分支 N) |
| 37 | + featureA -- merge:SNAPSHOT --> version |
| 38 | + featureN -- merge:SNAPSHOT --> version |
| 39 | + version -- merge:Javadoc --> master |
| 40 | + version -- archive:RELEASE --> tag((tag<br/>X.Y.Z)) |
| 41 | +``` |
| 42 | + |
| 43 | +</details> |
| 44 | + |
| 45 | +<details> |
| 46 | +<summary><b>发版流程示意图</b></summary> |
| 47 | +<br/> |
| 48 | + |
| 49 | +```mermaid |
| 50 | +sequenceDiagram |
| 51 | + participant Local |
| 52 | + participant Github |
| 53 | + participant Github Action |
| 54 | + participant Sonatype |
| 55 | + participant Github Pages |
| 56 | + Github->>Local: 拉取 master 最新代码<br/>git pull |
| 57 | + Local->>Local: 检出 [版本分支]<br/>git checkout -b v${x.y.z} |
| 58 | + Local->>Local: 批量修改父子所有 pom.xml 的版本 |
| 59 | + Note left of Local: 版本号 +1<br/>末尾增加 -SNAPSHOT |
| 60 | + Local->>Github: 提交 [版本分支]<br/>git push |
| 61 | + Local->>Local: 检出 [特性分支]<br/>git checkout -b feature-${xxx} |
| 62 | + loop 当前版本需求开发 |
| 63 | + Local->>Local: 修改代码 |
| 64 | + Local->>Github: 提交修改<br/>git push |
| 65 | + Github->>Github: 合并 [特性分支] 到 [版本分支] |
| 66 | + Github->>Github Action: 触发流水线 |
| 67 | + Github Action->>Sonatype: 发布 SNAPSHOT 版本 |
| 68 | + end |
| 69 | + Note left of Github: 封版 |
| 70 | + Github->>Github: 删除所有 [特性分支] |
| 71 | + Local->>Local: 切换到 [版本分支]<br/>git checkout v${x.y.z} |
| 72 | + Local->>Local: 拉取 [版本分支] 最新代码<br/>git pull |
| 73 | + Local->>Local: 批量修改父子所有 pom.xml 的版本 |
| 74 | + Note left of Local: 移除末尾的 -SNAPSHOT |
| 75 | + Local->>Github: 提交 [版本分支]<br/>git push |
| 76 | + loop 等待 Javadoc 发布 |
| 77 | + Github->>Github Action: 触发流水线 |
| 78 | + Github Action->>Github Pages: 发布 Javadoc |
| 79 | + end |
| 80 | + Github->>Github: 合并 [版本分支] 到 master |
| 81 | + Github->>Github: 对 [版本分支] 发起 Releases |
| 82 | + Note left of Github: 强制新建 Tag<br/>名称和 [版本分支] 一致 |
| 83 | + Github->>Github Action: 触发流水线 |
| 84 | + Github Action->>Sonatype: 发布 Release 版本 |
| 85 | +``` |
| 86 | + |
| 87 | +</details> |
| 88 | + |
| 89 | + |
| 90 | +## 发布位置 |
| 91 | + |
| 92 | +在 [pom.xml](./pom.xml) 中 `<distributionManagement>` 指定版本的发布目标位置是 [sonatype nexus](https://s01.oss.sonatype.org/)。 |
| 93 | + |
| 94 | +检索关键字 `exp-blog` 可检索到本工程的[所有依赖构件](https://s01.oss.sonatype.org/#nexus-search;quick~exp-blog): |
| 95 | + |
| 96 | + |
| 97 | + |
| 98 | +> 用在 [sonatype jira](https://issues.sonatype.org) 注册的账号即可登录 [sonatype nexus](https://s01.oss.sonatype.org/)。 |
| 99 | +
|
| 100 | + |
0 commit comments