fshy

Home / GitHub

GitHub Actions Artifacts (public repositories)

github.com/features/actionsPaaSstorage/github-actions-artifactsJSONcomparereport an errorprovider JSON

Free allowance
Plan table still lists artifact storage 500 MB (Free) / 1 GB (Pro) / 2 GB (Team) / 50 GB (Enterprise), and that pool is SHARED with GitHub Packages.
Verdict
caveatusable, with a named limit or an unprobed read path
Cost
free tier
Identity
anonymousno card, no phone
Binding limit
retention-clampedRetention: default 90 days
Evidence
reported4 sources; a third party said so
Freshness
stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
Free tierPlan table still lists artifact storage 500 MB (Free) / 1 GB (Pro) / 2 GB (Team) / 50 GB (Enterprise), and that pool is SHARED with GitHub Packages. Billing docs state Actions usage is free for public repositories. Artifact storage for public repos is not metered in practice, but the docs do not say 'unlimited' explicitly — flag as ambiguity.
unit GB; metered on stored-bytes
Pricenone stated
Limits
  • retention-clamped (binding) Retention: default 90 days source
Retention: default 90 days; public repos may be set 1-90 days only (private repos 1-400 days). retention-days on upload-artifact cannot exceed the repo/org setting. 500 artifacts per job. Anonymous download requires a token, hence the wrapper.
Bindingretention-clamped a clock, not a quota: bytes leave whether or not a user is finished with them
Identityanonymous not published
EgressFree. Downloads redirect to productionresultssa*.blob.core.windows.net. But the API download endpoint requires a token: anonymous GET of /actions/artifacts/{id}/zip returns 401.
Per-object capnot stated
RetentionRetention: default 90 days; public repos may be set 1-90 days only (private repos 1-400 days) (90 days)
Interfacerest, cli rest
Toolingactions/upload-artifact@v4 (max 500 artifacts per job), REST /repos/{o}/{r}/actions/artifacts, gh CLI. Third-party: nightly.link (see above), monteslu/loukai and alexreich/SitePix both have commits literally titled 'bypass Actions artifact storage; upload directly to release', which in plain terms means moving the bytes to releases instead; the ecosystem's own conclusion is that releases beat artifacts.
Composes withUnlimited public repos x 500 artifacts/job x jobs. But retention caps it: this is a rotating buffer, never an archive.
ReliabilityHard TTL — artifacts are deleted at expiry and cannot be restored. Separate 10 GB/repo cache is also 7-day-evicted. Fine as a 90-day hot tier, useless as an archive.
Evidence 4
datesourcewhat it proved
2026-10-21docs.github.com/en/billing/concepts/product-billing/github-a'GitHub Actions usage is free for self-hosted runners and for public repositories'; storage table; 'Cache storage is a separate allowance of 10 GB per repository'
2026-10-21docs.github.com/en/repositories/managing-your-repositorys-se'For public repositories: you can change this retention period to anywhere between 1 day or 90 days'
2026-10-21api.github.com/repos/cli/cli/actions/artifacts?per_page=3probe: curl -D - -> 200, total_count 9646, expires_at present
2026-10-21api.github.com/repos/cli/cli/actions/artifacts/12312575009/zprobe: curl -o /dev/null -> 401 (token required, unlike release assets)
Unknown values 4
  • $.identity_cost.detail boilerplate
  • $.per_object_cap.notes the field may be stated in a source that was not read
  • $.per_object_cap.stated the field may be stated in a source that was not read
  • $.retention.notes the field may be stated in a source that was not read