UnityアプリのBundle Version更新用 GitHub Actions Workflowの使い方

## 概要
UnityアプリのBundle Version変更をGitHub Actionsから行えるようにするWorkflowの使い方を解説します。
このWorkflowを使うと、手動でバージョン番号を指定して更新したり、自動でバージョンを上げたりできます。

## このActionsの便利なポイント
- 🎯 バージョン更新作業の自動化（人的ミス防止）
- 🔄 自動インクリメント機能搭載
- 🌿 リリースブランチの自動作成
- ✅ バージョン形式の自動チェック
- 🚫 重複ブランチの作成防止

## GitHub上での操作

1. GitHubのリポジトリに移動
2. 「Actions」タブをクリック
3. 左サイドバーから「Manual Bundle Version up」を選択
4. 「Run workflow」（緑のボタン）をクリック
5. バージョン指定方法を選択：
   - 特定のバージョンにしたい場合：`x.x.x`形式で入力（例：`1.2.3`）
   - ビルド番号だけ上げたい場合：空欄のまま実行

## 実装コード

主要な部分を解説します：

```yaml:.github/workflows/manual-bundle-version-up.yml
# versionup.yml
name: Manual Bundle Version up

# Action to manually update the app's Bundle Version
#
# If a version is specified, the Bundle Version will be set to that value
# If no version is specified, the current Bundle Version will be automatically incremented

on:
  workflow_dispatch:
    inputs:
      version:
        description: new app version x.x.x. if empty only the build number will be incremented
        required: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Update version
        id: version
        run: |
          # Function to validate version number format
          validate_version() {
            if [[ ! $1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "Error: Invalid version format. Must be x.x.x"
              exit 1
            fi
          }

          if [ -n "${{ github.event.inputs.version }}" ]; then
            validate_version "${{ github.event.inputs.version }}"
            sed -i "s/bundleVersion: .*/bundleVersion: ${{ github.event.inputs.version }}/" ProjectSettings/ProjectSettings.asset
            echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
          else
            current_version=$(grep "bundleVersion:" ProjectSettings/ProjectSettings.asset | sed 's/.*bundleVersion: //')
            if [ -z "$current_version" ]; then
              echo "Error: Could not find current version"
              exit 1
            fi
            new_version=$(echo $current_version | awk -F. '{$NF = $NF + 1;}1' OFS=.)
            validate_version "$new_version"
            sed -i "s/bundleVersion: .*/bundleVersion: $new_version/" ProjectSettings/ProjectSettings.asset
            echo "version=$new_version" >> $GITHUB_OUTPUT
          fi

      - name: Git operations
        run: |
          # Store branch name in variable
          branch_name="release-${{ steps.version.outputs.version }}"
          
          # Check if branch with same name already exists
          if git ls-remote --heads origin "$branch_name" | grep -q "$branch_name"; then
            echo "Error: Branch $branch_name already exists"
            exit 1
          fi

          git config --global user.name "bot"
          git config --global user.email "bot@example.com"
          git fetch -p
          git checkout -b "$branch_name"
          git add ProjectSettings/ProjectSettings.asset
          git commit -m "Update version number to ${{ steps.version.outputs.version }}"
          git push origin "$branch_name"
```

## 実行結果

- `release-{version}` という名前の新しいブランチが作成される
- `ProjectSettings.asset` のバンドルバージョンが更新される
- 変更が自動でコミット・プッシュされる

## 注意点

- バージョン番号は必ず`x.x.x`形式（例：1.0.0）
- 同名のリリースブランチが既に存在する場合はエラー
- プロジェクト設定ファイルが自動で更新されるので、ローカルで作業中の場合は注意