policy billing ai_generated true

GitHub Actions free minutes exhausted much faster than expected on private repositories

ID: policy/github-actions-minutes-private-repo

Also available as: JSON · Markdown
88%Fix Rate
90%Confidence
3Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

GitHub Actions minutes have a multiplier for private repos: Linux=1x, macOS=10x, Windows=2x. A 10-minute macOS job costs 100 minutes from your 2000 free minutes. This multiplier is buried in the billing docs, not in the Actions documentation.

generic

Workarounds

  1. 92% success Use Linux runners for everything except platform-specific tests
    Run linting, unit tests, build on Linux. Only use macOS for iOS-specific integration tests.
  2. 90% success Set a spending limit of $0 to prevent unexpected charges
    GitHub Settings -> Billing -> Actions -> Spending limit: $0.00  # hard stop when free minutes exhausted
  3. 85% success Use self-hosted runners for macOS/Windows heavy workloads
    Self-hosted runners have no minute limits. Use them for expensive platform-specific CI.

Dead Ends

Common approaches that don't work:

  1. Assume 2000 free minutes means 2000 minutes of any runner 92% fail

    macOS runners cost 10x. 2000 free minutes = only 200 minutes of macOS CI. A single 10-min macOS build = 100 minutes billed.

  2. Switch from Linux to macOS runners for iOS builds without checking billing impact 88% fail

    macOS runners cost 10x Linux. A pipeline running 20 min/day on macOS exhausts free tier in ~10 days.