Last active
June 6, 2024 21:44
-
-
Save jensim/c157b935f3c3874bd9857509a6b36f82 to your computer and use it in GitHub Desktop.
Add default reviewers to bitbucket-server pull requests where there are currently 0 reviewers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#set -x | |
set -e | |
host='https://my-code.local' | |
if ! which jq ; then | |
echo 'jq not installed.' >&2 | |
exit 1 | |
fi | |
username="$(whoami)" | |
echo "Username ($username):" >&2 | |
read -r username_input | |
if ! [ "$username_input" = '' ]; then | |
username="$username_input" | |
fi | |
password='' | |
while [ "$password" = '' ]; do | |
echo "Password: " >&2 | |
read -s -r password | |
done | |
function handle_single_pr(){ | |
pr="$1" | |
# echo "$pr" | |
pr_id="$(jq -r '.id' <<< "$pr")" | |
pr_version="$(jq -r '.version' <<< "$pr")" | |
to_ref="$(jq -r '.toRef.id' <<< "$pr")" | |
from_ref="$(jq -r '.fromRef.id' <<< "$pr")" | |
to_repo="$(jq -r '.toRef.repository.id' <<< "$pr")" | |
from_repo="$(jq -r '.fromRef.repository.id' <<< "$pr")" | |
key="$(jq -r '.fromRef.repository.project.key' <<< "$pr")" | |
repo_slug="$(jq -r '.fromRef.repository.slug' <<< "$pr")" | |
default_reviewers="$(curl -s -f -u "${username}:${password}" "${host}/rest/default-reviewers/1.0/projects/$key/repos/$repo_slug/reviewers?sourceRefId=${from_ref}&targetRefId=${to_ref}&sourceRepoId=${from_repo}&targetRepoId=${to_repo}")" | |
default_reviewers_formatted="$(jq -c '[ .[] | {"user":{"name":.name}}]' <<<"$default_reviewers")" | |
body="{\"id\":${pr_id},\"version\":${pr_version},\"reviewers\":${default_reviewers_formatted}}" | |
default_reviewers_printable="$(jq -c '[ .[] | .name ]' <<<"$default_reviewers")" | |
curl -s -f -u "${username}:${password}" -X PUT -H 'Content-Type: application/json' -d "${body}" "${host}/rest/api/1.0/projects/${key}/repos/${repo_slug}/pull-requests/${pr_id}" > /dev/null | |
echo "PUT default reviewers ${default_reviewers_printable} to pr against repo '${key}:${repo_slug}'" | |
printf '.' | |
} | |
is_last_page=false | |
start=0 | |
while [ "$is_last_page" == 'false' ] ; do | |
prs_json="$(curl -s -f -u "${username}:${password}" "${host}/rest/api/1.0/dashboard/pull-requests?limit=10&state=OPEN&role=AUTHOR&start=${start}")" | |
is_last_page="$(jq -r '.isLastPage' <<< "$prs_json")" | |
size="$(jq -r '.size' <<< "$prs_json")" | |
if [ "$size" == 0 ] ; then | |
echo 'Nothing to do.' | |
break | |
else | |
echo "Working start:$start is_last_page:$is_last_page size:$size" | |
start=$((size+start)) | |
IFS=' | |
' | |
for pr in $(jq -c '.values[] | select((.reviewers | length) == 0)' <<< "$prs_json") ; do | |
handle_single_pr "$pr" & | |
done | |
wait | |
fi | |
done | |
echo "" | |
echo "Done" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, thanks so much for getting back to me, was super helpful in what I was trying to do.