# Bump 功能 - 发布新版本

## 用途

发布 Combo SDK for Unity 新版本，执行流程：
1. 确定目标版本号
2. 调用 `references/version.md` 更新版本号
3. 调用 `references/changelog.md` 生成并更新 CHANGELOG
4. 执行 git 提交（非 main 分支时）
5. 通过 `glab` 创建 Merge Request

## 输入

- `TARGET_VERSION`（可选）：目标版本号（格式：x.x.x）
- `UPDATE_CONTENT`（可选）：更新内容列表

## 执行步骤

### 步骤零：验证输入

1. **验证版本号格式**（如果用户提供）：
   - 检查用户提供的版本号是否符合 `x.x.x` 格式
   - 如果格式不正确，提示用户：`"错误：版本号格式不正确，请使用 x.x.x 格式（例如：2.19.0）"`
   - 终止执行

2. **检查 Version.cs 文件是否存在**：
   - 检查 `Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs` 文件
   - 如果文件不存在，提示用户并终止执行

### 步骤一：确定版本号

1. **检查用户是否提供了目标版本号**（格式：x.x.x）
   - 如果用户已提供版本号：直接使用
   - 如果用户未提供版本号：
     1. 读取当前 `Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs` 中的 `SDKVersion`
     2. 若版本号包含 `-dev` 后缀，则自动移除该后缀
     3. 使用移除 `-dev` 后的版本号

2. 将确定的版本号记为 `TARGET_VERSION`

### 步骤二：更新版本号

调用 `references/version.md`，传入 `TARGET_VERSION`

### 步骤三：更新 CHANGELOG

调用 `references/changelog.md`，传入：
- `VERSION`：`TARGET_VERSION`
- `UPDATE_CONTENT`：用户提供的更新内容（可选，如果不传则由 changelog.md 自动从 git log 获取）

**注意**：`changelog.md` 的 **步骤五** 已包含详细的 CHANGELOG 编辑说明，它会：
1. 读取当前 CHANGELOG.md 的完整第一个版本块
2. 将新版本条目插入到顶部，同时完整保留旧版本内容
3. 编辑完成后执行验证步骤，确认没有重复的分类标题

### 步骤四：Git 提交

进行 git 提交，执行以下步骤：

1. **获取当前分支名称**
   - 执行命令：`git branch --show-current`
   - 获取当前分支名称，记为 `CURRENT_BRANCH`
   - **如果命令失败**，提示用户：`"错误：无法获取当前分支名称，请检查 git 仓库状态。"` 并终止执行

2. **判断分支并执行相应操作**
   - **如果 `CURRENT_BRANCH` 是 `main` 分支，或是 `release-` 开头的分支（如 `release-2.19`）**：
     1. 执行 `git checkout -b bump-TARGET_VERSION` 创建新分支
        - **如果创建失败**，提示用户：`"错误：无法创建分支 bump-TARGET_VERSION，请检查该分支是否已存在。"` 并终止执行
     2. 执行 `git add Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs`
     3. 执行 `git add Combo/Plugins/Windows/SeayooAccount/Runtime/Constants.cs`
     4. 执行 `git add Combo/Runtime/Version.cs`
     5. 执行 `git add package.json`
     6. 执行 `git add CHANGELOG.md`
     7. 执行 `git commit -m "Bump version to TARGET_VERSION"`
        - **如果提交失败**，提示用户：`"错误：git commit 失败，请检查是否有未暂存的更改。"` 并终止执行
     8. 执行 `git push`
        - **如果推送失败**，提示用户：`"错误：git push 失败，请检查网络连接和远程仓库权限。"` 并终止执行
   - **其他分支**：
     1. 执行 `git add Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs`
     2. 执行 `git add Combo/Plugins/Windows/SeayooAccount/Runtime/Constants.cs`
     3. 执行 `git add Combo/Runtime/Version.cs`
     4. 执行 `git add package.json`
     5. 执行 `git add CHANGELOG.md`
     6. 执行 `git commit -m "Bump version to TARGET_VERSION"`
        - **如果提交失败**，提示用户：`"错误：git commit 失败，请检查是否有未暂存的更改。"` 并终止执行
     7. 执行 `git push`
        - **如果推送失败**，提示用户：`"错误：git push 失败，请检查网络连接和远程仓库权限。"` 并终止执行

