Githubのリポジトリで、mainブランチへ直接pushできないようにします。
Githubのリポジトリを見に行くと「あんたのmainブランチ、守られてないよ?」と言ったメッセージが以前から出ていたものの、何もせずに放置していたのですが、そろそろプロテクトを掛けようかな?と思い立ちました。
mainブランチへの直接pushを僕はやってしまいがちなのですが、ちゃんと作業ブランチを切ろうよとは常々思っているところでして。
プロテクションルールの公式ドキュメント
こちらになります
プロテクションルールはどうしたか?
mainブランチにプロテクションを設定する前に、まずプロテクションルールを決めます。ルールはいくつか用意されており、その中から好きなルールを選んで適用させていくのですが、今回は次のルールを適用することにしました。
プロテクションルールはどうやって作ったか?
ルールを作るために、Settings > Code and automation > Branches > Branch protection rulesと進み、Add branch protection ruleボタンを押します。
表示されたページで、Branch name patternに「main」と入力します。今回はmainブランチに対してルールを適用するので「main」と入力しますが、他のブランチにも適用する場合は正規表現のような形でブランチ名を入力します。
(例:productで始まるブランチ全てに適用する場合:product*)
次に、Protect matching branchesにある以下の項目にチェックを付けて有効にします。
- Require a pull request before merging
- これを有効にすると、コミットをマージするにはプルリクエストが必須になる
- Require approvals
- Dismiss stale pull request approvals when new commits are pushed
- これを有効にすると、1度承認したブランチに新しいコミットがなされた場合に、その承認を取り消す
- Require review from Code Owner
- これを有効にすると、コードオーナー(ここでは、つまり自分)のレビューが必須になる
Require approvalsが無効、Require review from Code Ownerが有効のリポジトリにプルリクエストを出したときの様子
実はこのままだと、管理者アカウント(ここでは、つまり自分)は全てのルールを貫通します。そのため、下の方にある「Do not allow bypassing the above settings」にもチェックを付けて有効にします。これで、管理者アカウントにもプロテクションルールが適用されるようになります。
そして、Createボタンを押してプロテクションルールを作成します。これでmainブランチに対してルールが適用されます。
しかし、最後にもう一つ作業だけがあります。コードオーナーの設定です。
コードオーナーの設定は、CODEOWNERSファイルを作成・編集してブランチに追加すればOKです。以下の手順で行います。
- 修正用のブランチを切る(例:add-codeowners-file)
- .githubフォルダ(ドットgithubフォルダ)をプロジェクトのルートに作る
- .githubにCODEOWNERSを作成
- CODEOWNERSを開いて「* @your-github-account」を入力して保存して閉じる
- 例:* @imyme
- 「*」とするとプロジェクト内の全ファイルがレビュー対象になる
- 「kokodake/*」等とすると「kokodake/」以下が対象になる
- commitしてリポジトリにpush
- この時点で、ブランチを切らずにmainブランチでCODEOWNERSを作成し、かつプロテクションルールをすでに設定しているとpushがエラーになる
- そのときは、一旦、プロテクションルールを削除するか、「Do not allow bypassing the above settings」を無効にする。これでmainブランチに直接pushした後、設定を元に戻す
もしmainブランチのまま作業すると。。。
XXXX@XX ~/RubyScripts/MyProject on main
$ ls -al
drwxr-xr-x .git
-rw-r--r-- README.md
-rw-r--r-- my.rb
$ mkdir .github
$ vi .github/CODEOWNERS
* @imyme <-入力
$ ls -al .github
-rw-r--r-- CODEOWNERS
$ git add -A
$ git commit -m "Add a owners file"
$ git push origin main
(中略)
remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: At least 1 approving review is required by reviewers with write access.
To github.com:XXXXX/MyProject.git
! [remote rejected] main -> main (protected branch hook declined)
error: failed to push some refs to 'github.com:XXXXX/MyProject.git'
エラーが出て、mainブランチのpushに失敗します。