CI Bench

Workload · CI Bench v1

monorepo workload

Median time runs from 172 s (Vitko Runners (warm starts + test splitting)) to 384 s (GitHub-hosted runners (ubuntu-latest, 2 vCPU)); GitHub-hosted (ubuntu-latest) takes 384 s.

Lowest median time
172 s
Vitko Runners (warm starts + test splitting)
GitHub-hosted (ubuntu-latest): 384 s
Slowest median
384 s
GitHub-hosted runners (ubuntu-latest, 2 vCPU)
2.2× the lowest
Lowest cost, managed
$0.0056
Vitko Runners (warm starts + test splitting)
mean per job
Failed runs
0
no failed runs
of 270 measured runs

Median time

Seconds from start to finish · lower is better
Vitko Runners (warm starts + test splitting)
172 s
Blacksmith
177 s
Vitko Runners
180 s
GitHub-hosted larger runner (4 vCPU)
220 s
Ubicloud
276 s
Self-hosted runners on Google Cloud
278 s
Self-hosted runners on AWS (one VM per job)
281 s
RunsOn
288 s
GitHub-hosted (ubuntu-latest)
384 s

Table

Ordered by median time. Self-hosted options are priced all-in at 100,000 jobs a month. Green marks the lowest median time and the lowest cost among the managed runners.
ConfigurationMedianp95Queue p50Queue p95CostOK
Vitko Runners (warm starts + test splitting)172 s191 s2 s19.9 s$0.005630 of 30
Blacksmith177 s291 s8 s12.6 s$0.01430 of 30
Vitko Runners180 s211 s2 s37.8 s$0.005830 of 30
GitHub-hosted larger runner (4 vCPU)220 s235 s3 s3.5 s$0.04630 of 30
Ubicloud276 s366 s16.5 s27.1 s$0.006130 of 30
Self-hosted runners on Google Cloud278 s297 s2 s2 s$0.01630 of 30
Self-hosted runners on AWS (one VM per job)281 s342 s50.5 s78.9 s$0.01230 of 30
RunsOn288 s313 s18 s27.6 s$0.003930 of 30
GitHub-hosted runners (ubuntu-latest, 2 vCPU)384 s401 s3 s4 s$0.04030 of 30

The job

  • Project: vercel/ai at ai@7.0.126 (45e1fbc3ea10d22f852e12b1c1851e289c85e835), licence Apache-2.0. Fetched at run time, not vendored.
  • Upstream job: .github/workflows/ci.yml, job Build Examples (next-core).
  • Benchmark workflow: .github/workflows/wl-monorepo.yml.

Portability edits (identical for every provider)

  • One shard (next-core) of the four.
  • Node is set up before pnpm.
  • The .turbo/.next build-cache restore is omitted: with the same commit every run it would replay every task. This is the full build a change to shared packages triggers. The pnpm store cache is kept.

suite/monorepo holds the workflow and notes.