DEV Community

Cover image for The cheapest GitHub Actions runners in 2026: what 100,000 minutes cost
Domas Bitvinskas
Domas Bitvinskas Subscriber

Posted on AI-assisted

The cheapest GitHub Actions runners in 2026: what 100,000 minutes cost

I build open source developer tools, mostly supergateway and Supercov. This month I looked at what their CI actually uses.

From October 1 to 27, those repos ran 534,311 minutes on GitHub Actions. GitHub billed us $0, because the repos are public. At list price the same minutes come to $8,292.

Our open source repos ran 534,311 GitHub Actions minutes from October 1 to 27, worth $8,292 at list price and billed $0: macOS $4,902, Linux x64 $1,614, Windows x64 $1,336, Windows Arm $354, Linux Arm $87

macOS is 15% of the minutes and 59% of the money. Most of the rest is test matrices: Supercov runs its compatibility tests on Linux, Linux Arm, macOS, Windows and Windows Arm on every pull request, including the ones coding agents open.

If those repos were private, that would be a real bill. That question is how we ended up building our own runners, SuperCI, which start a machine per job in your own cloud account. Along the way I priced every other option, and learned a few things about what a CI minute really costs.

GitHub Actions runner pricing, side by side

To compare like with like: 100,000 minutes a month of Linux jobs on 4 vCPUs, about 110 ten-minute jobs a day. Every price is from the provider's own pricing page, read on 27 October 2026.

The same month of CI on nine GitHub Actions runners: GitHub larger runner $1,200, Depot $1,200, Blacksmith $800, WarpBuild $800, Namespace $400 to $600, WarpBuild BYOC about $340, Ubicloud $250, RunsOn about $150, SuperCI about $140

Runner Where jobs run Cost per minute (4 vCPU Linux) 100,000 minutes
GitHub larger runner GitHub $0.012 $1,200
Depot Depot's AWS account $0.012 $1,200, plus a plan from $20
Blacksmith Blacksmith's hardware $0.008 $800, with 3,000 free minutes a month
WarpBuild WarpBuild's cloud $0.008 $800
Namespace Namespace's hardware $0.004 to $0.006 $400 to $600, plans from $100
Ubicloud Ubicloud's hardware $0.0025 (Standard) $250, with 1,250 free minutes
WarpBuild BYOC Your AWS, GCP or Azure $0.002 plus your cloud $200 plus the machines (~$140 on spot)
RunsOn Your AWS account ~$0.0015 on spot ~$150, plus a €300–3,600 yearly licence
SuperCI Your AWS, Cloudflare or Modal ~$0.0014 on spot ~$140, no fee (MIT)
Actions Runner Controller Your Kubernetes cluster Your cluster's cost Your cluster's share

Spot prices are AWS us-east-1, with the disk and public address counted in. They move through the day.

The pattern: hosted runners cost $0.0025 to $0.012 a minute, and a spot instance in your own AWS account costs about $0.0014. The rest of this post is what it took to make that cheap minute actually work.

What we learned running CI on AWS spot instances

Spot machines get taken back, and GitHub makes that awkward. AWS gives two minutes' notice and ends the machine; the job on it fails. GitHub won't restart a single job while the rest of its run is still going, so the earliest you can retry is when the run finishes. We retry on an on-demand machine so a job is never caught twice. And turn fail-fast off in matrices: with it on, one interrupted job cancels its siblings and the retry repeats all of them.

The cheapest machine isn't the cheapest job. For 4 CPUs, AWS has several machine families at different spot prices, and the newer ones run the same job faster. We ended up pricing every family in every zone and counting each newer generation as about a fifth faster, so a job gets the newest machine whenever it's well priced that hour.

The disk matters more than you'd think. An EBS volume comes with 125 MiB/s whatever its size. Making sixteen copies of a 300 MB test database took 110 seconds at that speed and 14 seconds at 1,000 MiB/s. Paying for disk speed in proportion to the machine costs a tenth to a twentieth of the machine itself.

