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. 設定変更は Settings → Applications から行う

    画像

    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 規約に従っているかどうかを自動チェックさせることができた。