# Prepare 功能 - 准备下一个开发版本

## 用途

准备 Combo SDK for Unity 下一个开发版本，执行流程：
1. 检查当前版本是否已是 `-dev`（是则拒绝执行）
2. 计算新版本号（minor + 1，添加 `-dev` 后缀）
3. 调用 `references/version.md` 更新版本号
4. 执行 git 提交（非 main 分支时）

**注意**：本功能不生成 CHANGELOG，仅更新版本号。

## 输入

- `TARGET_VERSION`（可选）：用户指定的目标版本号

## 执行步骤

### 步骤零：验证输入和文件

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

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

### 步骤一：检查当前版本状态

1. 读取当前 `Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs` 中的 `SDKVersion`
2. **检查当前版本是否已带有 `-dev` 后缀**：
   - **如果当前版本已包含 `-dev` 后缀**：
     - 提示用户："当前版本已经是开发版本（x.x.x-dev），无需再次 Prepare。"
     - 建议用户：
       - 如果要发布正式版，请使用 `bump` 命令
       - 如果要手动指定新版本号，请明确提供版本号
     - **结束执行，不继续后续步骤**
   - **如果当前版本不包含 `-dev` 后缀**：继续执行步骤二

### 步骤二：确定新版本号

1. **检查用户是否提供了目标版本号**
   - 如果用户已指定版本号：使用该版本号，并自动添加 `-dev` 后缀
     - 如果用户输入的不是完整的三段式版本号（如 `2.20`），自动补全为 `x.y.0` 格式（如 `2.20.0`）
     - 然后添加 `-dev` 后缀，例如：`2.20` → `2.20.0-dev`
   - 如果用户未指定版本号：
     1. 读取当前 `Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs` 中的 `SDKVersion`
     2. 解析当前版本号 `x.y.z`
     3. 计算新版本号为 `x.(y+1).0-dev`
     4. 例如：当前版本是 `2.18.0`，则新版本号为 `2.19.0-dev`

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

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

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

### 步骤四：Git 提交

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

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

2. **处理版本号用于提交信息**
   - 从 `NEW_VERSION` 中移除 `-dev` 后缀，得到纯净版本号
   - 确保版本号格式为 `x.y.z`（例如：`2.19.0` 而不是 `2.19`）
   - 将处理后的版本号记为 `CLEAN_VERSION`
   - 例如：`2.19.0-dev` → `2.19.0`，`2.19-dev` → `2.19.0`

3. **判断分支并执行相应操作**
   - **如果 `CURRENT_BRANCH` 是 `main` 分支**：
     1. 执行 `git checkout -b prepare-CLEAN_VERSION` 创建新分支
        - **如果创建失败**，提示用户：`"错误：无法创建分支 prepare-CLEAN_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 commit -m "Prepare for next release CLEAN_VERSION"`
        - **如果提交失败**，提示用户：`"错误：git commit 失败，请检查是否有未暂存的更改。"` 并终止执行
     7. 执行 `git push`
        - **如果推送失败**，提示用户：`"错误：git push 失败，请检查网络连接和远程仓库权限。"` 并终止执行
   - **如果 `CURRENT_BRANCH` 是非 `main` 分支**：
     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 commit -m "Prepare for next release CLEAN_VERSION"`
        - **如果提交失败**，提示用户：`"错误：git commit 失败，请检查是否有未暂存的更改。"` 并终止执行
     6. 执行 `git push`
        - **如果推送失败**，提示用户：`"错误：git push 失败，请检查网络连接和远程仓库权限。"` 并终止执行

## 执行要求

1. 严格按照步骤顺序执行
2. 仅更新版本号，不生成 CHANGELOG
3. 新版本号必须带有 `-dev` 后缀
4. **Git 操作规则**：
   - 在 main 分支上时，先创建 `prepare-CLEAN_VERSION` 分支，然后在新分支上执行 git add/commit/push
   - 在非 main 分支上直接执行 git add/commit/push
   - 执行 git 操作前必须先确认当前分支名称

## 示例

### 示例 1（用户未指定版本号）

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

执行流程：
1. 读取当前版本号 "2.18.0"（不包含 -dev）
2. 计算新版本号：2.19.0-dev
3. 调用 `version.md` 更新版本号为 2.19.0-dev
4. 非 main 分支时执行 git 提交

### 示例 2（当前版本已是 -dev，提示用户）

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

执行流程：
1. 读取当前版本号 "2.19.0-dev"（已包含 -dev 后缀）
2. 提示用户："当前版本已经是开发版本（2.19.0-dev），无需再次 Prepare。"
3. **结束执行，不进行任何修改**

### 示例 3（用户指定版本号）

输入：`TARGET_VERSION=2.20.0`

执行流程：
1. 用户指定版本号 2.20.0
2. 自动添加 `-dev` 后缀 → 2.20.0-dev
3. 调用 `version.md` 更新版本号为 2.20.0-dev

### 示例 4（用户指定简写版本号）

输入：`TARGET_VERSION=2.20`

执行流程：
1. 用户指定版本号 2.20
2. 自动补全为 2.20.0，添加 `-dev` 后缀 → 2.20.0-dev
3. 调用 `version.md` 更新版本号为 2.20.0-dev

### 示例 5（非 main 分支，执行 git 提交）

假设当前在 `feature/login` 分支，当前版本号是 "2.18.0"

执行流程：
1-2. 计算新版本号 2.19.0-dev，调用 `version.md` 更新
3. 执行 `git branch --show-current` 得到 `feature/login`
4. 非 main 分支，执行：
   - `git add Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs`
   - `git add Combo/Plugins/Windows/SeayooAccount/Runtime/Constants.cs`
   - `git add Combo/Runtime/Version.cs`
   - `git add package.json`
   - `git commit -m "Prepare for next release 2.19.0"`
   - `git push`

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

假设当前在 `main` 分支

执行流程：
1-2. 计算新版本号，调用 `version.md` 更新
3. 执行 `git branch --show-current` 得到 `main`
4. 执行 `git checkout -b prepare-2.19.0` 创建新分支
5. 执行：
   - `git add Combo/Plugins/Windows/ComboSDK/Runtime/Version.cs`
   - `git add Combo/Plugins/Windows/SeayooAccount/Runtime/Constants.cs`
   - `git add Combo/Runtime/Version.cs`
   - `git add package.json`
   - `git commit -m "Prepare for next release 2.19.0"`
   - `git push`
