fleet/scripts/on-call

75 lines
1.8 KiB
Plaintext
Raw Normal View History

2022-03-28 16:00:33 +00:00
#!/usr/bin/env bash
# Script for on-call use.
# Formatted with shfmt. See https://github.com/mvdan/sh
set -euo pipefail
usage() {
cat <<EOF
Contains useful commands for on-call.
Usage:
$(basename $0) <command>
Commands:
issues List open issues from outside contributors.
prs List open prs from outside contributors.
EOF
}
require() {
type $1 >/dev/null 2>&1 || {
echo "$1 is required but not installed. Aborting." >&2
exit 1
}
}
issues() {
require gh
require jq
auth_status="$(gh auth status -t 2>&1)"
username="$(echo "${auth_status}" | sed -n -r 's/^.* Logged in to [^[:space:]]+ as ([^[:space:]]+).*/\1/p')"
token="$(echo "${auth_status}" | sed -n -r 's/^.*Token: ([a-zA-Z0-9_]*)/\1/p')"
members="$(curl -s -u "${username}:${token}" https://api.github.com/orgs/fleetdm/members | jq -r 'map(.login)')"
gh pr list --repo fleetdm/fleet --label "bug" --label ":reproduce" --json id,title,author,url,createdAt |
jq -r --argjson members "$members" \
'map(select(.author.login as $in | $members | index($in) | not)) | sort_by(.createdAt) | reverse'
}
prs() {
require gh
require jq
auth_status="$(gh auth status -t 2>&1)"
username="$(echo "${auth_status}" | sed -n -r 's/^.* Logged in to [^[:space:]]+ as ([^[:space:]]+).*/\1/p')"
token="$(echo "${auth_status}" | sed -n -r 's/^.*Token: ([a-zA-Z0-9_]*)/\1/p')"
members="$(curl -s -u "${username}:${token}" https://api.github.com/orgs/fleetdm/members | jq -r 'map(.login)')"
# defaults to listing open prs
gh pr list --repo fleetdm/fleet --json id,title,author,url,createdAt |
jq -r --argjson members "$members" \
'map(select(.author.login as $in | $members | index($in) | not)) | sort_by(.createdAt) | reverse'
}
# main script
case "$1" in
issues)
issues
;;
prs)
prs
;;
-h | --help)
usage
exit 0
;;
*)
echo "Invalid argument: $1"
usage
exit 1
;;
esac