GitHub Actionsで、Cron定期実行でプルリクエストを作成してマージする


GitHub Actionsで、自動でプルリクを作成してマージする方法

dev -> stage へのプルリクエストの作成とマージをする機会があり、定期的に実行できたら楽なのでGitHub Actionsで作成してみました。

name: Auto merge dev2stage

on:
  schedule:
    - cron: "0 15 * * *"

jobs:
  auto-merge-dev2stage:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
        with:
          ref: dev
      - name: 【定期実行】Create Pull Request dev2stage
        id: create-pull-request
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          PULL_REQUEST_URI=$(gh pr create -B stage -t 【定期実行】dev2stage -l 'auto merge' -b "")
          echo "::set-output name=PULL_REQUEST_URI::$PULL_REQUEST_URI"
      - name: 【定期実行】Merge Pull Request dev2stage
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh pr merge ${{steps.create-pull-request.outputs.PULL_REQUEST_URI}} --merge

定期実行

定期実行部分は、以下です。

on:
  schedule:
    - cron: "0 15 * * *"

日本時間に合わせるために、15にしています。

プルリクエスト作成部分

- name: 【定期実行】Create Pull Request dev2stage
  id: create-pull-request
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    PULL_REQUEST_URI=$(gh pr create -B stage -t 【定期実行】dev2stage -l 'auto merge' -b "")
    echo "::set-output name=PULL_REQUEST_URI::$PULL_REQUEST_URI"

プルリクエスト作成部分では、GitHub CLIを使用して、プルリクエストを作成します。
gh pr create 部分で、CLIを用いてプルリクエストの作成を行っています。
gh prコマンドのオプションで、ベースブランチ、タイトル、ラベル、内容を設定しています。

この箇所でエラーがでる場合が、いくつかあります。

  1. すでにdev->stageのプルリクエストが存在している場合
  2. コンフリクトが存在する場合
  3. 差分が存在しない場合

以上3つが、エラーでプルリクエストが作成できない場合です。

マージ部分

- name: 【定期実行】Merge Pull Request dev2stage
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN}}
  run: |
    gh pr merge ${{steps.create-pull-request.outputs.PULL_REQUEST_URI}} --merge

マージ部分では、GitHub CLIを使用して、マージします。