mirror of
https://github.com/fleetdm/fleet
synced 2026-05-18 06:28:40 +00:00
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.
75 lines
1.9 KiB
Bash
Executable file
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
|