目次
概要
GitHub
でプロジェクトを管理する時、GitHub
のRelease notes
を使ってそのバージョンで追加された機能、修正されたバグ、改善された事項、削除された機能などを記録することができます。
今回のブログポストでは、GitHub Actions
の中で一つであるRelease Drafter
を使ってGitHub
のRelease notes
の作成を自動化する方法について説明します。 이번 블로그 포스트에서는 GitHub Actions
중 하나인 Release Drafter
를 사용하여 GitHub
의 Release notes
작성을 자동화하는 방법에 대해서 알아보겠습니다.
ブログシリーズ
このブログはシリーズで制作されました。次のリンクを通じて他のブログポストも確認してください。
- [GitHub Actions] Pull request のタイトルチェック
- [GitHub Actions] Release notes の自動化
- [GitHub Actions] Pull request のラベルチェック
Release notes とは
Release notes
はソフト開発で新しいバージョンやアップデートがリリースされる時、ユーザーまたは開発者に提供される文書です。この文書にはそのバージョンで追加された機能、修正されたバグ、改善された事項、削除された機能などが記録されます。Release notes はユーザーまたは他の開発者が新しいバージョンに対する変更点を簡単に把握できるようにする役割を果たします。
GitHub
を使っている場合、リポジトリ(Repository)に次のようにReleases
項目を確認することができます。

そのリンクをクリックすると次のようにRelease notes
の詳細画面を確認することができます。

Release Drafter
Release Drafter
はGitHub Actions
の中で一つであり、Pull request
のタイトルを使ってRelease notes
を作成する機能を提供します。
Release Drafter の設定
GitHub Actions
であるRelease Drafter
を使うためにはmain
ブランチに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
もっと詳しく見てみましょう。
name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
patch:
labels:
- 'patch'
default: patch
GitHub
のRelease notes
のタイトルを指定する部分です。$RESOLVED_VERSION
はGitHub
のlabels
を基にバージョンを決定する時に使われます。
version-resolver
はPull request
でバージョンを上げるために使われるlabels
を指定する部分です。もし、どのlabel
も指定されない場合、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
categories
はPull request
のlabel
を基にRelease notes
の内容のカテゴリを指定する部分です。labels
に指定されたlabel
があれば、そのlabel
に指定されたカテゴリにRelease notes
に記録されます。
collapse-after
オプションは指定された個数以上のPull request
がある場合、そのカテゴリの内容を折りたたんで表示するオプションです。
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'
Release Drafter
はPull request
のタイトルを基にGitHub
のlabel
を自動で指定する機能を提供します。autolabeler
はPull request
のタイトルを正規表現でチェックしてlabel
を指定する部分です。
commitish: main
commitish
はRelease Drafter
がPull request
のタイトルをチェックするブランチを指定する部分です。
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-template
はRelease notes
の内容を指定する部分です。$TITLE
はPull request
のタイトル、$AUTHOR
はPull request
を作成したユーザー、$NUMBER
はPull request
の番号を表します。
change-title-escapes: '\<*_&'
change-title-escapes
はPull request
のタイトルから除外する文字を指定する部分です。.
template: |
$CHANGES
template
はRelease notes
の全体のテンプレートを指定する部分です。$CHANGES
はchange-template
で指定した内容を表します。
このように作成したRelease Drafter
の設定ファイルはRelease Drafter
アクションが実行される時に使われるので、Release Drafter
アクションを作成して実行する前にmain
ブランチに追加される必要があります。
Release notes の Draft 作成
次はRelease Drafter
を使うGitHub Actions
を作成してみましょう。Release Drafter
アクションを作成するため.github/workflows/release-drafter.yml
ファイルを作って次のように修正します。
name: Release Drafter
on:
push:
branches:
- main
pull_request:
types:
- opened
- reopened
- synchronize
permissions:
contents: read
jobs:
update_release_draft:
permissions:
contents: write
pull-requests: write
checks: write
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このGitHub Actions
はPull request
が生成されたら、autolabeler
を使ってPull request
のタイトルに合うlabel
を自動で指定します。
そしてPull request
がmain
ブランチにmerge
されたらRelease Drafter
アクションが実行されてRelease notes
のDraft
を作成することになります。
Release notes 公開
今まではRelease Drafter
を使ってRelease notes
のDraft
を作成する方法について説明しました。次はRelease notes
のDraft
を公開(Publish
)する方法について説明します。
Release notes
のDraft
を公開するため.github/workflows/release.yml
ファイルを作って次のように修正します。
name: Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
jobs:
release:
permissions:
contents: write
pull-requests: write
id-token: write
runs-on: ubuntu-latest
steps:
- name: Get variables
id: version
run: echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"
- uses: actions/checkout@v4
with:
ref: v${{ steps.version.outputs.version }}
- uses: release-drafter/release-drafter@v5
with:
tag: v${{ steps.version.outputs.version }}
name: v${{ steps.version.outputs.version }}
version: v${{ steps.version.outputs.version }}
publish: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このGitHub Actions
はセマンティックバージョン(Semantic Version)のGit tag
に動作し、Release Drafter
のpublish
オプションを使ってDraft
で作成されたRelease notes
を公開することになります。
完了
これでGitHub Actions
のRelease Drafter
を使ってGitHub
のRelease notes
の作成を自動化する方法について説明しました。
Release Drafter
はPull request
のlabel
を基に動作します。そのため、Pull request
に適切なlabel
が設定されているか確認することが重要です。
次のブログポストではPR Labels Checker
アクションを使ってPull request
のlabel
をチェックする方法について説明します。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。