GitHub Actions macOS vs Linux: the cost of one build
A build on the standard macOS runner is billed at $0.062 a minute; the same build on the standard Linux 2-core x64 runner is billed at $0.006. This page turns those two rates into a price per build at common build lengths, then into a monthly bill, using this site's calculator.
Assumptions
- A build is one job. A workflow with several jobs is several builds for billing.
- The per-build table prices a billed build: one in a private repository after the plan's included minutes are used up. Inside the allowance, and in public repositories, a build on either runner costs $0.00.
- The build takes the same number of minutes on both runners. Real builds rarely do, so time yours on each before you compare.
- Standard runners only: Linux 2-core x64 and macOS 3-core or 4-core. Larger runners are not covered here.
Cost per build
| Build length | Linux 2-core, x64 | macOS | Extra cost on macOS |
|---|---|---|---|
| 5 minutes | $0.03 | $0.31 | $0.28 |
| 10 minutes | $0.06 | $0.62 | $0.56 |
| 15 minutes | $0.09 | $0.93 | $0.84 |
| 30 minutes | $0.18 | $1.86 | $1.68 |
The macOS rate is a little more than ten times the Linux rate, so every row keeps that ratio. It is a ratio of two prices, not a multiplier GitHub applies to your minutes: the GitHub pages read on the checked date list none.
Build lengths are whole minutes because GitHub rounds each job up to the nearest whole minute. A build that runs for 4 minutes and 12 seconds is billed as 5 minutes on either runner: $0.03 on Linux and $0.31 on macOS.
What the gap adds up to in a month
A GitHub Team account runs 20 builds per working day in a private repository, 15 minutes each, 22 working days a month. That is 440 builds and 6,600 minutes. The plan includes 3,000 minutes, so 3,600 are billed.
- All builds on Linux 2-core x64: $21.60 a month ($259.20 a year).
- All builds on macOS: $223.20 a month ($2,678.40 a year).
The difference is $201.60 a month, or $2,419.20 a year, for the same number of builds of the same length. The included minutes are worth far more when macOS jobs use them: 3,000 included minutes cover the same number of builds on either runner, but those builds would have cost ten times as much on macOS.
Keeping only one build in five on macOS
Most projects that need macOS do not need it for every job. Suppose the same account runs 80% of its builds on Linux and 20% on macOS, and the included minutes are shared in proportion to each runner's minutes.
| Runner | Minutes | Included minutes used | Minutes billed | Cost per month |
|---|---|---|---|---|
| Linux 2-core, x64 | 5,280 | 2,400 | 2,880 | $17.28 |
| macOS | 1,320 | 600 | 720 | $44.64 |
| Total | 6,600 | 3,000 | 3,600 | $61.92 |
The split costs $61.92 a month, or $743.04 a year: under a third of the all-macOS bill. A fifth of the builds still makes up most of the cost. Since included minutes are used in the order jobs run, the month can fall anywhere from $21.60, if the macOS builds used the allowance first, to $95.52, if the Linux builds did.
Choosing the runner for a job
- Needs macOS: building and signing an iOS or macOS app, and tests that drive Apple's own tools.
- Usually does not: linting, unit tests of shared code, dependency and licence checks, building documentation. These run on Linux at a tenth of the price per minute.
- Short jobs: a 20-second step on macOS is billed as a whole minute, $0.062, so it is worth folding it into a job that already runs there.
- Public repositories: standard runners are free, macOS included, so the comparison only matters for private ones.
Try your own split. The free calculator takes the share of jobs on each standard runner and shows the cost per month and per year, with the range for a mixed setup.