2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityAdvent Calendar 2024

Day 11

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

Last updated at Posted at 2024-12-13

概要

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
    • ビルド番号だけ上げたい場合:空欄のまま実行

実装コード

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

.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)
  • 同名のリリースブランチが既に存在する場合はエラー
  • プロジェクト設定ファイルが自動で更新されるので、ローカルで作業中の場合は注意
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?