🚀
GitHub Actionsを使って、自動でPRを作成する(Q&A付き)
概要
GitHub Actionsを使って、ブランチがマージされたら自動でPRを作成するようにしました。
主にgit-flowのように、developとmain、その他各用途のブランチからなるフロー
で運用している場合に役立つと思います。
今回はdevelopにマージしたらdevelop->mainへのブランチを自動で作成する例を紹介します。
利用したライブラリ
こちらのライブラリを利用させていただきました。
補足
実装の背景は以下です。総じて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