A GitHub CLI to merge JSON responses to return valid JSON when passing --paginate
to gh api
:
$issues = gh api 'repos/{owner}/{repo}/issues' --paginate | gh merge-json | ConvertFrom-Json
Make sure you have version 2.0 or newer of the GitHub CLI installed.
gh extension install --force heaths/gh-merge-json
The --force
flag I introduced in gh
version 2.25
to better support automation. It will install or upgrade an extension, or do nothing if the latest extension version is
already installed.
The GitHub CLI can return paginated JSON responses from both REST and GraphQL APIs;
however, due to bug #1268 when --paginate
is passed to gh api
it does not
return value JSON:
{
"data": {
"viewer": {
"repositories": {
"nodes": [
{
"nameWithOwner": "owner/repo1"
},
{
"nameWithOwner": "owner/repo2"
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "Y3Vyc29yOnYyOpHOBAaq0A=="
}
}
}
}
}
{
"data": {
"viewer": {
"repositories": {
"nodes": [
{
"nameWithOwner": "owner/repo3"
},
{
"nameWithOwner": "owner/repo4"
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "Y3Vyc29yOnYyOpHOBzdvuQ=="
}
}
}
}
}
Until PR #5652 or some other solution is merged, you can use this extension
without having to install additional system utilities like jq
which may not be available for your platform or
otherwise difficult to obtain e.g., requiring a bunch of prerequisites.
Like several gh
commands, you can pass --template
(or -t
) and a Go template
using most functions described in gh help formatting
- specifically, those defined in source.
Output is always written to standard output.
If you would like to write formatted output e.g., colorful, indented JSON, or formatted using a --template
but save
compressed JSON to a file for further processing by other tools, you can pass --tee
and a file path.
gh api graphql --paginate -f query='
query($endCursor: String) {
viewer {
repositories(first: 100, after: $endCursor) {
nodes { nameWithOwner }
pageInfo {
hasNextPage
endCursor
}
}
}
}
' | gh merge-json --tee repos.json --template '{{range .data.viewer.repositories.nodes}}{{.nameWithOwner}}{{"\n"}}{{end}}'
Licensed under the MIT license.