1+ # The _chatops_retest workflow reruns failed GHA for a PR
2+ #
3+ # This workflow is triggered by leaving a "/retest" comment on
4+ # a pull request. If the required preconditions are met, it will
5+ # rerun failed GitHub actions checks on that PR
6+ #
7+ # Condition for the "/retest" command are:
8+ # - either the issuer is a maintainer
9+ # - or the issuer is the owner the PR
10+
11+ name : Rerun Failed Actions
12+ on :
13+ repository_dispatch :
14+ types : [retest-command]
15+
16+ jobs :
17+ retest :
18+ name : Rerun Failed Actions
19+ runs-on : ubuntu-latest
20+ steps :
21+ - name : Show Environment Variables
22+ run : env
23+ - name : Show Github Object
24+ run : |
25+ cat <<'EOF'
26+ ${{ toJson(github) }}
27+ EOF
28+ - name : Show Github Event Path Json
29+ run : ' cat $GITHUB_EVENT_PATH || true'
30+ - name : Rerun Failed Actions
31+ run : |
32+ echo '::group:: Get the PR commit sha'
33+ # Get the sha of the HEAD commit in the PR
34+ GITHUB_COMMIT_SHA=$(gh api $(echo ${GITHUB_PULL_URL#https://api.github.com/}) | \
35+ jq -r .head.sha)
36+ echo GITHUB_COMMIT_SHA=${GITHUB_COMMIT_SHA}
37+ echo '::endgroup::'
38+
39+ echo '::group:: Get the list of run IDs'
40+ # Get a list of run IDs
41+ RUN_IDS=$(gh api repos/${GITHUB_REPO}/commits/${GITHUB_COMMIT_SHA}/check-runs | \
42+ jq -r '.check_runs[] | select(.name != "Rerun Failed Actions") | .html_url | capture("/runs/(?<number>[0-9]+)/job") | .number' | \
43+ sort -u)
44+ echo RUN_IDS=${RUN_IDS}
45+ echo '::endgroup::'
46+
47+ echo '::group:: Rerun failed runs'
48+ # For each run, retrigger faild jobs
49+ for runid in ${RUN_IDS}; do
50+ echo Restarting run ${runid} for commit ${GITHUB_COMMIT_SHA}
51+ gh run \
52+ --repo ${GITHUB_REPO} \
53+ rerun ${runid} \
54+ --failed || true
55+ done
56+ echo '::endgroup::'
57+ env :
58+ GITHUB_TOKEN : ${{ secrets.CHATOPS_TOKEN }}
59+ GITHUB_REPO : ${{ github.event.client_payload.github.payload.repository.full_name }}
60+ GITHUB_PULL_URL : ${{ github.event.client_payload.github.payload.issue.pull_request.url }}
61+
62+ - name : Create comment
63+ if : ${{ failure() && steps.landStack.outcome == 'failure' }}
64+ uses : peter-evans/create-or-update-comment@v4
65+ with :
66+ token : ${{ secrets.CHATOPS_TOKEN }}
67+ repository : ${{ github.event.client_payload.github.payload.repository.full_name }}
68+ issue-number : ${{ github.event.client_payload.github.payload.issue.number }}
69+ body : |
70+ Something went wrong with your `/${{ github.event.client_payload.slash_command.command }}` command: [please check the logs][1].
71+
72+ [1]: ${{ steps.vars.outputs.run-url }}
73+
74+ - name : Add reaction
75+ if : ${{ success() }}
76+ uses : peter-evans/create-or-update-comment@v4
77+ with :
78+ token : ${{ secrets.CHATOPS_TOKEN }}
79+ repository : ${{ github.event.client_payload.github.payload.repository.full_name }}
80+ comment-id : ${{ github.event.client_payload.github.payload.comment.id }}
81+ reactions : hooray
0 commit comments