<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joseph Vitko</title>
    <description>The latest articles on DEV Community by Joseph Vitko (@josephvitko).</description>
    <link>https://dev.to/josephvitko</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4203640%2F8108b463-4e5d-45d9-850f-9b77c66e8730.jpg</url>
      <title>DEV Community: Joseph Vitko</title>
      <link>https://dev.to/josephvitko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/josephvitko"/>
    <language>en</language>
    <item>
      <title>What a GitHub Actions job costs on each runner: CI Bench v1 cost per job by workload</title>
      <dc:creator>Joseph Vitko</dc:creator>
      <pubDate>Mon, 02 Nov 2026 22:43:27 +0000</pubDate>
      <link>https://dev.to/josephvitko/what-a-github-actions-job-costs-on-each-runner-ci-bench-v1-cost-per-job-by-workload-2l5c</link>
      <guid>https://dev.to/josephvitko/what-a-github-actions-job-costs-on-each-runner-ci-bench-v1-cost-per-job-by-workload-2l5c</guid>
      <description>&lt;p&gt;I maintain CI Bench, an open benchmark of GitHub Actions runners. I'm also the founder of Vitko, which sells one of the products measured (Vitko Runners, private beta). This post is about cost per job.&lt;/p&gt;

&lt;p&gt;A runner's list price per minute is not fully correlated with cost per job. Runners take different amounts of time and round differently. For example, GitHub rounds every job up to a whole minute, while Vitko Runners bills per second. So we measured the same twelve real open-source CI jobs on nine configurations and priced each run.&lt;/p&gt;

&lt;p&gt;Cost per job against GitHub-hosted 2 vCPU, at 100,000 jobs a month: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RunsOn 88% lower (self-hosted in your own AWS account, so excluding setup and operating work) &lt;/li&gt;
&lt;li&gt;Vitko Runners 84% lower&lt;/li&gt;
&lt;li&gt;Ubicloud 83% lower&lt;/li&gt;
&lt;li&gt;Blacksmith 52% lower. &lt;/li&gt;
&lt;li&gt;A GitHub-hosted 4 vCPU runner cost 39% more per job and ran 1.6x as fast. &lt;/li&gt;
&lt;li&gt;Self-hosted options spread fixed monthly costs over the volume so their figure moves with it, the calculator shows that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Links to the benchmark results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://cibench.com/cost-per-job-by-workload-github-actions-runners/" rel="noopener noreferrer"&gt;Full cost per job by workload, with intervals&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cibench.com/cost-ranking-github-actions-runners/" rel="noopener noreferrer"&gt;The full ranking&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cibench.com/prices/" rel="noopener noreferrer"&gt;List prices with source and read date for twelve providers&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vitko-inc/runner-benchmark" rel="noopener noreferrer"&gt;Method and every raw record&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corrections from any provider measured are welcome, please submit &lt;a href="https://cibench.com/submit/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>GitHub Actions runners ranked by speed and cost per job (October 2026)</title>
      <dc:creator>Joseph Vitko</dc:creator>
      <pubDate>Tue, 27 Oct 2026 07:00:39 +0000</pubDate>
      <link>https://dev.to/josephvitko/github-actions-runners-ranked-by-speed-and-cost-per-job-october-2026-294g</link>
      <guid>https://dev.to/josephvitko/github-actions-runners-ranked-by-speed-and-cost-per-job-october-2026-294g</guid>
      <description>&lt;p&gt;I maintain &lt;a href="https://cibench.com" rel="noopener noreferrer"&gt;CI Bench&lt;/a&gt;, an open benchmark of GitHub Actions runners. &lt;/p&gt;

&lt;p&gt;Disclosure first: I'm the founder of Vitko, which sells one of the products it measures (Vitko Runners). That's why I made every workflow, raw job record and line of method public, so you can check the numbers or re-run them.&lt;/p&gt;

&lt;p&gt;In my previous post I described how the benchmark works. This one is the results.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we measured
&lt;/h3&gt;

&lt;p&gt;Nine runner configurations, twelve real CI jobs from open-source projects (fd, flask, guava, pydantic, vite, vue, a monorepo and others), measured October 7 to 11, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub-hosted: &lt;code&gt;ubuntu-latest&lt;/code&gt; (2 vCPU) and a 4 vCPU larger runner&lt;/li&gt;
&lt;li&gt;Managed services: Blacksmith, Ubicloud, Vitko Runners (and Vitko with warm starts and test splitting)&lt;/li&gt;
&lt;li&gt;Self-hosted: RunsOn, plus two setups we ran ourselves on Google Cloud and on AWS (one VM per job)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ranked by speed
&lt;/h3&gt;

