Skip to content

Instantly share code, notes, and snippets.

@Asherslab
Created August 9, 2019 17:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Asherslab/2553dc63a95702563007e193e93878ae to your computer and use it in GitHub Desktop.
Save Asherslab/2553dc63a95702563007e193e93878ae to your computer and use it in GitHub Desktop.
repo=""
state="all"
type="all"
numerical=false
username=''
githubKey=''
print_usage() {
echo "Usage: "
echo "-u [username] Username for GitHub API"
echo "-p [key] Key for GitHub API"
echo "-r [repo] Github Repo to use, org/name fashion"
echo "-s [state] Issue state to use: all | open | closed | total"
echo "-t [type] Issue type: all | pr | issue"
echo ""
echo "-n Output only number"
}
while getopts 'u:p:r:s:t:n' flag;
do
case "${flag}" in
u) username="${OPTARG}" ;;
p) githubKey="${OPTARG}" ;;
r) repo="${OPTARG}" ;;
s) state="${OPTARG}" ;;
t) type="${OPTARG}" ;;
n) numerical=true ;;
*) print_usage
exit 1 ;;
esac
done
if [[ "$repo" == '' ]]; then
print_usage
exit 1
fi
if [[ "$state" != 'open' ]] && [[ "$state" != 'closed' ]] && [[ "$state" != 'all' ]] && [[ "$state" != 'total' ]]; then
print_usage
exit 1
fi
if [[ "$type" != 'all' ]] && [[ "$type" != 'pr' ]] && [[ "$type" != 'issue' ]]; then
print_usage
exit 1
fi
apiState=$state
if [[ $state == "total" ]]; then
apiState='all'
fi
issuesCount=$(curl --user $username:$githubKey -sI "https://api.github.com/repos/$repo/issues?state=$apiState&page=1&per_page=1" | grep -oi "&page=[0-9]*&per_page=[0-9]*>; rel=\"last\"" | grep -oi "&page=[0-9]*" | grep -oi "[0-9]*$")
hundredCount=$(((issuesCount / 100)))
if [[ $((issuesCount % 100)) != "0" ]]; then
hundredCount=$((hundredCount + 1))
fi
numberOfOpenIssues=0;
numberOfClosedIssues=0;
numberOfOpenPrs=0;
numberOfClosedPrs=0;
for page in $(seq 1 $hundredCount)
do
issuePage=$(curl --user $username:$githubKey -s "https://api.github.com/repos/$repo/issues?state=$apiState&page=$page&per_page=100")
#issuePage=$(cat test3.json)
for i in $(seq 0 $(jq -r length <<< "${issuePage}"))
do
issue=$(jq ".[$i] | {pull_request: .pull_request, state: .state}" <<< "${issuePage}")
if [[ "$(jq ".pull_request" <<< "${issue}")" != null ]]; then
if [[ $(jq -r ".state" <<< "${issue}") == "open" ]]; then
numberOfOpenPrs=$((numberOfOpenPrs + 1))
else
numberOfClosedPrs=$((numberOfClosedPrs + 1))
fi
else
if [[ $(jq -r ".state" <<< "${issue}") == "open" ]]; then
numberOfOpenIssues=$((numberOfOpenIssues + 1))
else
numberOfClosedIssues=$((numberOfClosedIssues + 1))
fi
fi
done
done
if [[ $state == "total" ]]; then
if [[ $type == "issue" ]]; then
if [[ $numerical == "true" ]]; then
echo $((numberOfOpenIssues + numberOfClosedIssues))
else
echo "Issues: $((numberOfOpenIssues + numberOfClosedIssues))"
fi
elif [[ $type == "pr" ]]; then
if [[ $numerical == "true" ]]; then
echo $((numberOfOpenPrs + numberOfClosedPrs))
else
echo "Prs: $((numberOfOpenPrs + numberOfClosedPrs))"
fi
else
if [[ $numerical == "true" ]]; then
echo $numberOfOpenIssues
echo $((numberOfOpenPrs + numberOfClosedPrs))
else
echo "Issues: $((numberOfOpenIssues + numberOfClosedIssues))"
echo "Prs: $((numberOfOpenPrs + numberOfClosedPrs))"
fi
fi
fi
if [[ $state == "all" || $state == "open" ]]; then
if [[ $type == "issue" ]]; then
if [[ $numerical == "true" ]]; then
echo $numberOfOpenIssues
else
echo "Open Issues: $numberOfOpenIssues"
fi
elif [[ $type == "pr" ]]; then
if [[ $numerical == "true" ]]; then
echo $numberOfOpenPrs
else
echo "Open Prs: $numberOfOpenPrs"
fi
else
if [[ $numerical == "true" ]]; then
echo $numberOfOpenIssues
echo $numberOfOpenPrs
else
echo "Open Issues: $numberOfOpenIssues"
echo "Open Prs: $numberOfOpenPrs"
fi
fi
fi
if [[ $state == "all" ]]; then
echo " "
fi
if [[ $state == "all" || $state == "closed" ]]; then
if [[ $type == "issue" ]]; then
if [[ $numerical == "true" ]]; then
echo $numberOfClosedIssues
else
echo "Closed Issues: $numberOfClosedIssues"
fi
elif [[ $type == "pr" ]]; then
if [[ $numerical == "true" ]]; then
echo $numberOfClosedPrs
else
echo "Closed Prs: $numberOfClosedPrs"
fi
else
if [[ $numerical == "true" ]]; then
echo $numberOfClosedIssues
echo $numberOfClosedPrs
else
echo "Closed Issues: $numberOfClosedIssues"
echo "Closed Prs: $numberOfClosedPrs"
fi
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment