git-pr-releaseというリリース用pull requestを作成してくれるGithubアクションがあるのですが、そこで使えるテンプレートに手を加えて気に入ったものが出来たので共有です。
気に入ったらぜひ使ってみてください。
テンプレートを適用して所定のブランチにマージすると、以下のようなpull requestが自動的に生成されます。
git-pr-releaseはデフォルト状態でも、更新内容を一覧化してくれるのですが、更新内容をラベルによってグルーピングする事で何が更新されたのか、よりわかりやすくなったと思います。
更新内容を振り分ける方法は以下の通りです。
- 新機能:
enhancement
ラベルをPRに付与 - 改善:
improvement
ラベルをPRに付与 - バグ対応:
bug
ラベルをPRに付与
カスタマイズされたラベルを利用している場合は、任意のラベルに書き換えて使ってください。
「詳細を確認する」をクリックすると、マージコミットの詳細(PRの本文)が表示されます。
## Productionリリース <%= Time.now.strftime('%Y-%m-%d %H:%M:%S') %>
## このリリースに含まれる更新内容
<% label_names = { 'enhancement' => '新機能(enhancement)', 'improvement' => '改善(improvement)', 'bug' => 'バグ改修(bug)', 'other' => 'その他' } -%>
<% label_names.each do |label_name, label_display_name| -%>
<% filtered_prs = pull_requests.select do |pr|
if label_name == 'other'
pr.labels.none? { |label| ['improvement', 'bug', 'enhancement'].include?(label.name) }
else
pr.labels.any? { |label| label.name == label_name }
end
end -%>
<% next if filtered_prs.empty? -%>
### <%= label_display_name %>
<% filtered_prs.each do |pr| -%>
- #<%= pr.number %> <%= pr.mention %>
<% end -%>
<% end -%>
<details>
<summary>更新内容を振り分ける方法</summary>
更新内容を振り分ける方法は以下の通りです。
- 新機能: `enhancement` ラベルをPRに付与
- 新たに追加された機能がある場合に付与します
- 改善: `improvement` ラベルをPRに付与
- 既存の機能の改善がある場合に付与します
- 既存機能の性能向上、最適化など
- バグ改修: `bug` ラベルをPRに付与
- 既存機能に関するバグの修正がある場合に付与します
後からラベルを付与することも可能ですが、更新はそのままでは実行されません。
その場合は`git-pr-release` ジョブを手動再実行してください。
</details>
## このリリースに含まれるマージコミットの詳細
<details>
<summary>詳細を確認する</summary>
<% pull_requests.each do |pr| -%>
### <%= pr.merge_commit_sha %> <%= pr.title %> <%= pr.mention %>
<%= pr.body %>
<% end -%>
</details>
git-pr-release.yml
の内容も貼り付けておきます。--overwrite-description
を使って更新の都度上書きしないと意図した挙動になりません。上書きするので手動で書き換えても次の更新で消えてしまうので注意です。
workflow_dispatchを追加することで、任意のタイミングで手動実行することも出来るので、マージ後にラベルを付与し忘れたことを思い出しても対応する事ができます。
envの値などの詳細はここでは触れていないので、git-pr-releaseを参照してください。
# .github/workflows/git-pr-release.yaml
name: git-pr-release
on:
push:
branches:
- develop
workflow_dispatch:
jobs:
git-pr-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # git-pr-release needs the git histories
- uses: actions/setup-ruby@v1
with:
ruby-version: 3.1
- run: gem install --no-document git-pr-release
- run: git-pr-release --squashed --overwrite-description
env:
GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_PR_RELEASE_BRANCH_PRODUCTION: master
GIT_PR_RELEASE_BRANCH_STAGING: develop
GIT_PR_RELEASE_LABELS: pr-release
GIT_PR_RELEASE_TEMPLATE: .github/git-pr-release.erb
TZ: Asia/Tokyo