CI Bench

Measured · Result set v1 · Oct 7–11, 2026 · Updated October 29, 2026

GitHub Actions job time by runner, workload by workload

Median seconds per job, eleven workloads, nine configurations. Green marks the lowest in each column.

Short answer

In CI Bench v1, median job time on GitHub-hosted (ubuntu-latest) was cli 368 s, codex-lint 884 s, container 239 s, fd 92 s, flask 23 s, guava 1167 s, monorepo 384 s, pydantic 179 s, ts 784 s, vite 603 s, vue 121 s. The configuration with the lowest median differed by workload: Vitko Runners (warm starts + test splitting), Vitko Runners, RunsOn, Self-hosted runners on Google Cloud. Maintained by Vitko, Inc., which sells one of the products measured.

Median job time

Median job time by workload
Configurationclicodex-lintcontainerfdflaskguavamonorepopydantictsvitevue
Vitko Runners (warm starts + test splitting)Vitko140 s405 s178 s45 s13 s651 s172 s69 s243 s199 s32 s
Vitko RunnersVitko272 s404 s179 s49 s16 s655 s180 s105 s372 s350 s63 s
GitHub-hosted larger runner (4 vCPU)192 s476 s185 s66 s21 s946 s220 s154 s435 s288 s67 s
Blacksmith286 s448 s386 s†65 s22 s735 s177 s103 s401 s360 s76 s
Self-hosted runners on Google Cloud310 s581 s178 s64 s11 s820 s278 s119 s533 s401 s76 s
RunsOn327 s623 s174 s89 s38 s897 s288 s147 s570 s437 s101 s
Self-hosted runners on AWS (one VM per job)357 s512 s247 s114 s70 s717 s281 s154 s433 s403 s117 s
Ubicloud359 s682 s213 s87 s36 s881 s276 s159 s560 s502 s114 s
GitHub-hosted runners (ubuntu-latest, 2 vCPU)368 s884 s239 s92 s23 s1167 s384 s179 s784 s603 s121 s

† Layer cache did not hit in this run; a re-run is planned. See method.

Median of 30 runs per cell. p95, queue time and cost: each workload page. Jobs are one project's CI job each; your workflow will differ.

More: all questions answered · 12 options compared · ranked by speed · ranked by cost per job · calculator.

Method: how the runs were made; data: results.json; every raw record: the repository. Maintained by Vitko, Inc., which sells one of the products measured. Page dated October 29, 2026.

† Layer cache did not hit in this run; a re-run is planned. See method.