Skip to content

Instantly share code, notes, and snippets.

@adamreese
Last active March 6, 2022 00:53
Show Gist options
  • Save adamreese/3b1061a0f28764de3656b82ad887ca5e to your computer and use it in GitHub Desktop.
Save adamreese/3b1061a0f28764de3656b82ad887ca5e to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
if (( $# < 2 )); then
echo "usage: gh-downloads <org> <repo> [<tag>]" >&2
exit 1
fi
owner=${1:-} repo=${2:-} tag=${3:-}
# get results for a single release tag
if [[ -n "${tag}" ]]; then
query='
query($name: String!, $owner: String!, $tag: String!) {
repository(owner: $owner, name: $name) {
release(tagName: $tag) {
name
releaseAssets(first: 30) {
edges {
node {
name
downloadCount
}
}
}
}
}
}
'
jq_filter='.data.repository.release.releaseAssets.edges | map(.node)'
# get results for last 5 releases
else
query='
query($name: String!, $owner: String!) {
repository(owner: $owner, name: $name) {
nameWithOwner
releases(last: 5) {
edges { node {
name
releaseAssets(first: 30) {
edges {
node {
name
downloadCount
}
}
}
}
}
}
}
}'
jq_filter='.data.repository.releases.edges | .[].node | {
(.name): [
.releaseAssets.edges | .[].node
]
}
'
fi
gh api graphql \
--field "owner=${owner}" \
--field "name=${repo}" \
--field "tag=${tag}" \
--raw-field "query=${query}" \
--jq "${jq_filter}"
@adamreese
Copy link
Author

Example output

$ gh-downloads helm helm | jq
{
  "Helm 3.5.1": [
    {
      "downloadCount": 73,
      "name": "helm-v3.5.1-darwin-amd64.tar.gz.asc"
    },
    {
      "downloadCount": 18,
      "name": "helm-v3.5.1-darwin-amd64.tar.gz.sha256.asc"
    },
    {
      "downloadCount": 22,
      "name": "helm-v3.5.1-darwin-amd64.tar.gz.sha256sum.asc"
    },
    {
      "downloadCount": 52,
      "name": "helm-v3.5.1-linux-386.tar.gz.asc"
    },
    {
      "downloadCount": 20,
      "name": "helm-v3.5.1-linux-386.tar.gz.sha256.asc"
    },
    ...
  ]
  ...
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment