ベースブランチだけ変更したPRを生成するGitHub Actionsの紹介

2023/06/20

ベースブランチだけ変更したPRを生成するGitHub Actionsの紹介

git-flowやそれに近いフローを採用している場合、master・mainにマージされたら本番環境、stagingやdevelopにマージされたらStaging環境やテスト環境にデプロイするというCD環境を構築しているケースは多いと思います。

その場合に、masterとstaging双方にPRを出す方式を取っている場合、いちいち2つのPRを出すのは面倒ですし、作業漏れが発生する恐れがあります。

それをGitHub Actionsを使って解決したので紹介させて頂きます。

解決方法

上記の問題を解決するには、

  1. PR作成時に、当該PRの情報を元に staging ブランチをベースブランチにしたPRを作成する
  2. master向け、 staging 向けのPRにラベルを付与する

の2つの作業が必要になります。

それぞれを

  1. https://github.com/repo-sync/pull-request
  2. https://github.com/andymckay/labeler

を使って解決しました。

以下がそのGitHub ActionsのYAMLファイルとなります。

ポイントは以下となります

  1. トリガーとして pull_requesttypes: [ opened ]を指定することで、PR作成時のみに限定する
  2. 以下のページに書かれた、pull_requestのpayloadを駆使して作成元のPRのうち、作成するPRに必要な情報を集める https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request
  3. GITHUB_ENVを使って、PRのdescriptionに相当する内容の入った環境変数を定義する

1については、repo-sync/pull-requestが新規にPRを作成することのみに対応しているからです。3については、公式のSetting an environment variableに書かれているので何も難しいことは無いのですが、意外に動的に環境変数をGitHub Actionsで指定することが私はこれまで無かったので、念の為ポイントとして上げさせて頂きました。

このGitHub Actionsの結果が以下となります。

ご覧のように、ラベルがあることで見分けが付きやすくなっています。また、PRのリンクがありつつもdescriptionもコピーされていることで、内容もわかりやすくなっています。反面この設定の欠点としては、PR作成時にタイトルとdescriptionをきちんと書いておかないと中途半端な内容で複製される、というものがあります。ただ、PRのリンクは最低限記載されるので、管理上は大きく困る欠点ではありません。