Platform hub

GitHub Actions limits

Job duration, workflow, concurrency, artifact, and cache limits. Values below are scoped rather than flattened into one misleading platform-wide number.

Verified Aug 22, 2026Official docs
Quick answer:  GitHub Actions has multiple independent constraints. Match the exact plan, model, runtime, invocation mode, or server configuration shown in each row.

Current documented limits

ConstraintCurrent valueScopeVerified source
GitHub-hosted job execution timeA job is terminated and fails when it reaches the limit.6 hoursAll GitHub-hosted runnersGitHubAug 22, 2026
Self-hosted job execution timeDistinct from the total workflow run time limit.5 daysSelf-hosted runnersGitHubAug 22, 2026
Artifact storagePlan-level included artifact storage shown in the Actions limits table.500 MBGitHub Free / Free for organizationsGitHubAug 22, 2026
Default artifact and log retentionPublic repositories can configure 1–90 days; private repositories can configure 1–400 days, subject to organization or enterprise limits.90 daysRepository settingGitHubAug 22, 2026

How to apply GitHub Actions limits safely

The monitored baseline covers GitHub-hosted job execution time, Self-hosted job execution time, Artifact storage, Default artifact and log retention. Treat these as separate constraints rather than one platform-wide capacity number: a workload can fit one row and still fail another because the plan, model, endpoint, runtime, region, invocation mode, or account scope differs.

  1. Match the production workload to the exact scope printed beside each value and confirm it in the active GitHub Actions console, configuration, or response headers.
  2. Measure the serialized request, token volume, duration, concurrency, storage, or connection demand at realistic percentiles, then preserve headroom for bursts and retries.
  3. Check every adjacent layer—client, SDK, gateway, proxy, queue, database, and downstream service—for a smaller effective limit before changing architecture.

Specific limit pages

These pages exist because the constraint has a distinct implementation or troubleshooting intent. Closely related keyword variations stay consolidated.

Compare alternatives

Official sources

View GitHub Actions change history