| # In the unlikely event a self-hosted runner was selected and reserved but it |
| # goes down before the workload starts, cancel the workflow run. |
| name: Detect self-hosted runner assigment timeout |
| description: "Cancel the workflow run if a self-hosted runner was selected, but the job failed to start" |
| inputs: |
| unique-id: |
| required: true |
| description: "Unique ID of the runner" |
| github_token: |
| required: true |
| description: "Must be able to do github API calls and cancel jobs." |
| |
| runs: |
| using: "composite" |
| steps: |
| - name: Wait a bit |
| shell: bash |
| run: sleep 120 |
| |
| - name: Cancel if workload job is still queued |
| shell: bash |
| run: | |
| run_url=/repos/${{ github.repository }}/actions/runs/${{ github.run_id }} |
| export GH_TOKEN=${{ inputs.github_token }} |
| |
| if [ "$(gh api "$run_url/jobs" \ |
| | jq -er --arg id '${{ inputs.unique-id }}' \ |
| '.jobs[] | select(.name | contains("[" + $id + "]")) | .status' |
| )" = queued ]; then |
| echo 'Timeout waiting for runner assignment!' |
| echo 'Hint: does this repo have permission to access the runner group?' |
| echo 'Hint: https://github.com/organizations/servo/settings/actions/runner-groups' |
| echo |
| echo 'Cancelling workflow run' |
| gh api "$run_url/cancel" --method POST |
| exit 1 |
| fi |