You may be rate limited by GitHub Actions when you scale your usage. Some limits can be increased by contacting us through the GitHub Support portal.
Unless otherwise stated, the expected behavior when a limit is reached is that the workflow/job will get cancelled.
These limits are subject to change.
Existing system limits
Job concurrency limits for GitHub-hosted runners
GitHub Support can increase job concurrency limits for GitHub Actions. To request an increase, submit a support ticket.
| Runner type | GitHub plan | Total concurrent jobs | Maximum concurrent macOS jobs | Maximum concurrent GPU jobs |
|---|---|---|---|---|
| Standard GitHub-hosted runner | Free | 20 | 5 | Not applicable |
| Standard GitHub-hosted runner | Pro | 40 | 5 | Not applicable |
| Standard GitHub-hosted runner | Team | 60 | 5 | Not applicable |
| Standard GitHub-hosted runner | Enterprise | 500 | 50 | Not applicable |
| Larger runner | Team | 1000 | 5 | 100 |
| Larger runner | Enterprise | 1000 | 50 | 100 |
Note
The maximum concurrent macOS jobs is shared across standard GitHub-hosted runners and GitHub-hosted larger runners.
Storage limits for all GitHub-hosted runners
GitHub Support cannot increase storage limits for GitHub Actions.
For information about cache storage limits and how to increase them, see Usage limits and eviction policy.
Private IP scaling for vnet injection on larger runners
When using larger runners with vnet injection, you need to determine the appropriate subnet IP address range, for which we recommend adding a buffer to the maximum job concurrency you anticipate. For instance, if the network configuration's runners are set to a maximum job concurrency of 300, utilize a subnet IP address range that can accommodate at least 390 runners. Note that Azure reserves 5 IPs in every subnet (first 4 and last 1), which sets a minimum practical subnet size depending on runner requirements. Very small subnets (like /29 or smaller) may not provide enough usable addresses for your needs.
Commonly hit dependent service limits
GitHub's REST API rate limits apply to GitHub Actions users, those that are commonly hit are:
-
Unauthenticated users - You can make unauthenticated requests if you are only fetching public data. Unauthenticated requests are associated with the originating IP address, not with the user or application that made the request.
The primary rate limit for unauthenticated requests is 60 requests per hour.
-
Authenticated users - You can use a personal access token to make API requests. Additionally, you can authorize a GitHub App or OAuth app, which can then make API requests on your behalf.
All of these requests count towards your personal rate limit of 5,000 requests per hour. Requests made on your behalf by a GitHub App that is owned by a GitHub Enterprise Cloud organization have a higher rate limit of 15,000 requests per hour. Similarly, requests made on your behalf by a OAuth app that is owned or approved by a GitHub Enterprise Cloud organization have a higher rate limit of 15,000 requests per hour if you are a member of the GitHub Enterprise Cloud organization. However, requests made by a higher-limit app reduce the remaining budget available for lower-limit authentication methods. For example, if an app with a 15,000 request limit makes 10,000 requests on your behalf, you will have exhausted the 5,000 request budget for your personal access tokens, even though the app has 5,000 requests remaining.
-
GitHub app installations - GitHub Apps authenticating with an installation access token use the installation's minimum rate limit of 5,000 requests per hour. If the installation is on a GitHub Enterprise Cloud organization, the installation has a rate limit of 15,000 requests per hour.
For installations that are not on a GitHub Enterprise Cloud organization, the rate limit for the installation will scale with the number of users and repositories. Installations that have more than 20 repositories receive another 50 requests per hour for each repository. Installations that are on an organization that have more than 20 users receive another 50 requests per hour for each user. The rate limit cannot increase beyond 12,500 requests per hour.
Primary rate limits for GitHub App user access tokens (as opposed to installation access tokens) are dictated by the primary rate limits for the authenticated user. This rate limit is combined with any requests that another GitHub App or OAuth app makes on that user's behalf and any requests that the user makes with a personal access token. For more information, see Rate limits for the REST API.
-
OAuth apps - For these requests, the rate limit is 5,000 requests per hour per OAuth app. If the app is owned by a GitHub Enterprise Cloud organization, the rate limit is 15,000 requests per hour.
-
GITHUB TOKEN - The rate limit for
GITHUB_TOKENis 1,000 requests per hour per repository. For requests to resources that belong to a GitHub Enterprise Cloud account, the limit is 15,000 requests per hour per repository. -
Secondary rate limits - In addition to primary rate limits, GitHub enforces secondary rate limits in order to prevent abuse and keep the API available for all users, these are not configurable with GHEC. For more information, see Rate limits for the REST API.
Docker Hub's rate limit for GitHub Actions
- GitHub-hosted runners pulling public images: Docker Hub's rate limit is not applied.
- GitHub-hosted runners pulling private images: Pulling private images from Docker Hub is subject to the rate limit.
- Self-hosted runners pulling public or private images: Pulling images from Docker Hub is always subject to the rate limit.
