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/repos、gh 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{}オプションを指定し、{}にリポジトリ名を代入してコマンドを実行している。
\第一線のプログラマーの行動原理を学べる!/
