小規模OSSプロジェクトにおけるGitHub FlowのBranch Protection設定
Table of Contents
前提条件
- GitHub上のOSSリポジトリ
- リポジトリのAdmin権限
- GitHub Flowワークフローの使用
- Defaultブランチは
main - FeatureブランチはDefaultブランチから作成され、Pull requestを経てDefaultブランチにマージされる
- Pull requestはコードレビュー、Continuous integration (CI) チェックに使用される
- Defaultブランチは
達成したいこと
- 誰もDefaultブランチに直接pushできない。すべての変更はPull requestを通じて行われなければならない
- Pull requestをマージする前にCIチェックがpassする必要がある
- CopilotがPull requestのレビューに自動追加され、コードレビューを支援してコード品質を維持する
- Pull requestをマージする前にすべての会話が解決されなければならない
- Pull requestは
Squash and mergeまたはRebase and mergeを使用してマージし、クリーンなコミット履歴を維持する - Pull requestがマージされた後にブランチを自動的に削除し、リポジトリをクリーンで整理された状態に保つ
GitHubリポジトリの設定
General設定
GitHubリポジトリ > Settings > Generalに移動
Default branchをmainに設定するAllow merge commitsを無効にして、Defaultブランチへのマージコミットを防ぎ、よりクリーンなコミット履歴を維持するAllow squash mergingを有効にする。これはFeatureブランチのすべてのコミットを1つのコミットにまとめることで、よりクリーンなコミット履歴の維持に役立つAllow squash mergingのPull request title and descriptionを設定する。これにより、マージされる変更のコンテキストが提供される
Allow rebase mergingを有効にする。これはFeatureブランチのコミットをDefaultブランチにマージする前にrebaseすることで、よりクリーンなコミット履歴の維持に役立つAllow auto-mergeを無効にして、CIチェックとコードレビューをpassせずにPull requestが自動的にマージされるのを防ぐAutomatically delete head branchesを有効にして、Pull requestがマージされた後にFeatureブランチを自動的に削除し、リポジトリをクリーンで整理された状態に保つ
Rules設定
GitHubリポジトリ > Settings > Rules > New rulesetに移動
<Ruleset name>をRuleset nameに設定するActiveをEnforcement statusに設定するDefault branchをTarget branchesに設定するRequire a pull request before mergingを有効にして、Defaultブランチへのすべての変更がPull requestを通じて行われるようにする。これにより、マージ前にコードレビューとCIチェックが可能になるRequire conversation resolution before mergingを有効にする。これはコード品質の維持と、すべてのフィードバックが対応されることを確実にするのに役立つAllowed merge methodsでMergeを無効にしてSquashとRebaseを有効にする。これはマージコミットを防ぎ、squashとrebaseマージのみを許可することで、よりクリーンなコミット履歴の維持に役立つ
Require status checks to passを有効にして、Pull requestをマージする前にすべてのCIチェックがpassすることを確実にする。これはコード品質の維持と、壊れたコードがDefaultブランチにマージされるのを防ぐのに役立つ- 設定したCIアクションを
Status checks that are requiredに追加する。これにより、設定した特定のCIチェックがPull requestのマージ前にpassすることが必須になる
- 設定したCIアクションを
Block force pushesを有効にして、Defaultブランチへのforce pushを防ぐ。force pushはコミット履歴を上書きし、コラボレーターに問題を引き起こす可能性があるAutomatically request Copilot code reviewを有効にして、コードレビューを支援しコード品質を維持する