GitHub CLIで組織以下のリポジトリのWebhookを一覧表示する

GitHub CLIで組織以下のリポジトリのWebhookを一覧表示するには以下のようにする。

gh api /orgs/:org/repos --paginate | jq -r '.[].name' | xargs -I{} gh api /repos/:org/{}/hooks

:orgは組織名を指定する。

ユーザ以下のリポジトリのWebhookを一覧表示するには以下のようにする。

gh api /users/:user/repos --paginate | jq -r '.[].name' | xargs -I{} gh api /repos/:user/{}/hooks

:userはユーザ名を指定する。

コマンドの解説

APIでリポジトリ一覧を取得

gh api /orgs/:org/reposgh api /users/:user/reposはそれぞれ組織・ユーザー以下のリポジトリ一覧を取得する。

デフォルトでは30件のみを取得する。30件以上取得したい場合は--paginateオプションでページネーションを有効にし、全てのリポジトリを取得する。

取得結果は以下の形式のJSONが返される。

[
  {
    "id": xxxxxxx,
    "node_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "name": "リポジトリ名",
    ...
  },
  {
    ...
  }
]

リポジトリ一覧

上記のJSONからnameを抽出するためにjqを使う。 jq -r '.[].name'は上記nameの値を抽出する。

gh api /orgs/:org/repos | jq -r '.[].name'で以下のようなリポジトリ名の一覧が取得できる。

xxx-repo1
xxx-repo2
...

リポジトリ名一覧を受け取り、Webhook一覧を取得

最後の部分... | xargs -I{} gh api /repos/:user/{}/hooks``xargsではリポジトリ名一覧を受け取り、 それぞれのリポジトリ名に対してさらにghコマンドを実行してWebhook一覧を取得している。

xargsコマンドに-I{}オプションを指定し、{}にリポジトリ名を代入してコマンドを実行している。