branchのprefixからリリースノートを作成出来るようにしました
こんにちは。kubopです。
先日、GitHub Actionsを使い、branchのprefixから、PRに自動的にlabelをつけ、そのlabelから機能開発や不具合修正などの分類分けをしたrelease PRを作成しました。
課題
リリースノート作成が面倒臭い
noteでは毎日リリースノートをQAチームが手動で作成しており、内容を把握した上で機能開発や、その他の分類分けの判断が難しく、煩雑でした。
混ぜるなキケンのPRがあった
例えば、migrationのPRと、アプリケーションコードのPRが混ざってリリースされると不具合が発生したりすることがあり、もし混ざってリリースされると事故に発展する恐れがありました。
branchのprefixからlabelをつける
今回は、既にマーケットプレイスにある下記を利用しました。
実装しようかな?と思った矢先に見つけたのでラッキーでした。
ドキュメントにある通りですが、workflows/以下にActionを実装し、.github/pr-branch-labeler.ymlに反応して欲しいprefixを指定し、それによってどのlabelを貼って欲しいかを記載するだけで動きます。
.github/workflows/pr-branch-labeler.yml
name: PR Branch Labeler
on: pull_request
jobs:
label_prs:
runs-on: ubuntu-latest
steps:
- name: Label PRs
if: github.event.action == 'opened' # Only run the action when the PR was first opened
uses: ffittschen/pr-branch-labeler@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
.github/pr-branch-labeler.yml
# Apply label "feature" if head matches "feature/*"
feature:
head: "feature/*"
# Apply label "bugfix" if head matches one of "bugfix/*" or "hotfix/*"
bugfix:
head: ["bugfix/*", "hotfix/*"]
...
なんと本当にこれだけ。なんて簡単なんでしょう!
label毎にPRが分類されたrelease PRを作成する
release PRを作成するのに、git-pr-releaseを利用しました。
erbで簡単にrelease PRのdescriptionを編集できるので非常に便利ですね。
こちらはCLIで実行可能なので、GitHub Actionsで実行できるようにしちゃいます。
.github/workflows/git-pr-release.yml
name: git-pr-release
on:
repository_dispatch:
types:
- git-pr-release
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 -v "2.2.0"
- run: git-pr-release
env:
GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_PR_RELEASE_BRANCH_PRODUCTION: main
GIT_PR_RELEASE_BRANCH_STAGING: develop
GIT_PR_RELEASE_LABELS: pr-release
GIT_PR_RELEASE_TEMPLATE: .github/templates/git-pr-release.erb
.github/templates/git-pr-release.erb
feature labelを絞り込みたい場合はこんな感じ↓
[Release] <%= Time.now.localtime("+09:00").strftime("%Y-%m-%d %H:%M:%S") %>
<% fixed_labels = {feature: 'feature', bugfix: 'bugfix'}-%>
<% feature_pr = pull_requests.filter{ |pr| pr.labels.any?{ |l| l.name == fixed_labels[:feature]} }-%>
...
## 機能開発
<% feature_pr&.each do |pr| -%>
<%= "- [#{pr.title}](#{pr.html_url}) by #{pr.mention}" %> ## markdownで欲しかったので、こういう書き方にしてます。
<% end -%>
...
workflow_dispatchを指定してあげているので、以下のように、手動で実行できますし、repository_dispatchを指定しているので、APIを叩いて実行してあげることもできます。
無事、branchからlabelを貼って、それ毎に分類されたrelease PRを作成出来ました!これで簡単にリリースノートが作成出来ますね!
この記事が気に入ったらサポートをしてみませんか?