| #!/bin/bash |
| |
| set -e |
| |
| cat ${GITHUB_EVENT_PATH} |
| COMMENT_BODY=$(jq -r '.comment.body' "${GITHUB_EVENT_PATH}") |
| |
| BOT_COMMAND_PREFIX="/pulsarbot" |
| |
| if [[ ${COMMENT_BODY} != "${BOT_COMMAND_PREFIX}"* ]]; then |
| echo "Not a pulsarbot command, skipping it ..." |
| exit |
| fi |
| |
| |
| read -r -a commands <<< "${COMMENT_BODY}" |
| BOT_COMMAND=${commands[1]} |
| CHECK_NAME="" |
| if [ "${BOT_COMMAND}" == "rerun-failure-checks" ]; then |
| CHECK_NAME="_all" |
| elif [ "${BOT_COMMAND}" == "run-failure-checks" ]; then |
| CHECK_NAME="_all" |
| elif [ "${BOT_COMMAND}" == "run" ]; then |
| CHECK_NAME=${commands[2]} |
| elif [ "${BOT_COMMAND}" == "rerun" ]; then |
| CHECK_NAME=${commands[2]} |
| else |
| echo "Invalid bot command '${BOT_COMMAND}', skip ..." |
| exit |
| fi |
| |
| if [[ "${CHECK_NAME}" == "" ]]; then |
| echo "Invalid check name '${CHECK_NAME}', skip ..." |
| exit |
| fi |
| |
| PR_NUM=$(jq -r '.issue.number' "${GITHUB_EVENT_PATH}") |
| |
| # get head sha |
| curl -s -H "Accept: application/vnd.github.antiope-preview+json" https://api.github.com/repos/apache/pulsar/git/ref/pull/${PR_NUM}/head > result-headsha.txt |
| HEAD_SHA=$(jq -r '.object.sha' result-headsha.txt) |
| |
| # get checkrun results |
| curl -s -H "Accept: application/vnd.github.antiope-preview+json" https://api.github.com/repos/apache/pulsar/commits/${HEAD_SHA}/check-runs > result-check-runs.txt |
| |
| # find the failures |
| for row in $(cat result-check-runs.txt | jq -r '.check_runs[] | select(.status == "completed" and (.conclusion == "failure" or .conclusion == "cancelled")) | @base64'); do |
| _jq() { |
| echo ${row} | base64 --decode | jq -r ${1} |
| } |
| |
| name=$(echo $(_jq '.name')) |
| check_suite_id=$(echo $(_jq '.check_suite.id')) |
| if [[ "${CHECK_NAME}" == "_all" || "${CHECK_NAME}" == "${name}" ]]; then |
| echo "rerun action ${name}, check_suite_id = ${check_suite_id}" |
| curl -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.antiope-preview+json" -X POST https://api.github.com/repos/apache/pulsar/check-suites/${check_suite_id}/rerequest |
| else |
| echo "Expect ${CHECK_NAME} but skip action ${name}, check_suite_id = ${check_suite_id}" |
| fi |
| done |