Github で 特定のブランチへのプルリク自動生成ワークフローを作成する
これなに
- いつもステージング環境(Staging)のブランチから本番環境(Production)のブランチに自動的にPR作成するようにしています。
- ただ、いつも新しいリポジトリを作成する際に自分で毎回作成しているのが面倒になってきたので、備忘録として記事にしました。
時間がない人向け
とりあえず御託はいらねえ、って人は以下のコミットから何を作成しているか見てください。
あとは Settings から Github Actions に対して PR 作成権限を付与しないといけないので、それだけ忘れないようにしてください。
何ができるか
例えば develop ブランチをステージング環境、master ブランチを本番環境に使用しているなら、 develop ブランチに PR をマージすると、自動的に master ブランチに対して PR を作成してくれます
セットアップ方法
1: Github Actions が PR 作成することを許可する
- セットアップしたいリポジトリで Settings > Actions > General にアクセスする
-
Workflow permissions
にあるRead repository contents and packages permissions
を有効化する
2: ワークフロー設定ファイルの作成
すでに前述のセクションで記載済みではありますが、改めてリンクをこちらに記載します。
作成が必要なファイルは以下の3つです。
.git-pr-release
.github/git-pr-release.erb
.github/workflows/create-d2m-pr.yml
各ファイルの説明
.git-pr-release
主に差分をマージする際のソースブランチとターゲットブランチを指定する設定を記載しています
staging が元のブランチ、 production がマージ先のブランチです
[pr-release "branch"]
staging = develop
production = main
[pr-release]
template = .github/git-pr-release.erb
labels = git-pr-develop
.github/git-pr-release.erb
主に PR のタイトルを記述するための設定
1行目がタイトル、2行目以降は description にマージする内容を自動作成します
develop-to-main <%= Time.now.strftime("%Y-%m-%d") %>
<% pull_requests.each do |pr| -%>
<%= pr.to_checklist_item %>
<% end -%>
.github/workflows/create-d2m-pr.yml
主に GitHub Actions がどのブランチをチェックするか、PR 作成のための権限付与など、各種設定を記載しています
以下は develop ブランチの push をチェックするようにしています
name: Create d2m PR
on:
push:
branches:
- develop
permissions:
contents: read
pull-requests: write
issues: write
jobs:
d2m-pr:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Ruby 3.3.1
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3.1
- name: Execute gir-pr-develop (develop -> main)
env:
GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gem install git-pr-release
git-pr-release || echo "Done."
.github/CODEOWNERS
このファイルの作成は任意ですが、GitHub Actions が PR をオープンする際に特定のレビュアーのアプループを必須にしたいのであれば、ブランチルール設定で利用することができるので便利です
もし利用されたい方は Settings > Rules > Rulesets で設定してください
なお、本件については本記事で書きたいことから脱線するので詳細は割愛します
最後に
確か似たような記事がネット上に大量に転がっているのでそちらを参照しても全く問題ありません
繰り返しになりますが、本記事は個人的な備忘録として記載しただけですから、でもそれでも読んでもらえると嬉しいです
参考リポジトリ
Discussion