見出し画像

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/*"]

...

なんと本当にこれだけ。なんて簡単なんでしょう!

feature/のprefixをつけると自動的にfeatureが貼られる。

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を叩いて実行してあげることもできます。

Actionsタブから実行できます。
完成イメージ!

無事、branchからlabelを貼って、それ毎に分類されたrelease PRを作成出来ました!これで簡単にリリースノートが作成出来ますね!


この記事が気に入ったらサポートをしてみませんか?