CI Bench

Workload · CI Bench v1

pydantic workload

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

Lowest median time
69 s
Vitko Runners (warm starts + test splitting)
GitHub-hosted (ubuntu-latest): 179 s
Slowest median
179 s
GitHub-hosted runners (ubuntu-latest, 2 vCPU)
2.6× the lowest
Lowest cost, managed
$0.0022
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)
69 s
Blacksmith
103 s
Vitko Runners
105 s
Self-hosted runners on Google Cloud
119 s
RunsOn
147 s
GitHub-hosted larger runner (4 vCPU)
154 s
Self-hosted runners on AWS (one VM per job)
154 s
Ubicloud
159 s
GitHub-hosted (ubuntu-latest)
179 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)69 s119 s2.5 s47.9 s$0.002230 of 30
Blacksmith103 s145 s8 s11 s$0.008730 of 30
Vitko Runners105 s140 s2 s37.8 s$0.003430 of 30
Self-hosted runners on Google Cloud119 s129 s2 s2.5 s$0.006530 of 30
RunsOn147 s152 s18.5 s22 s$0.002430 of 30
GitHub-hosted larger runner (4 vCPU)154 s173 s3 s4 s$0.03330 of 30
Self-hosted runners on AWS (one VM per job)154 s184 s49.5 s67.8 s$0.006430 of 30
Ubicloud159 s204 s18.5 s27.6 s$0.003730 of 30
GitHub-hosted runners (ubuntu-latest, 2 vCPU)179 s196 s3 s4 s$0.02030 of 30

The job

  • Project: pydantic/pydantic at v2.13.5 (001dea020e0809844e5b17666432c9135a976f46), licence MIT. Fetched at run time, not vendored.
  • Upstream job: .github/workflows/ci.yml, job Test ubuntu-latest / 3.13.
  • Benchmark workflow: .github/workflows/wl-pydantic.yml.

Portability edits (identical for every provider)

  • One matrix cell (Linux, Python 3.13).
  • The coverage artifact upload is omitted (it feeds a separate combine job).
  • ulimit -s 16384 before the tests: GitHub's runner image sets a 16 MiB stack limit, stock Ubuntu 8 MiB, where a recursion test overflows.

suite/pydantic holds the workflow and notes.