Open19

GitHub PR Milestone Check を使ってみる

ykwsykws

GitHub でリポジトリを新規に作成すると PR Milestone Check というアプリをインストールするか選択肢が表示されるようになった

ykwsykws

現時点で、インストールは無料です。他のアプリのプランを見ると、 private repository だと有料のプランもあったりする

Marketplace のアプリは、個人または Organization ごとにインストールする形になる
無料であるものの、個人アカウントでクレジット情報が未登録の場合、インストールするタイミングで入力が必須。登録済みであれば、すぐにインストール可能

ykwsykws

すでに作成済みのリポジトリに対しては、個人または Organization の Setttings > Third-party Access > GitHub Apps > PR Milestone Check > Configure > Repository access > Only Select repositories で作成済みのリポジトリを選択することで追加できます

ykwsykws

アプリに付与する必要な Permissions

  • Read access to issues, metadata, and pull requests
  • Read and write access to commit statuses
ykwsykws

リポジトリで PR Milestone Check を有効にすると次のように PR に Milestone が未設定であることが表示されるようになります。

ykwsykws

PR に Milestone の設定を強制したい場合は Rulesets と組み合わせることで実現できます。

Require status checks to pass > Add Checks から Milestone Check を追加します

ykwsykws

このチェックを有効にすると、 Milestone が未設定の PR はマージができないようにブロックできます

ykwsykws

onIssue で Issue が更新されたハンドリングをする( GitHub では PR も Issue と同等なのでこのコールバックがよばれる)

ここでは Issue が PR か判定して、そうであれば、 handlePullRequest に流している

ykwsykws

onPullRequest で Pull Request が更新されたハンドリングをする

ここでは handlePullRequest に流すだけ

ykwsykws

handlePullRequest で Milestone が設定されているかどうか判定して処理を分岐している

ykwsykws

updateStatus は実際に PR の Status を更新している

ykwsykws

GitHub App として提供している理由

翻訳

  • GitHub Appの方が、特にフォークからのPRにも対応しやすく、GitHub Actionsの方はそれがあまり簡単ではないようです(デフォルトのトークンでは、フォークからのPRに追加のステータスチェックを設定することができず、カスタムのGitHubトークンを提供する必要があります)。
  • Milestone Checkのワークフローは、pull_requestイベントとissuesイベントの両方でトリガーされる必要があります(マイルストーンの変更に対してはissuesイベントが、プッシュイベントに対してはpull_requestイベントがトリガーされます)。これにより、ステータスの設定に混乱が生じます。そのため、2つの異なるイベントトリガーを調整するために、Milestone Check用のステータスとGitHubアクション実行用のステータスを別々に使うのが最善だと気づきました。

https://github.com/scholzj/milestone-check/issues/7#issuecomment-623184662

つまり、

  • フォークに対応しやすい
  • pull_requestとissuesイベントの両方を扱う必要がある(action だと個々に反応してしまうので難しいと理解)
ykwsykws

わかっていないこと

  • GitHub App の実行ログは見ることができる?
  • GitHub App が実行される実体はどこ?(インストールされた時点のバージョンが動くのか、常に latest が動くのか、これによって脆弱性の混入など不安要素が生じる)

作り方次第なのだろうか

https://zenn.dev/takamin55/articles/569875e8346948