Load runner information
ActionsTags
(2)Verified
Load the information for the runners that are available for the organization or the repository, including status checks. Can be used to verify the amount of runners for a label is as expected.
Basic usage:
- uses: devops-actions/load-runner-info@7f8c07227aa6176e94e4eeb912016bb0a9d33796 #v1.0.10
id: load-runner-info-org
with:
accessToken: ${{ secrets.access_token }}
organization: ${{ env.organization }}
Read the complete example for using the outputs as well.
Name | Type | Description |
---|---|---|
organization |
string | The slug of the organization to load the runners from |
repo |
string | The slug of the repo to load the runners from, organization required as well |
accessToken |
string | The access token to use to connect to the GitHub API |
To run this action at the organization level, the access token must have scope admin:org
(PAT) or org:Self-hosted runners
(GitHub App).
To run this action at the repository level, the access token must have scope owner:repo
Name | Type | Description |
---|---|---|
runners |
string | A JSON string with the runner information available |
grouped |
string | A JSON string with the number of runner grouped by their labels, also indicating their status |
When there are so many runners the JSON gets to large to use, use the filebased outputs instead:
Name | Type | Description |
---|---|---|
runners-file-location |
string | The path to the file with the runner information available |
grouped-file-location |
string | The path to the file with the number of runners grouped by their labels, also indicating their status |
Runners output example:
{
"total_count": 1,
"runners": [
{
"id": 2,
"name": "my-runner",
"os": "windows",
"status": "online",
"busy": false,
"labels": [
{
"id": 1,
"name": "self-hosted",
"type": "read-only"
},
{
"id": 2,
"name": "Windows",
"type": "read-only"
},
{
"id": 3,
"name": "X64",
"type": "read-only"
}
]
}
]
}
Grouped output example:
[
{ "name": "self-hosted", "counter": 1, "status": 1 },
{ "name": "Windows", "counter": 1, "status": 1 },
{ "name": "X64", "counter": 1, "status": 1 }
]
Below is an example how I use this action to load the information on the available runners as well as test if there are enough runners online (see step Test runner info
).
jobs:
test-from-organization:
runs-on: ubuntu-latest
steps:
- name: Get access token
id: get_workflow_token
uses: peter-murray/workflow-application-token-action@dc0413987a085fa17d19df9e47d4677cf81ffef3 #3.3.0
with:
application_id: ${{ secrets.APPLICATION_ID }}
application_private_key: ${{ secrets.APPLICATION_PRIVATE_KEY }}
- uses: devops-actions/load-runner-info@7f8c07227aa6176e94e4eeb912016bb0a9d33796 #v1.0.10
id: load-runner-info-org
with:
accessToken: ${{ steps.get_workflow_token.outputs.token }}
organization: ${{ env.organization }}
- name: Upload result file as artefact for inspection
uses: actions/upload-artifact@v4
with:
name: runners-organization-${{ env.organization }}
path:
- ${{ steps.load-runner-info-org.outputs.runners-file-location }}
- ${{ steps.load-runner-info-org.outputs.grouped-file-location }}
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea #v7.0.1
name: Test runner info
with:
script: |
const info = JSON.parse(`${{ steps.load-runner-info-org.outputs.runners-file-location }}`)
if (info.length == 0) {
core.error('No runners found')
return
}
console.log(`Found [${info.runners.length}] runner(s)`)
for (let num = 0; num < info.runners.length; num++) {
const runner = info.runners[num]
console.log(`- name: [${runner.name}]`)
}
console.log(``)
const grouped = JSON.parse(`${{ steps.load-runner-info-org.outputs.grouped-file-location }}`)
console.log(`Found ${grouped.length} runner label(s)`)
for (let num = 0; num < grouped.length; num++) {
const group = grouped[num]
console.log(`- label: [${group.name}], runner with this label: [${group.counter}] with [${group.status}] online runners`)
}
// example of a test you can do on the amount of runners online with this label
const selfHosted = grouped.find(group => group.name === 'self-hosted')
if (selfHosted.status > 10) {
core.error(`Too many runners with label "self-hosted" found`)
return
}
// example of a test you can do on the amount of runners online with this label
if (selfHosted.status < selfHosted.counter) {
core.error(`There are [${selfHosted.counter - selfHosted.status}] runners offline`)
return
}
Load runner information is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.