4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubでmasterを守るための設定項目を調べた

Posted at

前置き

Github-flowに従うプロジェクトにおいてmasterブランチは神聖な場所であり、そこにはプルリクエスト上で以下の声を掛けられたソースコードだけが到達され得るべきであります。

  • レビュワーによる***「LGTM!」***
  • CIによる***「All checks have passed」***

なので、ローカルPCからmasterブランチへ直接Pushを行うなど、言語道断の所業です。

また、上記2つの声を掛けられていないにも関わらず、プルリクエストをマージすることもあってはならないのですが、人間社会というのは止事無き事情がまま起きてしまう業の深い場所ですので、

  • レビュワーによる 「LGTM!」
  • CIによる「All checks have passed」

という最低限の条件の下、可及的速やかにmasterへマージできることも、時には認めざるを得ません。

失敗

ご承知の通り、GitHubには Branch protection rule という設定項目が存在し、これを使うとmasterブランチへの(に限らずお好きなブランチへの)コードの無秩序な流入を食い止めることが可能です。

そんな訳でRequire pull request reviews before mergingにチェックを付けます。そこにはこんな説明があります。

When enabled, all commits must be made to a non-protected branch and submitted via a pull request with the required number of approving reviews and no changes requested before it can be merged into a branch that matches this rule.

(この設定が有効な場合、全てのコミットは(ルールが適用されていない)その他のブランチに対して行った上で、該当ブランチにマージする前に、プルリクエスト経由で必要な数の承認レビューが必要です。)

やれやれ、これでmasterは守られたと思っていたのです。
(しかも、Admin権限があれば(CIの目視チェックだけは作成者に課すにしても)強制的にmasterへマージできることも経験的に知っていました)

ところがこの設定だけだと、Admin権限を持っていればローカルPCからmasterへ直接Pushができるということを最近になって知りました・・・。さすがにそれはマズいわぁ、何とかしたいわぁ、という訳で調査した結果がこの記事です。

調査

以下、GitHubのFreeプラン・Publicリポジトリで検証しましたが、Teamプランであっても雰囲気は同じだと思います(たぶん)。

調査内容としては、Branch protection ruleの設定を付けたり消したりしながら、各権限のユーザーでどういった操作が可能であるかを一つ一つ調べました。

1. デフォルトの状態

  • Branch protection ruleには何も設定していない
権限 masterへ直接Push レビューのないプルリクからのMerge
Owner
Collaborator
その他 × x

2. レビューを必須にした状態

masterブランチに対して、

  • Require pull request reviews before merging にチェック
権限 masterへ直接Push レビューのないプルリクからのMerge
Owner ○ (*1) △ (*2)
Collaborator × ×

3. 管理者もルールの適用対象にした状態

masterブランチに対して、

  • Require pull request reviews before merging にチェック
  • Include administrators にチェック
権限 masterへ直接Push レビューのないプルリクからのMerge
Owner × × (*3)
Collaborator × ×

結論

表をきちんと精読した人には分かったと思いますが、結論、前書きに出てきたわがままボディを満足させる設定は、探し当てることができませんでした。が〜〜〜ん。ここまで読んでいただいたにも関わらず申し訳ございません。 :bow:

以下、表中の備考です。

  • (*1) これだけを防ぎたかったのが今回の記事の目的です。
  • (*2) Merge画面で Use your administrator privileges to merge this pull request. にチェックを付けるだけです。
  • (*3) 止事無き事情によりこれはできて欲しい。

本当の目的

こんな設定を知ってるよ〜、を教えてください :bow:

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?