Open5

GitHub CLI でのプルリク状態の取得

hkusuhkusu

GitHub CLI により、GitHub Actions の github context や REST API では取得できない(もしかして GraphQL では取得できるかも)ような、プルリクの状態を取得できる。

尚、GitHub CLI は GitHub Actions の runner に標準インストールされているので、CI で活用することができる。

hkusuhkusu

レビュー状態の取得

$ gh pr view <プルリク番号> --json reviewDecision

{
  "reviewDecision": "APPROVED"
}

取得できる値は、下記ドキュメントで定義されている
https://docs.github.com/ja/graphql/reference/enums#pullrequestreviewdecision

補足

  • (ブランチ保護または rulesets で)マージ条件を設定をしておらず、且つ、誰もレビューしていない場合は空文字となる
  • マージ条件を設定している場合、
    • 例えば2名の approve が必要としているが1名の approve がされている場合は REVIEW_REQUIRED となる
    • プルリクが draft でも REVIEW_REQUIRED となる

基本的に、プルリク一覧のここに表示される内容と同じだが、draft のときはここの表示は Draft となる

hkusuhkusu

マージ可否に関する状態の取得

言い換えると、プルリクのマージボタンおよび周辺の状態。

$ gh pr view <プルリク番号> --json mergeStateStatus

{
  "mergeStateStatus": "BLOCKED"
}

取得できる値は、下記ドキュメントで定義されている
https://docs.github.com/ja/graphql/reference/enums#mergestatestatus

補足

  • マージ可能な状態であっても、status のどれかが failure なら UNSTABLE となる
hkusuhkusu

レビュー状態の取得、の活用について

下記のような自動 approve では活用できそう。

https://github.com/dependabot/fetch-metadata?tab=readme-ov-file#auto-approving

他には、プルリク一覧でレビューが必要なプルリクを分かりやすくする為にラベルをつけるようなことが考えられるが、上述のとおり既に一覧上では表示されているし、一覧上で下図のようなフィルターもできるので、あまり意味はないかもしれない。

もしそれでもラベルをつけるようなワークフローを作るとしたら、トリガーとしてプルリクの open と、review 周りのイベントをトリガーにすれば実現はできそう。

hkusuhkusu

マージ可否に関する状態の取得、の活用について

プルリク一覧にラベルなどあれば便利そうではあるが、CI の通過をマージ条件としていることもあるだろうから、トリガーとして status 周りは含める必要ありそう。