CI Bench

Workload · CI Bench v1

container workload

Median time runs from 174 s (RunsOn) to 386 s (Blacksmith); GitHub-hosted (ubuntu-latest) takes 239 s.

Lowest median time
174 s
RunsOn
GitHub-hosted (ubuntu-latest): 239 s
Slowest median
386 s
Blacksmith
2.2× the lowest
Lowest cost, managed
$0.0047
Ubicloud
mean per job
Failed runs
0
no failed runs
of 270 measured runs

Median time

Seconds from start to finish · lower is better
RunsOn
174 s
Vitko Runners (warm starts + test splitting)
178 s
Self-hosted runners on Google Cloud
178 s
Vitko Runners
179 s
GitHub-hosted larger runner (4 vCPU)
185 s
Ubicloud
213 s
GitHub-hosted (ubuntu-latest)
239 s
Self-hosted runners on AWS (one VM per job)
247 s
Blacksmith
386 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
RunsOn174 s188 s18 s21.5 s$0.006030 of 30
Vitko Runners (warm starts + test splitting)178 s208 s1 s2 s$0.006130 of 30
Self-hosted runners on Google Cloud178 s201 s1 s2 s$0.05330 of 30
Vitko Runners179 s199 s1 s2 s$0.006030 of 30
GitHub-hosted larger runner (4 vCPU)185 s215 s3 s4.5 s$0.04230 of 30
Ubicloud213 s262 s18 s21.5 s$0.004730 of 30
GitHub-hosted runners (ubuntu-latest, 2 vCPU)239 s282 s3 s3 s$0.02730 of 30
Self-hosted runners on AWS (one VM per job)247 s300 s52.5 s84.7 s$0.04430 of 30
Blacksmith386 s663 s8 s9 s$0.03130 of 30

The job

  • Project: mastodon/mastodon at v4.7.2 (3987b9fd624010eeeaeb7cad96606b05aa813f6a), licence AGPL-3.0. Fetched at run time, not vendored.
  • Upstream job: .github/workflows/build-container-image.yml, job build-image (linux/amd64).
  • Benchmark workflow: .github/workflows/wl-container.yml.

Portability edits (identical for every provider)

  • No registry login or push.
  • Built with upstream's PR-build layer cache (type=gha). Each run first appends a comment to config/application.rb, as a pull request would change the app: dependency layers can come from the cache, and everything after COPY . /opt/mastodon/ rebuilds. Providers' own Docker layer caches (where documented) are used the same way.

suite/container holds the workflow and notes.