🍷

GitHub Actions の中から PR の自動マージを行う

2021/08/11に公開

Kubernetes を勉強していて GitOps に辿り着きました。
その際に helm チャートの Docker イメージタグ部分を更新した PR を自動で main ブランチにマージできないものかと思ったのがきっかけです。

良い Action が無いか調べたりもしましたが、結果すごく簡単だったのでメモします👨‍💻

結論

そのものズバリなコマンドがあるので、 GitHub CLI を利用する。
https://cli.github.com/manual/gh_pr_merge

$ gh pr merge [<number> | <url> | <branch>] [flags]

なのでマージ対象PR の <number> | <url> | <branch> のどれかがあればOKです。

GitHub Actions から使うならこんな感じで上手くいきました🧐

  createPullRequestForStg:
    env:
      ENV: stg
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create Pull Request
        id: cpr
        uses: peter-evans/create-pull-request@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: |
            [${{ env.ENV }}] update container image
          committer: GitHub <noreply@github.com>
          author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
          signoff: false
          branch: create-pull-request/release/${{ env.ENV }}
          base: main
          delete-branch: true
          title: |
            [${{ env.ENV }}] Update Container Image
          body: |
            [${{ env.ENV }}] Update Container Image
            - Updated helm chart container image
            - Auto-generated by [create-pull-request][1]
            [1]: https://github.com/peter-evans/create-pull-request
          labels: |
            update container image
            ${{ env.ENV }} release
          assignees: tatsuro-m
          draft: false

      - name: merge PR
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: gh pr merge ${{ steps.cpr.outputs.pull-request-url }} --merge

PR の作成も自動化したかったので、
https://github.com/peter-evans/create-pull-request
を利用させて頂きました🙌

この Action は output に作成された PR の url を出力してくれるのでそれを利用しています。
github cli は GitHub Actions に標準でインストールされているので何もしなくても使えます。
認証にはお馴染み ${{ secrets.GITHUB_TOKEN }} を使います!

https://github.com/tatsuro-m/playground/pull/31
実際にこの方法で自動マージを行った PR です。

helm の valuesファイル(yaml) の GitHub Actions からの書き換え方法についてはまた記事にするかもしれません🏄‍♂️


どなたかの参考になれば幸いです。

Discussion