fleet/tools/oncall/oncall.sh
Victor Lyuboslavsky d321724dae
Updated oncall.sh to filter our draft PRs. (#28204)
This script finds PRs submitted by community members. It is currently
reporting several draft PRs which do not require any action from oncall
engineer. Adding automatic filtering of draft PRs.
2025-04-15 10:44:26 -05:00

75 lines
1.9 KiB
Bash
Executable file

#!/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 github.com account ([^[: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?per_page=100 | jq -r 'map(.login)')"
gh issue list --repo fleetdm/fleet --json id,title,author,url,createdAt,labels --limit 100 |
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 github.com account ([^[: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?per_page=100 | jq -r 'map(.login)' | jq '. += ["app/dependabot"]')"
# defaults to listing open prs
gh pr list --limit 1000 --repo fleetdm/fleet --json id,title,author,url,createdAt,isDraft |
jq -r --argjson members "$members" \
'map(select((.author.login as $login | ($members | index($login)) == null) and .isDraft == false)) | 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