|  | 
|  | 1 | +[](https://github.com/IShix-g/Unity-GitHubActions/actions/workflows/test-create-release.yaml)   | 
|  | 2 | +[](https://github.com/IShix-g/Unity-GitHubActions/actions/workflows/test-update-packagejson.yaml)   | 
|  | 3 | +[](https://github.com/IShix-g/Unity-GitHubActions/actions/workflows/test-merge-and-push.yaml)   | 
|  | 4 | +[](https://github.com/IShix-g/Unity-GitHubActions/actions/workflows/test-release-notes.yaml) | 
|  | 5 | + | 
|  | 6 | +# Unity-GitHubActions | 
|  | 7 | +GitHub Actions for Unity. | 
|  | 8 | + | 
|  | 9 | +## 実現すること | 
|  | 10 | + | 
|  | 11 | +GitHub アクションを使った Unity パッケージのリリースの自動化   | 
|  | 12 | + | 
|  | 13 | +**このアクションは以下のタスクを自動化します。** | 
|  | 14 | +- パッケージマニフェスト](https://docs.unity3d.com/2022.3/Documentation/Manual/upm-manifestPkg.html)のバージョンを更新する | 
|  | 15 | +- リリースを生成する | 
|  | 16 | +- タグを作成する | 
|  | 17 | + | 
|  | 18 | +### リリースノート | 
|  | 19 | + | 
|  | 20 | +コミットメッセージを `feat` や `fix` といったキーワードで始めることで、自動的にリリースノートに含まれるようになります。 | 
|  | 21 | + | 
|  | 22 | +#### List of Available Types | 
|  | 23 | + | 
|  | 24 | +| Type       | Description                | | 
|  | 25 | +|------------|----------------------------| | 
|  | 26 | +| feat:      | 新機能の追加                     | | 
|  | 27 | +| fix:       | バグの修正                      | | 
|  | 28 | +| docs:      | ドキュメントの更新や修正           | | 
|  | 29 | +| style:     | コードスタイルの調整(空白の削除など)  | | 
|  | 30 | +| refactor:  | バグ修正でも機能追加でもないコード変更 | | 
|  | 31 | +| perf:      | パフォーマンス向上のための変更        | | 
|  | 32 | + | 
|  | 33 | + | 
|  | 34 | + | 
|  | 35 | +### ブランチ保護またはタグ保護が有効な場合 | 
|  | 36 | + | 
|  | 37 | +**ブランチやタグの保護が有効な場合**、デフォルトではパーミッションエラーが発生します。これを回避するには、GitHub Apps でこれらの保護ルールを回避できるように設定します。 | 
|  | 38 | + | 
|  | 39 | +- [GitHub App](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)を作成する | 
|  | 40 | +- アプリをインストールし、対象のリポジトリ用に設定する | 
|  | 41 | +- リポジトリの Secrets に `BOT_APP_ID` と `BOT_PRIVATE_KEY` を設定する | 
|  | 42 | +- GitHub App が保護ルールをバイパスできるように更新する | 
|  | 43 | + | 
|  | 44 | +詳しくは[GitHubApp.md](GitHubApp_jp.md)をご確認ください。 | 
|  | 45 | + | 
|  | 46 | +## 必須の設定 | 
|  | 47 | + | 
|  | 48 | +`Settings > Actions > General > Workflow permissions`で**読み取り/書き込み権限** を設定してください。 | 
|  | 49 | + | 
|  | 50 | + | 
|  | 51 | + | 
|  | 52 | +## 手動でのリリース | 
|  | 53 | + | 
|  | 54 | +```mermaid | 
|  | 55 | +graph LR | 
|  | 56 | +    validate-branch --> update-packagejson | 
|  | 57 | +    update-packagejson --> merge-and-push | 
|  | 58 | +    merge-and-push --> release-notes | 
|  | 59 | +    release-notes --> create-release | 
|  | 60 | +    create-release --> clean-branch | 
|  | 61 | +``` | 
|  | 62 | + | 
|  | 63 | +Actionsタブに移動し、`Manual Release (Merge to Default)` > `Run workflow`を選択して手動でリリースをおこないます。 | 
|  | 64 | + | 
|  | 65 | + | 
|  | 66 | + | 
|  | 67 | +| Option                | Description            | Default            | Example  | | 
|  | 68 | +|-----------------------|------------------------|--------------------|----------| | 
|  | 69 | +| tag| 作成したいGitタグ |                    | 1.0.0                                        | | 
|  | 70 | +| clean-branch | ブランチを削除しますか?デフォルトブランチ以外のすべてのブランチが削除されます | false | | | 
|  | 71 | +| fast-forward | マージの早送りを許可しますか?        | false              | | | 
|  | 72 | +| include-default-branch|デフォルト・ブランチをワークフローの動作に含める| false              || | 
|  | 73 | +| dry-run | 変更をコミットまたはプッシュせずにマージをシミュレートする | false              || | 
|  | 74 | +| draft-release | ドラフトリリースの場合は `true`, 非ドラフトリリースの場合は `false` | false              | | 
|  | 75 | + | 
|  | 76 | +### 手動でリリースする手順 | 
|  | 77 | + | 
|  | 78 | +1. ブランチを作成する (例: `release`) | 
|  | 79 | +2. このブランチでリリースを準備する | 
|  | 80 | +3. `Run workflow` を使って手動リリースをトリガーする。 | 
|  | 81 | + | 
|  | 82 | + | 
|  | 83 | + | 
|  | 84 | +### セットアップガイド | 
|  | 85 | + | 
|  | 86 | +1. [.github/workflows/build-release_merge.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/build-release_merge.yaml) からコードをコピーし、プロジェクトの Actions フォルダに YAML ファイルを作成します。 | 
|  | 87 | +2. プロジェクト構造に合うように、`update-packagejson` 内の `file-path` を更新します。 | 
|  | 88 | +3. ブランチ保護ルールを使用していない場合、`secrets.BOT_APP_ID` および `secrets.BOT_PRIVATE_KEY` に関する記述を削除してください。 | 
|  | 89 | +4. 実行時にパーミッションエラーが発生した場合は、[permissions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token) を構成してください。 | 
|  | 90 | + | 
|  | 91 | +## Release via Pull Request | 
|  | 92 | + | 
|  | 93 | +```mermaid | 
|  | 94 | +graph LR | 
|  | 95 | +    extract-tag --> update-packagejson | 
|  | 96 | +    update-packagejson --> release-notes | 
|  | 97 | +    release-notes --> create-release | 
|  | 98 | +``` | 
|  | 99 | + | 
|  | 100 | +任意のブランチからデフォルトブランチへのプルリクエストを作成します。**リリースタイトルにタグ名**(例: `1.0.0`)を使用する必要があります。このプルリクがマージされると、リリースが自動で作成されます。 | 
|  | 101 | + | 
|  | 102 | + | 
|  | 103 | + | 
|  | 104 | +マージ後、リリースは自動的に作成されます。 | 
|  | 105 | + | 
|  | 106 | + | 
|  | 107 | + | 
|  | 108 | +### リリース作成の条件 | 
|  | 109 | + | 
|  | 110 | +以下の条件が満たされた場合、リリースがトリガーされます: | 
|  | 111 | +- プルリクエストのタイトルにバージョン番号(例: `1.0.0`)が含まれている | 
|  | 112 | +- ベースブランチが[デフォルトブランチ](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/changing-the-default-branch)である | 
|  | 113 | + | 
|  | 114 | +### プルリクエストを介したリリース手順 | 
|  | 115 | + | 
|  | 116 | +1. ブランチを作成します(例: `release`) | 
|  | 117 | +2. このブランチでリリースを準備します | 
|  | 118 | +3. このブランチをデフォルトブランチへマージするプルリクエストを作成します。プルリクエストのタイトルにはバージョン番号を使用します | 
|  | 119 | +4. プルリクエストをマージします | 
|  | 120 | +5. リリースが自動的に生成されます | 
|  | 121 | + | 
|  | 122 | +### セットアップガイド | 
|  | 123 | + | 
|  | 124 | +1. [.github/workflows/build-release_pull-request.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/build-release_pull-request.yaml) からコードをコピーし、プロジェクトの Actions フォルダに YAML ファイルを作成します。 | 
|  | 125 | +2. `update-packagejson` 内の `file-path` を、プロジェクトのファイル構造に合わせて更新します。 | 
|  | 126 | +3. ブランチの保護ルールを使用していない場合、`secrets.BOT_APP_ID` および `secrets.BOT_PRIVATE_KEY` に関する記述は削除してください。 | 
|  | 127 | +4. 実行時にパーミッションエラーが発生した場合は、[permissions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token) を構成してください。 | 
|  | 128 | + | 
|  | 129 | +## 推奨事項 | 
|  | 130 | + | 
|  | 131 | +プルリクエストリリースの方法を使用している場合であっても、フォールバック手段として手動リリースオプションを構成することをお勧めします。そうしない場合、新しいプルリクエストを作成する以外にリリースを作成する手段がなくなります。 | 
|  | 132 | + | 
|  | 133 | +## Jobの説明 | 
|  | 134 | + | 
|  | 135 | +主なJobを説明します。 | 
|  | 136 | + | 
|  | 137 | +### タグの検証 (Validate Tag) | 
|  | 138 | + | 
|  | 139 | +[.github/workflows/reusable-validate-tag.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/reusable-validate-tag.yaml) | 
|  | 140 | + | 
|  | 141 | +このアクションは、タグの形式が有効かどうかを検証し、数値のみで正規化されたタグ (`outputs.normalized-tag`) を返します。 | 
|  | 142 | + | 
|  | 143 | +#### 入力値 (Inputs) | 
|  | 144 | + | 
|  | 145 | +| ID                       | 説明                                                                                 | デフォルト値 | | 
|  | 146 | +|--------------------------|--------------------------------------------------------------------------------------|------------| | 
|  | 147 | +| require-validation       | 無効または古いタグを禁止する場合は `true`。検証が失敗しても続行する場合は `false`。      | true       | | 
|  | 148 | +| validate-semantic-versioning | タグ形式を [Semantic Versioning](https://semver.org) に基づいて検証するかどうか。    | true       | | 
|  | 149 | +| tag                      | 検証対象のタグ (例: `1.0.0`)                                                           |            | | 
|  | 150 | + | 
|  | 151 | +#### 出力値 (Outputs) | 
|  | 152 | + | 
|  | 153 | +| ID               | 説明                                                             | | 
|  | 154 | +|------------------|-----------------------------------------------------------------| | 
|  | 155 | +| normalized-tag   | 正規化されたタグ (例: `v` プレフィックスなし)                      | | 
|  | 156 | +| tag              | 入力されたタグと同じ値                                          | | 
|  | 157 | +| validated        | タグが検証を通過したかを示す                                      | | 
|  | 158 | + | 
|  | 159 | +--- | 
|  | 160 | + | 
|  | 161 | +### package.json の更新 (Update package.json) | 
|  | 162 | + | 
|  | 163 | +[.github/workflows/reusable-update-packagejson.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/reusable-update-packagejson.yaml) | 
|  | 164 | + | 
|  | 165 | +このアクションは、`package.json` 内のバージョンを更新し、変更をコミットします。 | 
|  | 166 | + | 
|  | 167 | +#### 入力値 (Inputs) | 
|  | 168 | + | 
|  | 169 | +| ID                        | 説明                                                                                | デフォルト値                      | | 
|  | 170 | +|---------------------------|------------------------------------------------------------------------------------|----------------------------------| | 
|  | 171 | +| file-path                 | 更新する`package.json` のパス。複数行のパスを指定可能で、サポートされるのは `package.json` のみです |                                   | | 
|  | 172 | +| tag                       | 適用する Git タグ (例: `1.0.0`)                                                     |                                   | | 
|  | 173 | +| dry-run                   | 実際に変更をプッシュせず、更新とコミットをシミュレートする場合は `true`                  |                                   | | 
|  | 174 | +| require-validation        | タグ検証が通過必須なら `true`。検証が失敗しても続行する場合は `false`                  | true                              | | 
|  | 175 | +| ref                       | 更新前にチェックアウトするブランチまたはタグ                                         |                                   | | 
|  | 176 | +| commit-message-format     | `package.json` を更新する際のコミットメッセージのテンプレート。例: `Update package.json to {v}` | `Update package.json to {v}` | | 
|  | 177 | + | 
|  | 178 | +#### Secrets (機密情報) | 
|  | 179 | + | 
|  | 180 | +ブランチまたはタグの保護に必要: | 
|  | 181 | + | 
|  | 182 | +| ID               | 説明                              | | 
|  | 183 | +|-------------------|-----------------------------------| | 
|  | 184 | +| BOT_APP_ID        | アプリケーション ID を指定する    | | 
|  | 185 | +| BOT_PRIVATE_KEY   | アプリ用の秘密鍵を設定する        | | 
|  | 186 | + | 
|  | 187 | +#### 出力値 (Outputs) | 
|  | 188 | + | 
|  | 189 | +| ID               | 説明                                          | | 
|  | 190 | +|------------------|----------------------------------------------| | 
|  | 191 | +| normalized-tag   | 正規化されたタグ (`v` プレフィックスなしのタグ) | | 
|  | 192 | +| sha              | `package.json` 更新後の Git コミット SHA     | | 
|  | 193 | +| changed          | Git ブランチが変更または新規作成されたかどうか | | 
|  | 194 | + | 
|  | 195 | +--- | 
|  | 196 | + | 
|  | 197 | +### マージとプッシュ (Merge and Push) | 
|  | 198 | + | 
|  | 199 | +[.github/workflows/reusable-merge-and-push.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/reusable-merge-and-push.yaml) | 
|  | 200 | + | 
|  | 201 | +このアクションは、ブランチをマージして変更をプッシュします。 | 
|  | 202 | + | 
|  | 203 | +#### 入力値 (Inputs) | 
|  | 204 | + | 
|  | 205 | +| ID              | 説明                                            | デフォルト値 | | 
|  | 206 | +|-----------------|------------------------------------------------|------------| | 
|  | 207 | +| target-branch   | リポジトリからマージする対象のブランチ              |            | | 
|  | 208 | +| push-branch     | 変更をプッシュする対象ブランチ                   |            | | 
|  | 209 | +| commit-id       | リリースやタグ作成用のコミット ID                |            | | 
|  | 210 | +| dry-run         | 実際にコミットせずシミュレーションする場合は `true`    | false      | | 
|  | 211 | +| fast-forward    | ファストフォワードマージを許可する場合は `true`      | false      | | 
|  | 212 | + | 
|  | 213 | +#### Secrets (機密情報) | 
|  | 214 | + | 
|  | 215 | +ブランチまたはタグの保護に必要: | 
|  | 216 | + | 
|  | 217 | +| ID               | 説明                              | | 
|  | 218 | +|-------------------|-----------------------------------| | 
|  | 219 | +| BOT_APP_ID        | アプリケーション ID を指定する    | | 
|  | 220 | +| BOT_PRIVATE_KEY   | アプリ用の秘密鍵を設定する        | | 
|  | 221 | + | 
|  | 222 | +#### 出力値 (Outputs) | 
|  | 223 | + | 
|  | 224 | +| ID               | 説明                                     | | 
|  | 225 | +|------------------|-----------------------------------------| | 
|  | 226 | +| sha              | マージ後の Git コミット SHA             | | 
|  | 227 | +| merged           | ブランチが正常にマージされたかどうか      | | 
|  | 228 | + | 
|  | 229 | +--- | 
|  | 230 | + | 
|  | 231 | +### リリースノート生成 (Release Notes Generator) | 
|  | 232 | + | 
|  | 233 | +[.github/workflows/reusable-release-notes.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/reusable-release-notes.yaml) | 
|  | 234 | + | 
|  | 235 | +このアクションは、コミットメッセージに基づいてリリースノートを生成します。`fix:` または `feat:` で始まるメッセージがリリースノートに含まれます。 | 
|  | 236 | + | 
|  | 237 | +#### 入力値 (Inputs) | 
|  | 238 | + | 
|  | 239 | +| ID                     | 説明                                                                             | デフォルト値           | | 
|  | 240 | +|------------------------|---------------------------------------------------------------------------------|-----------------------| | 
|  | 241 | +| from-tag               | 開始タグ (未設定の場合は最初のコミットがデフォルト)                               |                       | | 
|  | 242 | +| to-tag                 | 終了タグ (未設定の場合は最新コミットがデフォルト)                                |                       | | 
|  | 243 | +| commit-message-format  | コミットメッセージの形式 (詳細は [pretty-formats](https://git-scm.com/docs/pretty-formats) を参照)。 | `- %s (%h)`           | | 
|  | 244 | +| commit-id              | リリースやタグ作成用のコミット ID                                               |                       | | 
|  | 245 | +| derive-from-tag        | 前回のタグを基に`from-tag`を自動決定する場合は `true`。手動設定の場合は `false`      | true                  | | 
|  | 246 | + | 
|  | 247 | +#### 出力値 (Outputs) | 
|  | 248 | + | 
|  | 249 | +| ID      | 説明                             | | 
|  | 250 | +|---------|---------------------------------| | 
|  | 251 | +| notes   | 生成されたリリースノート         | | 
|  | 252 | + | 
|  | 253 | +--- | 
|  | 254 | + | 
|  | 255 | +### リリース作成 (Create Release) | 
|  | 256 | + | 
|  | 257 | +[.github/workflows/reusable-create-release.yaml](https://github.com/IShix-g/Unity-GitHubActions/blob/main/.github/workflows/reusable-create-release.yaml) | 
|  | 258 | + | 
|  | 259 | +このアクションは、リリースを作成し、必要に応じてタグを追加します。 | 
|  | 260 | + | 
|  | 261 | +#### 入力値 (Inputs) | 
|  | 262 | + | 
|  | 263 | +| ID                     | 説明                                                                         | デフォルト値      | | 
|  | 264 | +|------------------------|-----------------------------------------------------------------------------|-----------------| | 
|  | 265 | +| commit-id              | リリースおよびタグ作成用のコミット ID                                        |                 | | 
|  | 266 | +| dry-run                | シミュレーションのみにする場合は `true` (リリースは作成されません)                  |                 | | 
|  | 267 | +| require-validation     | 検証が必須の場合は `true`、スキップする場合は `false`                          | true            | | 
|  | 268 | +| wait-before-delete     | 一時的なブランチを削除する前の待機時間 (秒単位)                                  | 25              | | 
|  | 269 | +| tag                    | 作成する Git タグ (例: `1.0.0`)                                              |                 | | 
|  | 270 | +| release-format         | リリースタイトルのテンプレート (例: `Ver.{0}` は `Ver.1.0.0` のように設定されます)  | Ver.{0}         | | 
|  | 271 | +| release-note           | 含めたいカスタムリリースノート                                              |                 | | 
|  | 272 | +| draft-release          | 下書きリリースの場合は `true`、最終リリースの場合は `false`                      | false           | | 
|  | 273 | + | 
|  | 274 | +#### Secrets (機密情報) | 
|  | 275 | + | 
|  | 276 | +ブランチまたはタグの保護に必要: | 
|  | 277 | + | 
|  | 278 | +| ID               | 説明                              | | 
|  | 279 | +|-------------------|-----------------------------------| | 
|  | 280 | +| BOT_APP_ID        | アプリケーション ID を指定する    | | 
|  | 281 | +| BOT_PRIVATE_KEY   | アプリ用の秘密鍵を設定する        | | 
|  | 282 | + | 
|  | 283 | +## 参考リポジトリ | 
|  | 284 | + | 
|  | 285 | +以下のリポジトリを参考にしました。 | 
|  | 286 | + | 
|  | 287 | +[https://github.com/Cysharp/Actions](https://github.com/Cysharp/Actions) | 
0 commit comments