GitHub PR Milestone Check を使ってみる
GitHub でリポジトリを新規に作成すると PR Milestone Check というアプリをインストールするか選択肢が表示されるようになった
Marketplace で配布されているアプリの一つで、このアプリをインストールすると、マイルストーンの未設定をチェックすることができるようになる
現時点で、インストールは無料です。他のアプリのプランを見ると、 private repository だと有料のプランもあったりする
Marketplace のアプリは、個人または Organization ごとにインストールする形になる
無料であるものの、個人アカウントでクレジット情報が未登録の場合、インストールするタイミングで入力が必須。登録済みであれば、すぐにインストール可能
すでに作成済みのリポジトリに対しては、個人または Organization の Setttings > Third-party Access > GitHub Apps > PR Milestone Check > Configure > Repository access > Only Select repositories で作成済みのリポジトリを選択することで追加できます
アプリに付与する必要な Permissions
- Read access to issues, metadata, and pull requests
- Read and write access to commit statuses
リポジトリで PR Milestone Check を有効にすると次のように PR に Milestone が未設定であることが表示されるようになります。
PR に Milestone の設定を強制したい場合は Rulesets と組み合わせることで実現できます。
Require status checks to pass > Add Checks から Milestone Check を追加します
このチェックを有効にすると、 Milestone が未設定の PR はマージができないようにブロックできます
本体の GitHub リポジトリ
Quarkus を利用して JVM で動作している
GitHub Extension として quarkus-github-app に依存している
pom による依存
実体のコードは一つ
onIssue
で Issue が更新されたハンドリングをする( GitHub では PR も Issue と同等なのでこのコールバックがよばれる)
ここでは Issue が PR か判定して、そうであれば、 handlePullRequest
に流している
onPullRequest
で Pull Request が更新されたハンドリングをする
ここでは handlePullRequest
に流すだけ
handlePullRequest
で Milestone が設定されているかどうか判定して処理を分岐している
updateStatus
は実際に PR の Status を更新している
GitHub App として提供している理由
翻訳
- GitHub Appの方が、特にフォークからのPRにも対応しやすく、GitHub Actionsの方はそれがあまり簡単ではないようです(デフォルトのトークンでは、フォークからのPRに追加のステータスチェックを設定することができず、カスタムのGitHubトークンを提供する必要があります)。
- Milestone Checkのワークフローは、pull_requestイベントとissuesイベントの両方でトリガーされる必要があります(マイルストーンの変更に対してはissuesイベントが、プッシュイベントに対してはpull_requestイベントがトリガーされます)。これにより、ステータスの設定に混乱が生じます。そのため、2つの異なるイベントトリガーを調整するために、Milestone Check用のステータスとGitHubアクション実行用のステータスを別々に使うのが最善だと気づきました。
つまり、
- フォークに対応しやすい
- pull_requestとissuesイベントの両方を扱う必要がある(action だと個々に反応してしまうので難しいと理解)
わかっていないこと
- GitHub App の実行ログは見ることができる?
- GitHub App が実行される実体はどこ?(インストールされた時点のバージョンが動くのか、常に latest が動くのか、これによって脆弱性の混入など不安要素が生じる)
作り方次第なのだろうか
このスクラップを元に発表した
Zenn の記事としても体系立ててまとめたい