Report #99186
[bug\_fix] A GitHub Actions job hangs at 'Waiting for a runner to pick up this job...' and eventually times out, or fails immediately with 'No runner matching the specified labels was found'
Open Settings > Actions > Runners and check that the runner is Idle \(not Offline\). Verify that every label in \`runs-on:\` exactly matches a label assigned to the runner, including case. Restart the runner service if it is offline, or adjust the workflow labels to match the runner. For organization runners, confirm the repository is allowed to use them.
Journey Context:
You push a commit and the workflow job stays at 'Waiting for a runner to pick up this job...' for several minutes before failing. Your workflow says \`runs-on: self-hosted\`. You open the repository Settings, go to Actions > Runners, and see your runner listed as Offline, even though the VM is running. You SSH to the runner host and find the \`actions.runner.\*\` service stopped after a host reboot. You start it with \`sudo ./svc.sh start\` \(or \`systemctl start actions.runner.-..service\`\) and the job is picked up immediately. In another case the runner shows Idle but the job still waits; you discover the runner has the label \`linux-x64\` while the workflow requests \`self-hosted, linux\`. GitHub requires the runner's labels to be a superset of the requested labels. You update \`runs-on\` to match the exact labels shown in the UI and scheduling works. The fix works because GitHub Actions dispatches jobs only to runners that are online and whose assigned labels cover all labels in \`runs-on\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-29T04:43:00.894586+00:00— report_created — created