&lt;p&gt;Speed against &lt;code&gt;ubuntu-latest&lt;/code&gt;, as the geometric mean of median job time over the 12 workloads:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Speed vs ubuntu-latest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Vitko Runners (warm starts + test splitting)&lt;/td&gt;
&lt;td&gt;2.3× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Vitko Runners&lt;/td&gt;
&lt;td&gt;1.7× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;GitHub-hosted larger runner (4 vCPU)&lt;/td&gt;
&lt;td&gt;1.6× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Blacksmith&lt;/td&gt;
&lt;td&gt;1.6× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Self-hosted on Google Cloud&lt;/td&gt;
&lt;td&gt;1.5× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;RunsOn&lt;/td&gt;
&lt;td&gt;1.2× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Self-hosted on AWS (one VM per job)&lt;/td&gt;
&lt;td&gt;1.2× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Ubicloud&lt;/td&gt;
&lt;td&gt;1.1× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;GitHub-hosted &lt;code&gt;ubuntu-latest&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The ranking hides a lot: Blacksmith was fastest on the burst workload, and the self-hosted Google Cloud setup tied for fastest on flask. The per-workload table is on the &lt;a href="https://cibench.com/speed-ranking-github-actions-runners/" rel="noopener noreferrer"&gt;speed ranking page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ranked by cost per job
&lt;/h3&gt;

&lt;p&gt;Price per minute isn't cost per job, because a faster runner finishes sooner. At 100,000 jobs a month, using list prices dated October 5:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Cost per job vs ubuntu-latest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;RunsOn (self-hosted, priced all-in)&lt;/td&gt;
&lt;td&gt;88% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Vitko Runners&lt;/td&gt;
&lt;td&gt;84% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Vitko Runners (warm starts + test splitting)&lt;/td&gt;
&lt;td&gt;84% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Ubicloud&lt;/td&gt;
&lt;td&gt;83% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Self-hosted on AWS&lt;/td&gt;
&lt;td&gt;62% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Self-hosted on Google Cloud&lt;/td&gt;
&lt;td&gt;59% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Blacksmith&lt;/td&gt;
&lt;td&gt;52% lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;GitHub-hosted &lt;code&gt;ubuntu-latest&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;GitHub-hosted larger runner (4 vCPU)&lt;/td&gt;
&lt;td&gt;39% higher&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Self-hosted costs depend on volume: RunsOn is 88% lower at 100,000 jobs a month, but 43% higher at 1,000, because fixed costs spread over fewer jobs. Details are on the &lt;a href="https://cibench.com/cost-ranking-github-actions-runners/" rel="noopener noreferrer"&gt;cost ranking page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this doesn't tell you
&lt;/h3&gt;

&lt;p&gt;Twelve workloads aren't your workload. Intervals cover sampling noise, not your repo. We didn't measure every provider (Depot, Namespace, WarpBuild and others aren't in v1), and prices change, so every price on the &lt;a href="https://cibench.com/prices/" rel="noopener noreferrer"&gt;list prices page&lt;/a&gt; carries its source and the date it was read. The full &lt;a href="https://cibench.com/method/" rel="noopener noreferrer"&gt;method&lt;/a&gt; lists what's out of scope.&lt;/p&gt;

&lt;p&gt;If you run one of these services and think a number is wrong, &lt;a href="https://cibench.com/submit/" rel="noopener noreferrer"&gt;tell us&lt;/a&gt; and we'll fix it, or submit your own configuration for the next result set. The data is CC BY 4.0.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>ci</category>
      <category>devops</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>CI Bench v1: an open benchmark of GitHub Actions runners</title>
      <dc:creator>Joseph Vitko</dc:creator>
      <pubDate>Sat, 24 Oct 2026 02:10:13 +0000</pubDate>
      <link>https://dev.to/josephvitko/ci-bench-v1-an-open-benchmark-of-github-actions-runners-245a</link>
      <guid>https://dev.to/josephvitko/ci-bench-v1-an-open-benchmark-of-github-actions-runners-245a</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fws6qzv4ylc92o5yhi7zf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fws6qzv4ylc92o5yhi7zf.png" alt="Scatter plot of CI Bench v1 results" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CI job times and costs are an increasingly large bottleneck for coding agents. Today we're releasing &lt;a href="https://cibench.com/" rel="noopener noreferrer"&gt;CI Bench v1&lt;/a&gt;, our open benchmark of Github Actions runners on 12 CI workloads for popular open-source projects.&lt;/p&gt;

&lt;p&gt;The method, workflows, analysis and every raw job record are public in our &lt;a href="https://github.com/vitko-inc/runner-benchmark" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;, measured October 7 to 11, 2026. &lt;/p&gt;

&lt;p&gt;Among the nine configurations measured, &lt;a href="https://runners.vitko.inc" rel="noopener noreferrer"&gt;Vitko Runners&lt;/a&gt; with warm starts and test parallelization was the fastest and had the lowest managed cost per job; RunsOn on spot instances costs less per job at very high volume, while taking about twice as long.&lt;/p&gt;

&lt;p&gt;Full disclosure: we sell &lt;a href="https://vitko.inc/news/vitko-runners-private-beta" rel="noopener noreferrer"&gt;Vitko Runners&lt;/a&gt;, now in private beta.&lt;/p&gt;

</description>
      <category>ci</category>
      <category>cicd</category>
      <category>githubactions</category>
    </item>
  </channel>
</rss>
