🚀

GitHub Actionsを使って、自動でPRを作成する(Q&A付き)

2022/03/19に公開

概要

GitHub Actionsを使って、ブランチがマージされたら自動でPRを作成するようにしました。
主にgit-flowのように、developとmain、その他各用途のブランチからなるフローで運用している場合に役立つと思います。

今回はdevelopにマージしたらdevelop->mainへのブランチを自動で作成する例を紹介します。

利用したライブラリ

こちらのライブラリを利用させていただきました。
https://github.com/x-motemen/git-pr-release

補足

実装の背景は以下です。総じてROIは高いと思い実装しました。

  • 勤め先では自動でPR作成するためにEC2を動かしていたので、今回の実装で管理すべきサーバーが1つ減りました。
  • リポジトリによって変更するコードは少ないので、1つテンプレートを作っておくと、会社や組織全体で流用しやすいです。
  • 監査上も自前でサーバーを動かしているより、GitHub Actionsなどのマネージドサービスを使っていると信頼度が高くなる場合もあるみたいです。

手順

1. PRテンプレートの設定

公式のサンプルテンプレートから変更を加えています。

変更点

  • チェックボタンが不要なので表示されないようにしました
  • マージされた順にソートしてPRを起票するようにしました
<% sorted_pr = pull_requests.sort_by {|pr| pr.pr.merged_at} -%>
Request deployment <%= Time.now.strftime("%Y-%m-%d") %>
<% sorted_pr.each do |pr| -%>
  <%= "- ##{pr.pr.number} @#{pr.pr.user.login}" %>
<% end -%>

このようなPRが作成されます。(隠しているところは各PRのタイトルです。試行錯誤してたので適当なタイトルになってしまい、恥ずかしくなり非表示にしています。🙏)

2. GitHub Actionsの設定

developブランチにマージされたときに自動でmainブランチへのPRが作成されるようになっています。
rubyのバージョンは実装時点の最新バージョンにしてテストしてみるのがよいです。

name: develop2main

on:
  push:
    branches:
      - develop

jobs:
  develop2main:
    runs-on: ubuntu-latest
    env:
      GIT_PR_RELEASE_BRANCH_PRODUCTION: main
      GIT_PR_RELEASE_BRANCH_STAGING: develop
    steps:
      - uses: actions/checkout@v1
      - name: Set up Ruby 3.1
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.1
      - name: Execute git-pr-release
        env:
          GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GIT_PR_RELEASE_TEMPLATE: '.github/pr-release-template.erb'
        run: |
          gem install git-pr-release -v "0.6.0"
          git remote set-url origin "https://${GITHUB_ACTOR}:${GIT_PR_RELEASE_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
          git-pr-release || echo "Done."

Q&A

Q. リポジトリのCICDにCircleCIを使っているのですが、上記のフローをGitHub Actionsに追加しても従来どおりCircleCIが動いてくれますか?

A. 動くので問題ないです。GitHub Actionsが自動でPRを作り、そのPRをトリガーにしてCircleCIが動いてくれます。

Q. 自動で生成されたPRをマージする前にdevelopブランチに新しいブランチをマージした場合の挙動はどうなりますか?

A. 最初に生成されたPRのtitleやdescriptionを上書きます。

Discussion