Why AWS read $131 on Oct 12, which machines drive it, and what it would cost to run CI another way.
2026-10-14 · source: AWS Cost Explorer (credits excluded) + live EC2 inventory · alternative prices are estimates, not quotes
About $84 of the $131 is CI test machines: ~1,000 machine-hours at ~$0.08/hr. Every runner is a RunsOn spot instance (AWS spare capacity, roughly 60–70% off list). The 8- and 16-core test machines are under a third of the hours but about 60% of the cost.
| Day | Runner cost | Machine-hours | Note |
|---|---|---|---|
| Oct 6 | $237 | 2,145 | incl. ~$46 full-price (on-demand) boxes |
| Oct 7 | $116 | 1,181 | |
| Oct 8 | $142 | 1,393 | |
| Oct 9 | $135 | 1,302 | |
| Oct 10 | $53 | 760 | weekend |
| Oct 11 | $60 | 910 | weekend |
| Oct 12 | $84 | 998 |
Whole AWS account: $338 (Oct 5) → $131 (Oct 12). The other ~$40/day: DynamoDB $8, public IP addresses $6, disk $5, CloudWatch $5, data out $5.
| Instance | Size | Used for | Hours | $/hr | Cost |
|---|---|---|---|---|---|
m7g.2xlarge | 8-core ARM, 32 GB | test shards (push / merge) | 88 | 0.19 | $17.0 |
m8g.2xlarge | 8-core ARM, 32 GB | test shards | 141 | 0.12 | $16.8 |
m8gd.2xlarge | 8-core ARM + local disk | test shards | 42 | 0.15 | $6.5 |
m8g.4xlarge | 16-core ARM | merge-queue runs | 20 | 0.28 | $5.6 |
m6idn.large | 2-core x86 | small jobs (guards, lint) | 76 | 0.06 | $4.4 |
r8gn.xlarge | 4-core ARM, 32 GB | PR test shards | 20 | 0.19 | $3.7 |
m8g.xlarge | 4-core ARM | PR test shards | 42 | 0.08 | $3.5 |
m7i-flex.large | 2-core x86 | small jobs | 61 | 0.04 | $2.4 |
m7g.4xlarge | 16-core ARM | merge-queue runs | 7 | 0.34 | $2.3 |
m6a.large | 2-core x86 | small jobs | 51 | 0.04 | $2.2 |
m6id.large | 2-core x86 | small jobs | 45 | 0.05 | $2.1 |
| 8 more types | mixed | — | ~395 | — | ~$17.3 |
| Total | 998 | 0.084 | $83.8 |
The "used for" column is inferred from the size tiers in .github/workflows/ci.yml (PRs get 4-core, pushes 8-core, merge queue 16-core), not from per-job tags.
| Option | Est. cost / day | Hurts the pipeline? | Verdict |
|---|---|---|---|
| Today — RunsOn spot on AWS | $55–85 | — | baseline |
| Run tests after a merge to main on 4-core, not 8-core | maybe −$10 | No. Nobody waits on those runs. | do first |
| Merge-queue runs on 8-core, not 16-core | maybe −$4 | A little. The merge queue gets slower. | maybe |
| Fold the ~300 tiny guard jobs a day into fewer jobs | maybe −$3–5 | No | worth it, needs work |
| GitHub's own runners | ~3–5× today | No | no Fede already ruled this out |
| Self-host on the mini | ~$0 extra | Yes. ~1,000 machine-hours a day is ~40 machines' worth of work on average, more at peaks, and the mini already can't take local tests. | no |
| Rented dedicated servers (Hetzner-type) | maybe $20–35 | Yes. A fixed fleet can't stretch for bursts, so PRs queue at busy times. We'd also have to run and patch the machines ourselves. | only if we need the bill under ~$40/day |
| AWS reserved pricing / Savings Plans | no change | — | n/a doesn't apply to spot |