くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

GitHub Actionsを使って自分をReviewerにしたPRを作成する

ひとりリポジトリでもPR活用したいなと思い、
いろいろ調べてみたときの備忘録(*´ω`*)

自分のPRは自分で承認できない。。

Pull Requestの作者は、自分自身のPull Requestを承認することはできません。

らしい。。(´・ω・`)

ならば、botにPRをつくってもらおう

ベースブランチ以外にプッシュされたら、
コミット履歴から自分宛てにPRを作成してみる。

name: create PR by github-actions[bot]
on:
  push:
    branches-ignore:
      - "main"
env:
  BASE_BRANCH: main
  REVIEWER: <レビューアのgithub username>

jobs:
  create_pr:
    # ブランチが作成されただけならスキップ
    if: ${{ !github.event.created }}
    runs-on: ubuntu-latest
    steps:
      # チェックアウト
      - uses: actions/checkout@v3
        with:
          # PRのタイトルとかをコミット履歴から取得するので、
          # fetch-depthを0に設定して全履歴を取得
          fetch-depth: 0

      # PRがすでに存在していないかのチェック
      # gh pr listでbase/headのブランチが同じPR検索して判定
      - name: check PR
        id: check_pr
        run: |
          echo "count=$(gh pr list -B ${{ env.BASE_BRANCH }} -H ${{ github.ref_name }} --json 'id' -q '.[] | length')" >> $GITHUB_OUTPUT

      # PRがまだなかったらghコマンドで生成
      - name: Create PR
        if: ${{ steps.check_pr.outputs.count == '' }}
        run: gh pr create --fill -B ${{ env.BASE_BRANCH }} -r ${{ env.REVIEWER }}
        env:
          # github-actions[bot]のトークンを使って作成するために設定
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

こんな感じでgithub-actions[bot]が作成したことになる(*´ω`*)

はまったところ

  • PRが存在すると作成できずエラーになる
    • 事前にgh pr listでチェックするようにした
  • gh pr create --fillでエラーになる
    • actions/checkoutはデフォルトで最新の履歴しか無い
    • 全履歴を取得するようにfetch-depth: 0を設定
  • ブランチ作成時(コミットなし)でもPRを作成しようとする
    • if: ${{ !github.event.created }}で判定してスキップ

gh pr editもあるけど、--fillフラグはない。。

以上!!便利(*´ω`*)

参考にしたサイト様