Closed10

GitHub の Delegated bypass for push rules を試す

Futa HirakobaFuta Hirakoba
Futa HirakobaFuta Hirakoba
  • push rules で新しい委任されたバイパスフローを追加したぜ!
  • これまでは、バイパスするには push rules であらかじめバイパスリストに含める必要があったぜ
  • 委任されたバイパス(delegated bypass)により、コントリビュータは push rules のバイパスを提案できて、バイパスリストのメンバは要求を確認して許可・拒否できるぜ
Futa HirakobaFuta Hirakoba

ドキュメント

  • 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: 要求はまだレビューされてないか、承認されているがコミットがプッシュされていない
    • コントリビュータがバイパス要求をすると、承認者全員にリクエストへのリンクが記載されたメールが届くよ
    • コントリビュータはメールで承認可否を通知されるよ
    • 要求が承認されると、コントリビュータはコミットをプッシュできるよ
Futa HirakobaFuta Hirakoba

使ってみたまとめ

  • こういうのほしかった。push rules はめちゃ嬉しい機能だけどコントリビューションしづらくなっちゃうので
  • コントリビュータ側はライトに要求を申請できて良い
  • 承認側はいくつか気になる点があった
    • 届くはずの申請されたメールが届かなかった
    • ファイルとコミットハッシュしか確認できないため、承認可否の判断が難しい
      • コミットの詳細がほしい。親とかファイルの差分とか
      • もしかして見る方法あったのか?ドキュメント軽くみる感じわからなかった
        • わかる人いたら教えてください
  • まだ public beta であることに注意。今回の気になった点も改善されるだろう
    • 単純に俺の使い方が悪かった説もある
    • ワンチャン community discussion に投稿か?
Futa HirakobaFuta Hirakoba

試してみる

  • 自分が管理権限を持っている org で、書き込み権限はあるが管理権限を持ってないユーザと協力して試す
Futa HirakobaFuta Hirakoba

push ruleset の作成

今回は雑に .kiba/**/* を拒否するようにした。

Futa HirakobaFuta Hirakoba

バイパスリストにいないユーザでプッシュ

.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 が出てきた。

Futa HirakobaFuta Hirakoba

バイパス要求を作成

https://github.com/<owner>/playground/exemptions/new/*** をクリック。

  • ユーザ
  • リポジトリ
  • コミットハッシュ
  • 日時
  • 対象ファイル
    • コミットハッシュとパスの組のリスト
  • プッシュルール名
  • コメント
    • コメントの追加は必須
  • 送信ボタン

コメントに適当な内容を入れて送信クリック。


無事要求が作成された


View approvers をクリックするとバイパスリストの内容が見れた


Cancel request をクリックするとキャンセルされた

Futa HirakobaFuta Hirakoba

バイパス要求を承認する

ここからバイパスリストにいるユーザでの作業。
(一度キャンセルしたので再度要求させた。)

バイパスリストのユーザにメールが届くとのことだったが、届かなかった。

Bypass requests ページを見にいく

要求が来てる。
クリックで中身が見れる。

申請時と同じような内容が見れる。もちろんコメントもある。

コミットハッシュはあるがファイルの差分は見れない?これじゃ承認可否の判断材料がないような

却下か承認ができる。

  • Deny bupass request
  • Approve bypass request

承認する。

承認できた。
Dismiss approval とあるので、やっぱ却下!ということもできそう。

Futa HirakobaFuta Hirakoba

承認されたあと

コントリビュータのメアドに承認された旨が届いた。

再度 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:

バイパス要求へのリンクと誰が承認したかが出てきている。

このスクラップは12日前にクローズされました