GitHub Actions couldn’t find any available hosted runners to execute your job because the demand for runners exceeded the available supply in the selected runner group and operating system.

Here’s why that happens and how to fix it:

Runner Provisioning Delays

Diagnosis: The most common cause is simply a temporary surge in demand. GitHub’s hosted runners are a shared resource, and during peak times, the queue can grow.

Fix: Wait. Seriously. This is usually resolved within minutes to an hour. There’s no command to speed this up; it’s a matter of waiting for other jobs to finish and free up runners.

Why it works: You’re not doing anything; you’re just waiting for the system to catch up to the current load.

Incorrect Runner Configuration or Runner Group

Diagnosis: You might be requesting a runner with specific labels (e.g., macos-latest, windows-latest, ubuntu-22.04) that are currently unavailable or oversubscribed, or your organization’s runner group settings are too restrictive.

Check:

  1. Workflow File: Examine your .github/workflows/your_workflow.yml file. Look for the runs-on: or runs-on: matrix.
    • Example: runs-on: [ubuntu-latest, 16.04]
  2. GitHub UI: Navigate to your organization’s Settings > Actions > Runner groups. Check the Runner type and Labels for the groups your repository is assigned to.

Fix:

  1. Adjust runs-on: If you’re using a specific OS version (e.g., ubuntu-20.04), try a more general label like ubuntu-latest or ubuntu. If you’re using a specific hardware requirement, consider if it’s truly necessary.
    • Change runs-on: [ubuntu-20.04] to runs-on: [ubuntu-latest]
  2. Review Runner Groups: If you control the organization, ensure the runner groups your repository is in have sufficient runners of the requested type. You might need to add more runners to that group or adjust the group’s scope.

Why it works: By requesting a more common or general runner type, you increase the pool of available runners that can satisfy your job’s requirements. Adjusting runner group settings ensures that the available runners are correctly categorized and accessible.

Rate Limiting on Runner Usage

Diagnosis: GitHub Free and Team plans have limits on the number of minutes and concurrent jobs you can run on hosted runners. If you’ve hit these limits, new jobs will queue indefinitely.

Check:

  1. GitHub UI: Go to your organization’s Settings > Actions > Billing. Look for "Usage" or "Runner minutes."
  2. Repository UI: For individual repositories, go to Settings > Actions > General. Under "Workflow runs," check the "Runner concurrency" and "Hosted runner usage" sections.

Fix:

  1. Upgrade Plan: If you’re consistently hitting limits, consider upgrading your GitHub plan or purchasing additional runner minutes.
  2. Optimize Workflows: Reduce the duration of your jobs. Use caching effectively, parallelize steps where possible, and remove unnecessary steps.
  3. Increase Concurrency Limits (if applicable): If you have a paid plan, you might be able to increase the number of concurrent jobs allowed.

Why it works: You’re either paying for more resources or making better use of the resources you have, which allows your jobs to be scheduled and run.

Repository/Organization Runner Scope Issues

Diagnosis: If you’re using self-hosted runners or specific runner groups, your repository might not be granted access to the runner group that has available runners.

Check:

  1. GitHub UI: Navigate to Organization > Settings > Actions > Runner groups.
  2. Check the Selected repositories for the runner group that your job is intended to use. Ensure your repository is listed.

Fix: Add your repository to the appropriate runner group. This is done by editing the runner group settings in the organization’s Actions settings.

Why it works: This explicitly grants permission for your repository’s jobs to utilize the runners managed by that specific group.

Network Connectivity or Firewall Issues (Less Common for Hosted)

Diagnosis: While extremely rare for GitHub-hosted runners themselves (as GitHub manages their network), if you are using self-hosted runners and experiencing this, it could be a network issue preventing the runner from registering or picking up jobs.

Check (for self-hosted):

  1. Runner Logs: Check the logs of your self-hosted runner agent for any network-related errors.
  2. Firewall Rules: Ensure your firewall is not blocking outbound connections to *.actions.githubusercontent.com and api.github.com on ports 443 and 22.

Fix (for self-hosted): Adjust firewall rules or network configurations to allow necessary outbound traffic.

Why it works: This ensures the self-hosted runner agent can communicate with GitHub’s API to receive job instructions and report its status.

Outdated Runner Image or Software

Diagnosis: Occasionally, an issue with the specific runner image being used (e.g., a bug in ubuntu-latest at a particular point in time) can cause jobs to fail or hang, effectively making those runners unavailable.

Check:

  1. GitHub Status Page: Check www.githubstatus.com for any ongoing incidents related to Actions runners.
  2. Workflow Run History: Look at recent workflow runs. If many jobs started failing around the same time with similar errors, it might indicate an image issue.

Fix:

  1. Specify an Older Image: If ubuntu-latest is problematic, try pinning to a specific, known-good version like ubuntu-22.04 or ubuntu-20.04 temporarily.
    • Change runs-on: ubuntu-latest to runs-on: ubuntu-22.04
  2. Wait for GitHub to Update: If it’s a widespread image issue, GitHub will eventually update the images.

Why it works: By using a different, stable image, you bypass the specific bug or problem affecting the default image.

Once you’ve resolved the "No Hosted Runners Available" error, the next potential hurdle you might encounter is a "Workflow run has been canceled because it was running for too long" error if your jobs are exceeding the maximum execution time limits.

Want structured learning?

Take the full Github-actions course →