mirror of
https://github.com/servo/servo.git
synced 2025-09-27 07:10:19 +01:00
We are hitting the limit of 20 workflow references in servo. To help mitigate this somewhat, we migrate the timeout job to a composite action, which should be able to support our needs just as well. Testing: [try run of this PR](https://github.com/servo/servo/actions/runs/16783916103/job/47529580725). [try run with unconditional cancel](https://github.com/servo/servo/actions/runs/16784074213/job/47530099654). This reduces our workflow count by one, slightly helping to address #36143 Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
37 lines
1.3 KiB
YAML
37 lines
1.3 KiB
YAML
# 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
|