### 步骤五：创建 Merge Request

1. **确定目标分支**
   - 解析 `TARGET_VERSION` 的补丁版本号（`x.y.z` 中的 `z`）
   - **如果 `z` 等于 `0`**（如 `2.19.0`）：`MR_TARGET_BRANCH` = `main`
   - **如果 `z` 不等于 `0`**（如 `2.19.1`）：`MR_TARGET_BRANCH` = `release-x.y`（如 `release-2.19`）

2. **创建 Merge Request**
   - 执行 `glab mr create --title "Bump version to TARGET_VERSION" --target-branch MR_TARGET_BRANCH --assignee @me --yes`
   - **如果创建失败**，提示用户：`"错误：创建 MR 失败，请检查 glab 配置和网络连接。"`（git 操作已完成，不受影响）
   - 创建成功后，输出 MR 链接

## 执行要求

1. 严格按照步骤顺序执行
2. 如果用户未提供更新内容，直接调用 `changelog.md`，它内部会自动从 git log 获取
3. 确保 version 和 changelog 都成功执行
4. **Git 操作规则**：
   - 在 `main` 分支或 `release-` 开头的分支上时，先创建 `bump-TARGET_VERSION` 分支，然后在新分支上执行 git add/commit/push
   - 在其他分支上直接执行 git add/commit/push
   - 执行 git 操作前必须先确认当前分支名称
5. **MR 创建规则**：
   - git push 成功后自动创建 MR
   - MR 标题复用 commit message
   - MR 自动 assign 给当前用户
   - 目标分支根据版本号补丁位决定：`z=0` → `main`，`z≠0` → `release-x.y`

## 示例

### 示例 1（用户提供版本号和更新内容）

输入：`TARGET_VERSION=2.19.0`, `UPDATE_CONTENT=["新增微信登录", "优化登录 UI", "修复 iPad 崩溃"]`

执行流程：
1. 确定版本号：2.19.0
2. 调用 `version.md` 更新版本号为 2.19.0
3. 调用 `changelog.md` 生成 CHANGELOG
4. 非 main 分支时执行 git 提交
5. 创建 MR → `main`（z=0）

### 示例 2（用户未提供版本号）

假设当前 `Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs` 中的 `SDKVersion` 是 "2.19.0-dev"

执行流程：
1. 读取当前版本号 "2.19.0-dev"，移除 `-dev` 得到 "2.19.0"
2. 调用 `version.md` 更新版本号为 2.19.0
3. 调用 `changelog.md` 生成 CHANGELOG
4. 执行 git 提交
5. 创建 MR → `main`（z=0）

### 示例 3（用户提供版本号但未提供更新内容）

输入：`TARGET_VERSION=2.19.0`

执行流程：
1. 确定版本号：2.19.0
2. 调用 `version.md` 更新版本号为 2.19.0
3. 调用 `changelog.md`，它会自动从 git log 中提取更新内容（过滤掉 demo/ai/ci 相关的 commit）
4. 执行 git 提交
5. 创建 MR → `main`（z=0）

### 示例 4（main 分支，自动创建分支）

假设当前在 `main` 分支，发布 2.19.0

执行流程：
1-3. 更新版本号和 CHANGELOG
4. 执行 `git branch --show-current` 得到 `main`
5. 执行 `git checkout -b bump-2.19.0` 创建新分支
6. 在新分支执行 git 提交
7. 创建 MR：`bump-2.19.0` → `main`（z=0）

### 示例 5（补丁版本，MR 目标为 release 分支）

假设当前在 `hotfix-2.19.1` 分支，发布 2.19.1

执行流程：
1-3. 更新版本号和 CHANGELOG
4. 执行 git 提交
5. 创建 MR：`hotfix-2.19.1` → `release-2.19`（z=1）
