GitHub Actions macOS runner job remains queued while matching runner shows Ready #201857
Replies: 11 comments 7 replies
-
|
Since the runner is visible as Ready and you've already verified the workflow syntax, labels, runner group, concurrency settings, and permissions, this sounds less like a workflow configuration issue and more like a runner assignment or scheduler problem. A few additional things to check:
Since the job remains queued for hours while the runner reports Ready, there is also the possibility of a scheduler/state mismatch or an internal issue with runner assignment. If none of the above resolves the problem, I'd recommend opening a GitHub Enterprise Support ticket and including:
That information should help GitHub determine whether this is a scheduler issue, runner eligibility problem, or an Enterprise-specific bug. |
Beta Was this translation helpful? Give feedback.
-
|
One thing I would verify very explicitly here: the scheduler matches runner group + labels, not the runner display name. In your example: runs-on:
group: Mobile - iOS
labels: [ghe-runner-macOSARM64-os26]
GitHub documents the routing behavior here: https://docs.github.com/en/actions/reference/runners/self-hosted-runners#routing-precedence-for-self-hosted-runners The important detail is that GitHub looks for an online and idle runner matching the requested labels and groups. If it finds one but the runner does not pick up the job within 60 seconds, the job is re-queued; otherwise the job remains queued until a matching runner comes online. I would narrow it down with this checklist:
gh api repos/OWNER/REPO/actions/runners \
--jq .runners[] | {name, status, busy, labels: [.labels[].name]}For an organization runner, also compare the org-level view: gh api orgs/ORG/actions/runners \
--jq .runners[] | select(.name=="ghe-runner-macOSARM64-os26") | {name, status, busy, labels: [.labels[].name]}
jobs:
route-test:
runs-on:
group: Mobile - iOS
steps:
- run: uname -aIf that starts, the group is accessible and the problem is label matching. If that still queues, the problem is group access/capacity/scheduler state rather than the label.
My guess from the YAML is either:
If both checks pass and the simple group-only route test still queues for hours, then I would open an Enterprise Support ticket with the run ID, job ID, runner ID, runner version, group name, labels, and |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for clarifying that it is GitHub-hosted. In that case I would treat this differently from a self-hosted runner issue. The runner name you mentioned earlier, A couple of things I would check:
jobs:
test:
runs-on: macos-26
steps:
- run: sw_vers
- run: uname -m
jobs:
test:
runs-on:
group: Mobile - iOS
labels: macos-26
steps:
- run: sw_vers
- run: uname -m
GitHub added more org-level controls for hosted runners recently, including restricting standard labels and placing macOS hosted runners into runner groups, so the UI can show a runner/group as ready while this repository still cannot be scheduled onto it. |
Beta Was this translation helpful? Give feedback.
-
|
Thanks, that result is actually a very useful signal. If the second test you ran was the group-based one using
That points back to the original selector: runs-on:
group: Mobile - iOS
labels: [ghe-runner-macOSARM64-os26]Most likely So my recommendation would be:
runs-on:
group: Mobile - iOS
labels: macos-26
References:
|
Beta Was this translation helpful? Give feedback.
-
|
Thanks for the screenshot. One correction to my previous interpretation: the screenshot does not show the job actually running steps yet. It shows that the job has been queued for several minutes and is still at: That changes the diagnosis a bit. Since the standard I would narrow it down with these checks:
jobs:
route-test:
runs-on: macos-26
steps:
- run: sw_vers
- run: uname -m
Relevant docs:
|
Beta Was this translation helpful? Give feedback.
-
|
Thanks, the new screenshots make this much clearer. The most important one is the run with no runner group: At that point I would stop treating this as a YAML syntax, PR trigger, or custom-label problem. If The runner-group case may still matter for your final workflow, but it is probably not the first issue anymore, because the same queueing happens without I would ask the org/enterprise Actions admin to check these specifically:
One small caveat on the other workflow that worked: if that test workflow used If your admin does not see any macOS jobs consuming the limit, then I think an Enterprise Support ticket is the right next step. I would include:
That should let GitHub Support distinguish between a real concurrency saturation case and a scheduler/capacity-state issue. Reference: https://docs.github.com/en/actions/reference/limits#job-concurrency-limits-for-github-hosted-runners |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for checking that. A few clarifications that may help separate the remaining possibilities. First, So I would test the environment separately instead of assuming it is the cause. I would use this exact control workflow first: name: macos-route-test
on:
workflow_dispatch:
jobs:
macos-route-test:
runs-on: macos-26
timeout-minutes: 10
steps:
- run: sw_vers
- run: uname -mImportant details for this control test:
If this still shows If the control workflow starts successfully, then add the pieces back one at a time:
On the Copilot review comments question: Copilot PR review comments themselves should not restrict runner scheduling. They are just PR review/comment activity. The only related thing I would check is whether there is a separate Copilot/PR-review workflow consuming macOS runners, or whether the PR is subject to an Actions approval policy. But that would still be separate from Copilot comments themselves. Also, when you say no one else is using References:
|
Beta Was this translation helpful? Give feedback.
-
|
Your control workflow has now removed the custom label, runner group, and protected environment from the equation, yet the standard Opening an Enterprise Support ticket is the correct next step. Include the organization/enterprise name, affected repository, run IDs and timestamps, requested label ( I would leave the minimal control workflow available until Support responds, but avoid repeatedly re-running it because the results are already consistent. |
Beta Was this translation helpful? Give feedback.
-
|
@initial-d My admin pointed this one that mac-os runners are not available for sub domains. I saw that too. We are running with a subdomain. If this is the case, what should we do? Please advise
|
Beta Was this translation helpful? Give feedback.
-
|
I'm having similar issues and appears to be an expired credential on GitHub's end. Title: pipelines.actions.githubusercontent.com serves expired TLS certificate; self-hosted runners cannot connect Since 2026-07-19 23:12 UTC, our self-hosted GitHub Actions runner has been unable to reconnect. It reports an SSL connection failure and all jobs targeting that runner remain queued. From the runner host, pipelines.actions.githubusercontent.com resolves through the system resolver, Cloudflare (1.1.1.1), Google (8.8.8.8), and Quad9 (9.9.9.9) to 13.107.42.16. Direct TLS validation consistently receives:
The host clock is NTP-synchronized, and github.com plus api.github.com validate successfully from the same machine. Can GitHub confirm whether this Actions CDN endpoint is affected and restore a valid certificate? |
Beta Was this translation helpful? Give feedback.
-
|
If your admin means that GitHub-hosted macOS runners are not available for your Enterprise/subdomain tenant, then there probably is no workflow YAML change that can fix this. The control test already proved the important part: even a minimal job with only: runs-on: macos-26remains queued. That means the label is recognized, but no hosted macOS capacity is being allocated to that repository/org route. I would separate the next steps like this:
I would also treat the expired TLS comment above as a separate issue unless your logs show the same certificate failure. Your symptom so far is a GitHub-hosted macOS allocation/availability problem, not a self-hosted runner connectivity problem. Relevant docs:
|
Beta Was this translation helpful? Give feedback.





Uh oh!
There was an error while loading. Please reload this page.
-
🏷️ Discussion Type
Question
💬 Feature/Topic Area
Actions Runner
Discussion Details
Description
We are seeing an issue in our GitHub Enterprise environment where an iOS workflow job remains queued and does not start, even though the matching runner appears Ready in the UI.
Workflow / Job
Here is the snapshot of the yml
Observed behavior
The job stays queued with a message indicating that all matching runners are busy / waiting for a runner to pick up the job.
At the same time, the runner:
ghe-runner-macOSARM64-os26
runner group: Mobile - iOS
appears as Ready in the UI.
This creates an inconsistency between scheduler/job state and runner availability shown in the interface. Its indefinitely waiting for hours together. I've tried re-running jobs multiple times with only label mentioned above and in combination as well. Nothing worked out.
Why we are raising this
We have already verified that the workflow syntax is valid and that the requested runner group and label match the runner shown in the UI. The issue appears to be with runner assignment rather than workflow logic.
We have also checked against the following
Runner config:
What we need help confirming
Please help determine whether this is due to:
or a UI/state mismatch where the runner shows Ready but is not actually assignable.
I was checking these issues in the past, but it wasn't enough to help me
[Issue 1] (https://github.com/orgs/community/discussions/147604?utm_source=openai)
[Issue 2] (https://github.com/orgs/community/discussions/186184?utm_source=openai)
I would appreciate if someone could advise on this as I got stuck in the loop. If it is one of the above, Please advise how to fix it?
Regards,
BT
Beta Was this translation helpful? Give feedback.
All reactions