Skip to content

Instantly share code, notes, and snippets.

@blomquisg
Created May 26, 2017 15:01
Show Gist options
  • Save blomquisg/9f28431802fc6f8843c2dba60b636c0f to your computer and use it in GitHub Desktop.
Save blomquisg/9f28431802fc6f8843c2dba60b636c0f to your computer and use it in GitHub Desktop.
List out all the PRs that were merged in a sprint across several repos for MIQ
#!/bin/bash
DEFAULT_STATE="open"
BROWSER=`which google-chrome`
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
function usage()
{
program_name=`basename $0`
cat << __USAGE_STRING
USAGE:
List milestones
$program_name -l
Open PRs
$program_name [-m MILESTONE] [-s STATE] [-d DATE]
-m MILESTONE is a string like "Sprint+42+Ending+June+20%2C+2016\"
-s STATE is the state of the PRs to retrieve ("closed", "merged", "open"[default])
-d DATE is the date string for external provider repos like "2016-11-19"
Help
$program_name -h
__USAGE_STRING
}
function get_command()
{
local command=`which $1 2>/dev/null`
if [ $? -ne 0 ]; then
echo "Command not found: $1"
exit 1
fi
echo "$command"
}
function list_milestones()
{
CURL=`get_command "curl"`
JQ=`get_command "jq"`
$CURL -s "https://api.github.com/repos/ManageIQ/manageiq/milestones?state=all&per_page=10&client_id=$GITHUB_CLIENT_ID&client_secret=$GITHUB_CLIENT_SECRET" | $JQ '.[]["title"]'
}
function open_url()
{
url=$1
message=$2
echo "$message"
$BROWSER "$url" &>/dev/null
}
function open_core_prs() {
core_url="$1"
providers_url="$2"
milestone="$3"
PROVIDERS=( amazon ansible_tower cloud console containers foreman google \
hawkular microsoft/cloud microsoft/infra network openstack/cloud \
openstack/infra oracle physical-infrastructure rhevm softlayer \
virtual-infrastructure vmware/infra vmware/cloud )
for provider in "${PROVIDERS[@]}"; do
provider_url="$providers_url/$provider+$milestone"
open_url "$provider_url" "Opening $provider in browser ($provider_url)"
done
provider_url="$providers_url+$milestone"
open_url "$provider_url" "Opening providers in browser ($provider_url)"
provider_url="$core_url+label:\"pluggable providers\"+$milestone"
open_url "$provider_url" "Opening pluggable providers in browser ($provider_url)"
}
function open_external_prs() {
org="$1"
pr_uri="$2"
milestone="$3"
EXTERNAL_PROVIDERS=( amazon azure lenovo vmware openstack ovirt hawkular kubernetes openshift )
EXTERNAL_DATE=""
if [ "x$external_date" != "x" ]; then
EXTERNAL_DATE="merged:>$external_date"
fi
for provider in "${EXTERNAL_PROVIDERS[@]}"; do
provider_url="$org/manageiq-providers-$provider/$pr_uri+$milestone"
open_url "$provider_url" "Opening manageiq-providers-$provider in browser ($provider_url)"
done
}
function open_pr_browsers()
{
if [ "x$state" == "x" ]; then
state="$DEFAULT_STATE"
fi
if [ "$state" != "open" ] && [ "x$milestone" == "x" ]; then
error="Please provide a milestone.
e.g., $0 -m \"Sprint 45 Ending Aug 22, 2016\"
Use $0 -l to list milestones
"
echo "$error"
exit 1
fi
MILESTONE=""
if [ "x$milestone" != "x" ]; then
MILESTONE="milestone:\"$milestone\""
echo "using milestone $MILESTONE"
fi
GITHUB="https://github.com"
ORG="$GITHUB/ManageIQ"
PR_URI="pulls?utf8=✓&q=is:$state+is:pr"
CORE_URL="$ORG/manageiq/$PR_URI"
PROVIDERS_URL="$CORE_URL+label:providers"
if [ "x$provider" != "x" ]; then
provider_url="$PROVIDERS_URL/$provider+$MILESTONE"
open_url "$provider_url" "Opening $provider in browser ($provider_url)"
else
open_core_prs "$CORE_URL" "$PROVIDERS_URL" "$MILESTONE"
open_external_prs "$ORG" "$PR_URI" "$MILESTONE"
fi
}
action=open_pr_browsers
while getopts :m:s:d:lhp: opt; do
case $opt in
m)
milestone="$OPTARG"
;;
s)
state="$OPTARG"
;;
d)
external_date="$OPTARG"
;;
l)
action=list_milestones
;;
p)
provider="$OPTARG"
;;
h)
usage
exit 0
;;
esac
done
$action
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment