0
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?

【Unity】GitHubで保護されたブランチにコミットする

Last updated at Posted at 2025-02-01

GitHubで保護されたブランチにコミットしたい事ってありませんか?そのやり方を解説します。

ブランチの保護とは?

特定のブランチに直接コミットできないようにブランチの保護ルールというものを設定することが可能です。例えば、自分も含めてすべてのユーザーにmainブランチへのコミットやマージができないように設定して、プルリエクエストのレビューを必須にします。そうする事で誤ってコミットしたりマージする可能性を半減させる事ができます。

参考リポジトリ

下記、リポジトリで実際に運用してます。

紹介
GitHubアクションを使ったUnityパッケージのリリース自動化

GitHub Appを使う

ブランチの保護には、Bypass listというものがあります。このBypass listに追加したアカウントは保護ルールをパスできます。ここにGitHub Appを設定し、GitHub Appからコミットする事で、ブランチの保護を回避し安全にリリースをおこなう事ができます。

  • Repository admin (Allow for pull requests only): 自分は、プルリクエストのみパス
  • App (Always allow): AppのPermissionの範囲内はパス

rule.jpg

GitHub Appの生成

生成ページを開く

  1. 右上のアイコンをクリック
  2. Settingsをクリック
  3. Developer settingsをクリック

github_app1.jpg

生成

New GiHub Appをクリック

github_app2.jpg

GitHub Appを作成します。

  • GitHub App nameに適当に入力、ユニークである必要があります
  • Homepage URLにhttp://localhostと入力
  • WebfookのActiveを選択解除する

Permissionsを下記のように指定。指定後保存してください。

Permissions Read and write
Administration Read and write
Contents Read and write
Metadata Read-only
Pull requests Read-only

github_app3.jpg

App情報を取得

生成したAppから必要情報を取得します。

App IDを控える

App IDは、Repository secretsのBOT_APP_IDに設定します。

github_app4.jpg

Private keyの生成

Generate a private keyから設定。ファイルがPCにダウンロードされます。
このキーは、Repository secretsのBOT_PRIVATE_KEYに設定します。

github_app5.jpg

Appのインストール

アカウントにAppをインストールします。

github_app6.jpg

All repositoriesを選択してインストール実行 (対象リポジトリを選択する事も可)

github_app7.jpg

リポジトリに設定する

ルールの設定

設定したいリポジトリのブランチ保護ルールを開き、Bypass listにAppを設定してください。

リポジトリ > Settings > Rules > Rulesets
github_app8.jpg

シークレットの設定

上記で取得したデータをNew repository secretから設定します。

BOT_APP_ID

アプリのIDを設定
例) 1130092

BOT_PRIVATE_KEY

PCにダウンロードしたアプリのシークレットの中身をコピペ
例)

-----BEGIN RSA PRIVATE KEY-----
省略
-----END RSA PRIVATE KEY-----

リポジトリ > Settings > Secrets and variables > Actions

github_app9.jpg

コード

あとは、Appからコミットなどをおこなうように設定します。やり方は簡単で、Appトークンを生成して、そのトークンをsecrets.GITHUB_TOKENの代わりに渡します。

参考: .github/workflows/reusable-update-packagejson.yaml

# Appトークンの生成
- name: Generate Token
id: app-token
uses: actions/create-github-app-token@v1
with:
  app-id: ${{ secrets.BOT_APP_ID }}
  private-key: ${{ secrets.BOT_PRIVATE_KEY }}

- uses: actions/checkout@v4
with:
  ref: ${{ inputs.ref }}
  persist-credentials: false #チェックアウトする時は指定する

- name: Push changes
uses: ad-m/github-push-action@master
with:
  # 生成したtokenを渡す
  github_token: ${{ steps.app-token.outputs.token }}
  branch: ${{ inputs.ref }}
  tags: false

場合によって、Git認証情報を設定する必要があります。
エラーが出る場合は、設定してください。(生成したトークンが必要です。)

参考: .github/workflows/reusable-create-release.yaml

- name: Configure Git Authentication with Custom Token
run: |
  git config --global url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/".insteadOf "https://github.com/"

ブランチの保護をしていないのにエラーが出る場合

保護を設定していないのにPermissionエラーが出る場合、以下の設定を確認してみてください。

  • リポジトリのSettings > Actions > General > Workflow permissionsを開く
  • Workflow permissionsをRead and write permissionsに設定

settings_action.jpg

0
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
0
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?