Self-Hosted CI vs Cloud CI: When Does It Save Money?
The March 2026 GitHub Actions platform fee changed the maths. Here is the updated break-even analysis. Updated April 2026.
Updated for March 2026 platform fee
GitHub now charges $0.002/min for self-hosted runners on private repos. This fee applies on top of your server cost, reducing the saving from self-hosting. Teams that self-hosted specifically to avoid GitHub compute charges should recalculate.
The Core Calculation
Break-Even Tables by Instance Type
| Self-hosted runner | Monthly server cost | Break-even (vs GitHub Actions Linux) |
|---|---|---|
| Hetzner CX21 (2 vCPU / 4 GB) | $5/mo | ~3,000 min |
| Hetzner CX31 (2 vCPU / 8 GB) | $10/mo | ~5,500 min |
| AWS t3.small | $15/mo | ~9,750 min |
| AWS t3.medium | $30/mo | ~16,000 min |
| AWS c5.xlarge | $120/mo | ~42,000 min |
Formula: break-even minutes = (server cost / ($0.006 - $0.002)) + free tier minutes. Hetzner (EU) is dramatically cheaper than AWS for European teams with no strict data residency requirements.
Self-Hosted Break-Even Calculator
Compare hosted CI cost vs self-hosted runner cost including the 2026 platform fee.
Does not include engineering maintenance time. GitHub Actions: $0.002/min platform fee applies to private repos (March 2026). Prices as of April 2026.
GitLab CI Self-Managed: No Platform Fee
GitLab does not charge a platform fee for self-hosted runners
If you switch from GitHub Actions to GitLab CI self-managed, your total self-hosted cost = just the server. No platform fee means the break-even calculation is much more favourable.
| Scenario | GitHub Actions self-hosted | GitLab CE self-managed |
|---|---|---|
| 20,000 min/mo, t3.medium ($30/mo) | $30 + $40 (platform fee) = $70/mo | $30/mo (server only) |
| 50,000 min/mo, t3.large ($60/mo) | $60 + $100 = $160/mo | $60/mo |
The macOS Exception: Always Self-Host High-Volume iOS CI
Self-hosting macOS CI requires physical Apple hardware (Mac mini at $599+, Mac Studio at $1,999+). Amortised over 3 years + electricity + colocation: roughly $40-80/month per machine.
| Monthly iOS build minutes | GitHub Actions hosted ($0.048/min) | Self-hosted Mac mini (amortised) |
|---|---|---|
| 500 min/mo | $24/mo | ~$40-80/mo |
| 1,000 min/mo | $48/mo | ~$40-80/mo |
| 2,000 min/mo | $96/mo | ~$40-80/mo |
| 5,000 min/mo | $240/mo | ~$50-90/mo |
At around 830-1,670 minutes/month per machine, self-hosted macOS breaks even. Any iOS team doing daily CI should self-host.
Arm Runners: 20-30% Additional Savings
AWS Graviton (Arm) runners cost 20-30% less than x86 equivalents for comparable performance. GitHub now offers native Arm-hosted runners. Most CI workloads (Node.js, Python, Go) run unmodified on Arm.
For self-hosted Arm: Hetzner and Ampere Cloud offer Arm instances at very low cost. An Ampere A1 Compute instance on Oracle Cloud Free Tier gives 4 Arm vCPU / 24 GB RAM - effectively free for CI.