GitHub の Delegated bypass for push rules を試す
これ。「Push rule delegated bypass public beta!」
- push rules で新しい委任されたバイパスフローを追加したぜ!
- これまでは、バイパスするには push rules であらかじめバイパスリストに含める必要があったぜ
- 委任されたバイパス(delegated bypass)により、コントリビュータは push rules のバイパスを提案できて、バイパスリストのメンバは要求を確認して許可・拒否できるぜ
ドキュメント
-
Granting bypass permissions for your push ruleset
-
You can grant certain roles, teams, or apps bypass permissions as well as the ability to approve bypass requests for your ruleset. The following are eligible for bypass access:
- バイパス許可を付与すると、ルールセットのバイパス要求を承認する権限を付与できるよ
-
-
Managing requests to bypass push rules
- バイパス権限の全ての要求はリポジトリ設定から表示・管理できるよ
- 要求一覧では「承認者(バイパスリストのメンバー)」、「要求者(要求を行うコントリビュータ)」、期間、ステータスでフィルタリングできるよ
- ステータス一覧
-
Cancelled
: 要求はコントリビュータによって取り消された -
Completed
: リクエストが承認され、コミットがリポジトリにプッシュされた -
Denied
: 要求は確認され、拒否された -
Expired
: 要求の有効期限が切れた。要求の有効期限は 7 日間。 -
Open
: 要求はまだレビューされてないか、承認されているがコミットがプッシュされていない
-
- コントリビュータがバイパス要求をすると、承認者全員にリクエストへのリンクが記載されたメールが届くよ
- コントリビュータはメールで承認可否を通知されるよ
- 要求が承認されると、コントリビュータはコミットをプッシュできるよ
使ってみたまとめ
- こういうのほしかった。push rules はめちゃ嬉しい機能だけどコントリビューションしづらくなっちゃうので
- コントリビュータ側はライトに要求を申請できて良い
- 承認側はいくつか気になる点があった
- 届くはずの申請されたメールが届かなかった
-
ファイルとコミットハッシュしか確認できないため、承認可否の判断が難しい
- コミットの詳細がほしい。親とかファイルの差分とか
- もしかして見る方法あったのか?ドキュメント軽くみる感じわからなかった
- わかる人いたら教えてください
- まだ public beta であることに注意。今回の気になった点も改善されるだろう
- 単純に俺の使い方が悪かった説もある
- ワンチャン community discussion に投稿か?
試してみる
- 自分が管理権限を持っている org で、書き込み権限はあるが管理権限を持ってないユーザと協力して試す
push ruleset の作成
今回は雑に .kiba/**/*
を拒否するようにした。
バイパスリストにいないユーザでプッシュ
.kiba/**/*
を制限しているので、それらを含んだコミットを作成
$ git status
On branch kiba-0705
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .kiba/foo/foofoo
new file: .kiba/fuga
new file: .kiba/hoge
$ git commit -m "push rulesets デリゲートのテスト"'
[kiba-0705 21364d] push rulesets デリゲートのテスト
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 .kiba/foo/foofoo
create mode 100644 .kiba/fuga
create mode 100644 .kiba/hoge
push
$ git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 10 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 728 bytes | 728.00 KiB/s, done.
Total 5 (delta 1), reused 1 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: error: GH013: Repository rule violations found for refs/heads/kiba-0705.
remote: Review all repository rules at http://github.com/<owner>/playground/rules?ref=refs%2Fheads%2Fkiba-0705
remote:
remote: - GITHUB PUSH PROTECTION
remote: —————————————————————————————————————————
remote: Resolve the following violations before pushing again
remote:
remote: - File path is restricted
remote: Found 3 violations:
remote:
remote: .kiba/foo/foofoo
remote: .kiba/fuga
remote: .kiba/hoge
remote:
remote: (?) To push, resolve push protection violations or follow this URL to request push protection bypass.
remote: https://github.com/<owner>/playground/exemptions/new/***
remote:
To https://github.com/<owner>/playground.git
! [remote rejected] kiba-0705 -> kiba-0705 (push declined due to repository rule violations)
error: failed to push some refs to 'https://github.com/<owner>/playground.git'
GITHUB PUSH PROTECTION
無事 push protection でプッシュに失敗した。
(?) To push, resolve push protection violations or follow this URL to request push protection bypass.
remote: https://github.com/<owner>/playground/exemptions/new/***
そして、「プッシュするには、プッシュ保護違反を解決するか、このURLに従ってプッシュ保護バイパスをリクエストしてください。」という旨のメッセージと URL が出てきた。
バイパス要求を作成
https://github.com/<owner>/playground/exemptions/new/***
をクリック。
- ユーザ
- リポジトリ
- コミットハッシュ
- 日時
- 対象ファイル
- コミットハッシュとパスの組のリスト
- プッシュルール名
- コメント
- コメントの追加は必須
- 送信ボタン
コメントに適当な内容を入れて送信クリック。
無事要求が作成された
View approvers
をクリックするとバイパスリストの内容が見れた
Cancel request
をクリックするとキャンセルされた
バイパス要求を承認する
ここからバイパスリストにいるユーザでの作業。
(一度キャンセルしたので再度要求させた。)
バイパスリストのユーザにメールが届くとのことだったが、届かなかった。
Bypass requests ページを見にいく
要求が来てる。
クリックで中身が見れる。
申請時と同じような内容が見れる。もちろんコメントもある。
コミットハッシュはあるがファイルの差分は見れない?これじゃ承認可否の判断材料がないような
却下か承認ができる。
Deny bupass request
Approve bypass request
承認する。
承認できた。
Dismiss approval
とあるので、やっぱ却下!ということもできそう。
承認されたあと
コントリビュータのメアドに承認された旨が届いた。
再度 push する
$ git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 10 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 728 bytes | 728.00 KiB/s, done.
Total 5 (delta 1), reused 1 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: Bypassed rule violations for refs/heads/kiba-0705:
remote:
remote: - File path is restricted
remote: Found 3 violations:
remote:
remote: .kiba/foo/foofoo
remote: .kiba/fuga
remote: .kiba/hoge
remote:
remote: Push protection bypass request(s) utilized:
remote: - https://github.com/<owner>/playground/exemptions/2
remote: Approved by: korosuke613
remote: Create a pull request for 'kiba-0705' on GitHub by visiting:
remote: https://github.com/<owner>/playground/pull/new/kiba-0705
remote:
To https://github.com/<owner>/playground.git
* [new branch] kiba-0705 -> kiba-0705
push できた。bypass したことがメッセージとして出てきている。
Push protection bypass request(s) utilized:
- https://github.com/<owner>/playground/exemptions/2
Approved by: korosuke613
バイパス要求へのリンクと誰が承認したかが出てきている。