目次
概要
GitHub
でオープンソースを管理したり、バージョンを管理する時、Release note
を作成するようにします。

しかし、毎回、Pull request
を作ってRelease note
を作成したり、リリースする前にGit
のヒストリを見ながらRelease note
を作成することは辛いです。
今回のブログポストではGitHub Actions
のRelease Drafter
を使ってPull request
のタイトルでRelease note
を自動で作成する方法について説明します。
ブログシリーズ
このブログはシリーズで作成しております。下記のリンクを参考して他のブログポストも確認してみてください。
- [GitHub Actions] Pull requestのタイトル検査
- [GitHub Actions] Release Drafterを使ってGitHubのRelease noteの自動化をする
- [GitHub Actions] Pull requestのラベル検査
- [GitHub Actions] Changelogファイルの自動アップデート
Release Drafterの設定ファイル
Release Drafter
を使ってRelease note
を自動で作成するためには、Release Drafter
の設定ファイルがmain(master)
ブランチに存在する必要があります。
Release Drafter
の設定ファイルを作るため、.github/release-drafter.yml
ファイルを生成して次のように修正します。
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
patch:
labels:
- 'patch'
default: patch
categories:
- title: '⚠️ Breaking changes'
labels:
- 'breaking change'
- title: '🚀 Features'
labels:
- 'feature'
- title: '🐛 Bug Fixes'
labels:
- 'bug'
- title: '📃 Documents'
labels:
- 'docs'
- title: '🧩 Dependency Updates'
labels:
- 'deps'
- 'dependencies'
- 'bump'
- 'chore'
collapse-after: 5
- title: '🔬 Others'
labels:
- 'style'
- 'refactor'
- 'test'
- 'ci'
collapse-after: 5
autolabeler:
- label: 'breaking change'
title:
- '/!:/i'
- label: 'feature'
title:
- '/feat:/i'
- label: 'bug'
title:
- '/fix:/i'
- label: 'style'
title:
- '/style:/i'
- label: 'refactor'
title:
- '/refactor:/i'
- label: 'test'
title:
- '/test:/i'
- label: 'chore'
title:
- '/chore:/i'
- label: 'docs'
title:
- '/docs:/i'
- label: 'ci'
title:
- '/ci:/i'
- label: 'dependencies'
title:
- '/deps:/i'
- '/dependencies:/i'
- '/bump:/i'
commitish: main
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&'
template: |
$CHANGES
Release Drafter
の設定ファイルをもっと詳しく見てみましょう。
バージョン
Release Drafter
は基本的にPull request
のラベルを使って動作します。Release Drafter
は以前にリリースしたRelease note
のバージョンを見てRelease note
のDraft
を作成します。
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
patch:
labels:
- 'patch'
default: patch
...
この時、以前のバージョンより上のバージョンのDraft
を作成ますが、以前より上のバージョンのDraft
を作成するためversion-resolver
を使います。
Pull request
のラベルにpatch
、minor
、major
を設定すると、Release Drafter
がこれを認識してDraft
のバージョンを上げます。もし、Pull request
のラベルが設定されない場合、default
の値が設定されることになります。この例題ではpatch
を基本値で設定したので、ラベルが設定されない場合、patch
のバージョンが上がるようになります。
Pull request
ごとバージョンが上がるわけではなく、最後にマージ(Merge)されたPull request
のラベルによってRelease note
のバージョンが決定されます。
このブログポストではこのバージョンではなく、Git
のTag
を使って最終バージョンを決める予定です。
categories
categories
オプションを使うと、Release note
に作成される内容を分類して作成することができます。
...
categories:
- title: '⚠️ Breaking changes'
labels:
- 'breaking change'
- title: '🚀 Features'
labels:
- 'feature'
- title: '🐛 Bug Fixes'
labels:
- 'bug'
- title: '📃 Documents'
labels:
- 'docs'
- title: '🧩 Dependency Updates'
labels:
- 'deps'
- 'dependencies'
- 'bump'
- 'chore'
collapse-after: 5
- title: '🔬 Others'
labels:
- 'style'
- 'refactor'
- 'test'
- 'ci'
collapse-after: 5
...
このcategories
オプションを使うと、Release note
の内容を次のように分類することができます。

