🤖

[gh コマンド] PR のcommit hashをすべて取得する

2023/01/30に公開

TL;DR

gh api graphql -f query='
  query($owner: String!, $repo: String!, $pr: Int!, $endCursor: String) {
    repository(owner: $owner, name: $repo) {
      pullRequest(number: $pr) {
        commits(first: 100, after: $endCursor) {
          pageInfo{ hasNextPage, endCursor }
          nodes {
            commit {
                oid
            }
          }
        }
      }
    }
  }' -F owner='{owner}' -F repo='{repo}' -F pr=<PR_NUMBER> --paginate --jq '.data.repository.pullRequest.commits.nodes.[].commit.oid'

解説

gh pr view <PR_NUMBER> --json commits --jq .commits[].oid

という方法もあるのだが、現状では下記のissueにもある通り、最大100件(古い順)しか取得することができない。
https://github.com/cli/cli/issues/5415
そのため、「100件を超えるcommitが積まれたPRの最新のcommit hashを取得したい」といったケースでは困ってしまう。

そこで、api graphqlというサブコマンドを利用して、直接GraphQLのクエリを指定してデータを取得する。

参考

https://cli.github.com/manual/gh_api
https://zenn.dev/noraworld/articles/gh-pr-commits

Discussion