GitHubのプルリクエストがConventional Commits規約に則っていることを自動で検証


動機🧐

release-drafter を使ってリリース作業を自動化しようとしたとき、プルリクエストのタイトルが Conventional Commits 規約に従っている必要がある。

よってプルリクエストを作成したら書式を自動チェックさせたい。

GitHub Apps で自動チェックする🔬

Semantic Pull Requests という GitHub Apps を使えば、自分のリポジトリ全体(もしくは特定の一部)でプルリクエストの書式を検証できる。

これはプルリクエストのタイトルまたはコミットが Conventional Commits の規約に則っていることを検証する。
デフォルトではプルリクエストのタイトルもしくは最低1つのコミットが Conventional Commits 規約に則っていればOKとする。

Semantic Pull Requests インストール🚀

  1. GitHub Apps ページからインストール開始

    画像

    GitHub Apps page

  2. 適用するリポジトリ対象を選択してインストール

    画像

    インストール画像

  3. 設定変更は SettingsApplications から行う

    画像

    GitHub Apps の設定


以上、とりあえずインストールボタンをクリックするだけで動くようになる。

Semantic Pull Requests の設定⚙️

ブランチの保護設定

GitHub の設定になるが、リポジトリでブランチの保護設定を有効化して Semantic Pull Requests のチェックを必須にしておくのがおすすめ。

必須にしておくことでプルリクエストが Conventional Commits 規約に従っていることを保証できる。

設定ファイル

デフォルト設定のまま動かすのであれば必要ない。
動作を変更したい場合は、リポジトリ内で .github/semantic.yml ファイルを作成して設定・管理する。

Table 1. 設定オプション
プロパティ 説明

titleOnly

boolean

コミットは無視してプルリクエストのタイトルを検証する

commitsOnly

boolean

プルリクエストのタイトルは無視してコミットを検証する

titleAndCommits

boolean

プルリクエストのタイトルと全てのコミットを検証する

anyCommit

boolean

少なくとも1つのコミットが合格する必要がある
この設定は commitsOnly または titleAndCommits が有効な場合にのみ有効

scopes

array

適正とする scope の値を配列で指定する

types

array

適正とする type の値を配列で指定する
デフォルト値は commitizen/conventional-commit-types と同じ

allowMergeCommits

boolean

マージコミット( Merge branch 'main' into …​ )を許容する
commitsOnly または titleAndCommits が有効な場合にのみ有効

allowRevertCommits

boolean

Revertコミット( Revert "feat: nanika" )を許容する
commitsOnly または titleAndCommits が有効な場合にのみ有効

Example 1. プルリクエストのタイトルだけを検証したい
.github/semantic.yml
titleOnly: true
commitsOnly: false
titleAndCommits: false

おわりに😎

Semantic Pull Requests を使うことで、プルリクエストのタイトルが Conventional Commits 規約に従っているかどうかを自動チェックさせることができた。