このカテゴリもPull request
のラベルによって決定されます。labels
オプションに設定されたラベルがtitle
カテゴリの下に作成されます。また、collapse-after
オプションを使って作成される内容が多い場合、折り畳んで表示することができます。
autolabeler
categories
を使ってRelease note
に作成される内容を分類することができますが、これはPull request
のラベルによって決定されます。従って、誤ってラベルを作成しながったら、その内容はRelease note
に表示されないです。
これを防ぐためにRelease Drafter
はautolabeler
を提供します。
...
autolabeler:
- label: 'breaking change'
title:
- '/!:/i'
- label: 'feature'
title:
- '/feat:/i'
- label: 'bug'
title:
- '/fix:/i'
- label: 'style'
title:
- '/style:/i'
- label: 'refactor'
title:
- '/refactor:/i'
- label: 'test'
title:
- '/test:/i'
- label: 'chore'
title:
- '/chore:/i'
- label: 'docs'
title:
- '/docs:/i'
- label: 'ci'
title:
- '/ci:/i'
- label: 'dependencies'
title:
- '/deps:/i'
- '/dependencies:/i'
- '/bump:/i'
...
autolabeler
を使うとPull request
のタイトル、本文、ファイル、ブランチでPull request
のラベルを自動で設定することができます。
commitish
Release Drafter
は基本的refs/heads/master
を基準で動作します。従って、私ようにmain
ブランチを使う方はcommitish
にmain
を設定して基本ブランチがmaster
ではなくmain
であることをRelease Drafter
に知らせる必要があります。
...
commitish: main
...
作成内容
Release note
の作成内容を決定するオプションです。change-template
の方にで変更の内容が作成されるし、template
のオプションで変更した内容以外の内容を追加して表示することができます。
...
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&'
template: |
$CHANGES
また、change-title-escapes
オプションを使ってPull request
のタイトルから除外したい文字を追加することができます。
GitHub Actions
Release Drafter
を使う準備が終わりました。今からRelease Drafter
を実行するGitHub Actions
を作成してみましょう。
.github/workflows/release-drafter.yml
ファイルを生成して、次のように修正します。
name: Release Drafter
on:
push:
branches:
- main
pull_request:
types:
- opened
- reopened
- edited
- synchronize
permissions:
contents: read
jobs:
update_release_draft:
permissions:
contents: write
pull-requests: write
checks: write
runs-on: ubuntu-latest
steps:
- uses: release-drafter/[email protected]
env:
GITHUB_TOKEN: $
このようにGitHub Actions
を追加すると、Pull request
が生成される時Pull request
のタイトルによってラベルが自動で生成されることが確認できます。また、マージ(Merge)されると自動でRelease note
がアップデートされることが確認できます。
Git tagを使ってRelease noteをリリースする
Release Drafter
を使って作成したRelease note
はdraft
でまだリリースされてない状態です。このように作成されたRelease note
をRelease Drafter
を使ってリリースすることができます。
draft
の状態であるRelease note
をリリースするため.github/workflows/release.yml
ファイルを作って次のように修正します。
name: Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
jobs:
release:
permissions:
contents: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Get semantic version
id: semver
run: echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"
- uses: release-drafter/[email protected]
with:
tag: $
name: $
version: $
publish: true
env:
GITHUB_TOKEN: $
次のようにGit tag
を作成すると、このGitHub Actions
を使うことができます。
# git checkout main
git tag v1.0.0
git push origin v1.0.0
Conventional PR Title Action
このブログポストではRelease Drafter
のautolabeler
がPull request
のタイトルで自動でラベルを貼るようにしました。従って、Pull request
を作る時、自動でラベルを追加するためPull request
のタイトルを検査する必要があります。
この時、使えるGitHub Actions
がConventional PR Title Action
です。
Conventional PR Title Action
を設定する方法については下記のリンクを参考してください。
完了
これでGitHub Actions
のRelease Drafter
を使ってPull request
のタイトルでRelease note
を自動で作成する方法について見てみました。オープンソースを運用したり、Release note
をうまく管理したい場合はRelease Drafter
の導入をお勧めします。
もし、CHANGELOG.md
ファイルを管理するプロジェクトの場合、GitHub Actions
を使ってRelease note
内容を自動でCHANGELOG.md
ファイルに記録することができます。CHANGELOG.md
ファイルを自動でアップデートする方法については下記のリンクを参考してください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。