Keep the cache next to the machines. With GitHub's cache in an S3 bucket in the same region, a 4 GB cache restored in 11 seconds instead of 21 on GitHub's own cache. Keeping Docker images there too brought a local Supabase start from 100 seconds to 37.

Per-minute price is only half the sum. The hosted services sell speed: Depot says "up to 3x faster", Blacksmith "2x faster than GitHub's runners", Namespace "2x-10x faster builds". If a job really runs twice as fast, it costs half the minutes. None of them publishes a comparison against the others on the same jobs, and we haven't run one yet either.

Which runner is cheapest for you

  • Most teams: SuperCI. The lowest price per minute in the table, no fee or licence, and jobs that stay in your own AWS, Cloudflare or Modal account. It runs Linux x64 and Arm, Windows and GPU jobs, for GitHub Actions and GitLab CI. Nothing runs between jobs, so a quiet month costs little.
  • Jobs in your own account, with a paid vendor: RunsOn on AWS with a yearly licence, or WarpBuild BYOC on AWS, GCP or Azure at $0.002 a minute on top.
  • A few thousand minutes and no cloud account: Blacksmith's 3,000 or Ubicloud's 1,250 free minutes.
  • macOS jobs: keep them on GitHub, Blacksmith, Depot or Namespace, and move the rest.
  • You already run Kubernetes and want runners as pods: Actions Runner Controller.

Whichever you pick, switching is one line per job:

jobs:
  test:
    # runs-on: ubuntu-24.04-4core            # GitHub larger runner
    # runs-on: blacksmith-4vcpu-ubuntu-2404  # Blacksmith
    runs-on: superci/cpu=4                   # SuperCI
Enter fullscreen mode Exit fullscreen mode

We made SuperCI MIT licensed and free because the point was the cheapest minute your cloud sells, with no second margin on top. If you try it, npx @superci/cli dashboard sets it up from your computer.

Sources and more detail

The full comparisons, with every source and the date it was read, are on superci.dev:

If a price here is out of date, tell me in the comments and I'll fix it.

Top comments (5)

Collapse
 
alexshev profile image
Alex Shev •

The matrix fail-fast interaction is an important cost and reliability detail: a spot interruption can amplify work far beyond the interrupted job. I would publish a small workload-level metric beside per-minute price—median wall time and rerun minutes after an interruption—so runner comparisons expose that amplification instead of treating every billed minute as equivalent.

Collapse
 
nedomas profile image
Domas Bitvinskas •

I agree that there are quite a few nuances here Alex!

In practice over the last month interruptions weren’t a problem. Our CI spends most of the time running test suites. Test suites are naturally many short (~3min), parallel jobs (since you want them to finish asap).

It fits the AWS spot model perfectly - if anything is interrupted, it is a cheap short job that can be re-run very quickly. AWS actually gives a 2min headsup when it wants to take back the spot, so usually your suite has the time to finish (and SuperCI takes that into the account).

Collapse
 
amintacccp profile image
tamina •

The part I will take back to my own CI setup is that per-minute price is only half the sum. Your points about disk throughput, cache locality, and macOS carrying 59% of the cost despite 15% of the minutes are a good reminder to measure job duration and cache-restore time, not just the runner rate, before switching. For short, easily retried jobs the spot-interruption trade-off looks reasonable; for long or stateful jobs I would want a clearer retry and checkpoint story first.

Collapse
 
nedomas profile image
Domas Bitvinskas •

Yeah, I guess key learning is that you can get CI 8x cheaper than GitHub actions if you run it on AWS spot. For long jobs, you can just run it on AWS on-demand (which SuperCI supports aswell, even per-workflow) - this ensures its not interrupted but AWS on-demand machines cost about 3x more than spot. Hope it helps!

Collapse
 
robertpaschal profile image
Odinaka Robert Nnamani •

self-hosted on spot is the only part of that comparison that moves the bill.