cherrypick docs to latest release branch (#8719)

This commit is contained in:
Alvin Huang 2020-09-21 17:31:21 -04:00 committed by GitHub
parent fbf01fca67
commit 6b05ecf488
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 34 additions and 1 deletions

View File

@ -16,6 +16,24 @@ function status {
tput sgr0 tput sgr0
} }
# Returns the latest GitHub "backport/*" label
function get_latest_backport_label {
local resp
local ret
local latest_backport_label
resp=$(curl -f -s -H "Authorization: token ${GITHUB_TOKEN}" "https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/labels")
ret="$?"
if [[ "$ret" -ne 0 ]]; then
status "The GitHub API returned $ret which means it was probably rate limited."
exit $ret
fi
latest_backport_label=$(echo "$resp" | jq -r '.[] | select(.name | startswith("backport/")) | .name' | sort -rV | head -n1)
echo"$latest_backport_label"
return 0
}
# This function will do the cherry-picking of a commit on a branch # This function will do the cherry-picking of a commit on a branch
# Exit 1 if cherry-picking fails # Exit 1 if cherry-picking fails
function cherry_pick_with_slack_notification { function cherry_pick_with_slack_notification {
@ -110,10 +128,13 @@ if [[ "$count" -eq 0 ]]; then
exit 0 exit 0
fi fi
# save PR number
pr_number=$(echo "$resp" | jq '.items[].number')
# If the API returned a non-zero count, we have found a PR with that commit so we find # If the API returned a non-zero count, we have found a PR with that commit so we find
# the labels from the PR # the labels from the PR
# sorts the labels from a PR via version sort # Sorts the labels from a PR via version sort
labels=$(echo "$resp" | jq --raw-output '.items[].labels[] | .name' | sort -rV) labels=$(echo "$resp" | jq --raw-output '.items[].labels[] | .name' | sort -rV)
ret="$?" ret="$?"
pr_url=$(echo "$resp" | jq --raw-output '.items[].pull_request.html_url') pr_url=$(echo "$resp" | jq --raw-output '.items[].pull_request.html_url')
@ -124,6 +145,18 @@ if [[ "$ret" -ne 0 ]]; then
exit 0 exit 0
fi fi
# Attach label for latest release branch if 'docs-cherrypick' is present. Will noop if already applied.
latest_backport_label=$(get_latest_backport_label)
status "latest backport label is $latest_backport_label"
if echo "$resp" | jq -e '.items[].labels[] | select(.name | contains("docs-cherrypick"))'; then
labels=$(curl -f -s -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"labels\":[\"$latest_backport_label\"]}" "https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/issues/${pr_number}/labels" | jq --raw-output '.[].name' | sort -rV)
ret="$?"
if [[ "$ret" -ne 0 ]]; then
status "Error applying $latest_backport_label to $pr_url"
exit $ret
fi
fi
backport_failures=0 backport_failures=0
# loop through all labels on the PR # loop through all labels on the PR
for label in $labels; do for label in $labels; do