MENU

Github Actionsでghを使ってprをapproveするまで(in 個人開発)

最近知ったのですが、
pull request(以下pr)の作成者自身は、prをapproveできません。

Pull request authors cannot approve their own pull requests

引用元:Approving a pull request with required reviews

また、 Branch Protection の「Require pull request reviews before merging > Require approvals」を設定した場合、 pr のmergeには指定個数以上のapproveが必要となります。

つまり、 個人開発等において、自分自身しかレビュワーが存在しない場合、 「Require approvals」を設定すると、approveが付けられないために、prをマージできない、と言うことになります。

とはいえ、
個人開発において 「Require approvals」を設定してブランチ保護したいケース(Renovate でライブラリの更新を安全に自動化する場合など)が多々あるので、解決策を調査しました。 今回はそちらのまとめになります。

目次

結論

「Github ActionsでGithub CLIを使って自動でapproveする!!」

内容

問題を再現してみる

ひとまず、以下の問題を再現してみます。

自分自身しかレビュワーが存在しない場合、 「Require approvals」を設定すると、approveが付けられないために、prをマージできない

  • Branch Protectionを設定

Repository > Setting > Branches > Add ruleから、「Require approvals」を設定します。

保護対象のブランチ名をprotect_testとして、
Require approvals」をチェックして、必要なapproveの個数は1にしました。

続いて、保護対象のブランチに対してprをapproveしようとすると…

上記の通り、 Approveボタンがクリックできないようになっています。

問題を解決する

結論に記載した通り、
「Github ActionsでGithub CLIを使って自動でapproveする!!」

こちらの方法で上記問題の解決を試みます。

必要な作業は以下の3点です。

  1. approve用のGithub Actionsのworkflowファイルを作成
  2. Repository のsetting で、workflow permissionを設定

ひとまず、一通り対応してみます。


1. approve用のGithub Actionsのworkflowファイルを作成

  • .github/workflows/auto-merge.yml
name: auto-approve

on:
  pull_request:
    types:
      - synchronize # prにcommit がpushされた時
      - opened # prがopenされた時
      - ready_for_review # draft → prに変更された時
      - reopened # closeされたprが再度openした時

permissions:
  pull-requests: write
  contents: write

jobs:
  auto-merge:
    runs-on: ubuntu-latest
    env:
      PR_URL: ${{github.event.pull_request.html_url}}
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      # prをapproveする
      - name: Approve PR
        run: gh pr review "$PR_URL" --approve

詳細はworkflowファイル中にコメントしていますが、
肝は以下です。

env:
  PR_URL: ${{github.event.pull_request.html_url}}
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
  - name: Checkout
    uses: actions/checkout@v4
  # prをapproveする
  - name: Approve PR
    run: gh pr review "$PR_URL" --approve

PR_URL には、prのurlが入ります。

Github CLIの詳細は、こちらを見れば分かるかと思います。
公式:gh pr review

workflowの実行ログを先出すると、以下のような感じ。

2. Repository のsetting で、workflow permissionを設定

Repository > setting > Actions > General > Workflow Permissionsにて、以下を設定します。

  • Read and write permissions
  • Allow GitHub Actions to create and approve pull requests

これを設定しないと、
Github Actions からprをapproveする権限が付与されないので、前述のworkflowが以下のように失敗します。

以上で必要な作業は完了です。
実際に動作を確認してみます。

動作確認してみる

prを作成してみると、以下の通りgithub actionsによるapproveに成功しました!!!

  • 前述のBranch Protectionを設定したブランチ(protect_test)に対するprで、
  • author「github-actions」によってprがapproveされて、
  • 「Merge pull request」がクリック可能な状態になっている!

以上、問題解決ですー!!!

まとめ

今回の内容は、

Renovateを使って、安全にライブラリの更新を自動化したい」ということに端を発しています。

その中で、冒頭に記載した通り、 「個人開発だとそもそも自分でprをapproveできないじゃん!!!どうやってブランチ保護導入しよう…」

という課題があったので解決するために、色々やってみましたが、

本当はもっと他のやり方もある気がしています。

とは言ったものの、

今回個人的に初めてGithub CLIに触れることができたので、それは大きな収穫だったかな、と思っています。

もっとGithub CLIやGithub Action workflowをいい感じに使えるようになりたいー。

参考

そうきたか
Github Actionsを使ってプルリクエストを自動でマージしたい - そうきたか Scalaを利用したプロジェクトだとScala Stewardを導入しているところも多いのではないでしょうか? Stewardは便利なんですがPRをいちいち手動でマージするのが面倒なので、...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次