<?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: Sengi Runners</title>
    <description>The latest articles on DEV Community by Sengi Runners (@sengi_runners).</description>
    <link>https://dev.to/sengi_runners</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%2F4180232%2F7b1ab9a0-45b4-4231-a291-3b6239e4c058.png</url>
      <title>DEV Community: Sengi Runners</title>
      <link>https://dev.to/sengi_runners</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sengi_runners"/>
    <language>en</language>
    <item>
      <title>The cheapest GitHub Actions runners in 2026: what 100,000 minutes actually cost</title>
      <dc:creator>Sengi Runners</dc:creator>
      <pubDate>Sat, 07 Nov 2026 19:48:46 +0000</pubDate>
      <link>https://dev.to/sengi_runners/github-actions-runner-prices-in-2026-what-2-4-and-8-vcpu-cost-on-every-provider-2l42</link>
      <guid>https://dev.to/sengi_runners/github-actions-runner-prices-in-2026-what-2-4-and-8-vcpu-cost-on-every-provider-2l42</guid>
      <description>&lt;p&gt;We run hosted GitHub Actions runners, so "what does a CI minute really cost?" is a question we answer for customers every week. Most teams asking it have just had a surprise bill: an AI agent opening pull requests all day, a test matrix that quietly doubled, or a macOS job nobody noticed.&lt;/p&gt;

&lt;p&gt;So we priced every option the same way, from each provider's own pricing page, and put them side by side.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Actions runner pricing, side by side
&lt;/h2&gt;

&lt;p&gt;To compare like with like: &lt;strong&gt;100,000 minutes a month of Linux jobs on 4 vCPUs&lt;/strong&gt;, roughly 110 ten-minute jobs a day. Prices read on November 7, 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runner&lt;/th&gt;
&lt;th&gt;Where jobs run&lt;/th&gt;
&lt;th&gt;Cost per minute (4 vCPU Linux)&lt;/th&gt;
&lt;th&gt;100,000 minutes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sengi Basic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sengi's managed runners&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.002&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$200, with 3,000 free minutes a month&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sengi Premium&lt;/td&gt;
&lt;td&gt;Sengi's managed runners, faster class&lt;/td&gt;
&lt;td&gt;$0.006&lt;/td&gt;
&lt;td&gt;$600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blacksmith&lt;/td&gt;
&lt;td&gt;Blacksmith's hardware&lt;/td&gt;
&lt;td&gt;$0.008&lt;/td&gt;
&lt;td&gt;$800, with 3,000 free minutes a month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WarpBuild&lt;/td&gt;
&lt;td&gt;WarpBuild's cloud&lt;/td&gt;
&lt;td&gt;$0.008&lt;/td&gt;
&lt;td&gt;$800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Namespace&lt;/td&gt;
&lt;td&gt;Namespace's hardware&lt;/td&gt;
&lt;td&gt;$0.012 pay as you go ($0.008 on the $100/month Team plan)&lt;/td&gt;
&lt;td&gt;$800 to $1,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub larger runner&lt;/td&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;$0.012&lt;/td&gt;
&lt;td&gt;$1,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Depot&lt;/td&gt;
&lt;td&gt;Depot's cloud&lt;/td&gt;
&lt;td&gt;$0.012&lt;/td&gt;
&lt;td&gt;$1,200, plus a plan from $20 a month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RunsOn&lt;/td&gt;
&lt;td&gt;Your AWS account&lt;/td&gt;
&lt;td&gt;~$0.0013 on spot&lt;/td&gt;
&lt;td&gt;~$130 plus a €300+ yearly licence, plus running it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions Runner Controller&lt;/td&gt;
&lt;td&gt;Your Kubernetes cluster&lt;/td&gt;
&lt;td&gt;Your cluster's cost&lt;/td&gt;
&lt;td&gt;Your cluster's share, plus running it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern: managed runners cost $0.002 to $0.012 a minute, and Sengi Basic is the cheapest one you don't have to operate. At this volume it's &lt;strong&gt;$1,000 a month less than GitHub's larger runner&lt;/strong&gt; for the same jobs.&lt;/p&gt;

&lt;p&gt;At 2 vCPU the gap is the same shape: Sengi Basic is $0.001 a minute against GitHub's $0.006, so a dollar buys six times the minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually drives a GitHub Actions bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;macOS minutes cost ten times Linux ones.&lt;/strong&gt; Past your included minutes, GitHub charges $0.062 a minute for macOS against $0.006 for Linux. One lint job on &lt;code&gt;macos-latest&lt;/code&gt; that should have been on Linux can cost more than the rest of the pipeline. Check the usage report for jobs that don't need a Mac.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every matrix leg is billed separately, and each job rounds up.&lt;/strong&gt; A 12-leg matrix where each leg runs 20 seconds bills 12 minutes, not 4. Coding agents make this worse: every push from an agent re-runs the whole matrix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most minutes don't need to be fast.&lt;/strong&gt; Lint, unit tests, type checks and nightly jobs are the bulk of CI time, and nobody is watching them finish. Those belong on the cheapest runner you can find. The few jobs people actually wait on, like the Docker image or the integration suite blocking a merge, are where a faster class pays for itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-minute price is only half the sum.&lt;/strong&gt; If a job runs twice as fast, it uses half the minutes. That's why we sell two classes: Basic for price, and Premium for speed. On a PostHog Docker build at 4 vCPU, Sengi Premium finished in 7m34s; GitHub's runner took 14m36s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosting is cheap per minute and expensive per engineer.&lt;/strong&gt; Running your own fleet on spot instances gets the raw minute under $0.002, but you own the images, the autoscaling, spot interruptions, disk and network costs, and the pager. For most teams that time costs more than the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which runner is cheapest for you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Most teams: Sengi Basic.&lt;/strong&gt; The lowest per-minute price of any managed runner in the table, $0.001 at 2 vCPU, 3,000 free minutes a month, and nothing to run yourself. Put Premium on the few jobs where speed matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want jobs inside your own cloud account and have someone to run it:&lt;/strong&gt; RunsOn on AWS, or Actions Runner Controller if you already run Kubernetes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS jobs:&lt;/strong&gt; keep those on GitHub or a provider with Mac runners, and move the Linux jobs, which are usually most of the minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever you pick, switching is one line per job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# runs-on: ubuntu-latest                 # GitHub&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-basic-2-ubuntu-2404&lt;/span&gt;       &lt;span class="c1"&gt;# Sengi Basic, $0.001/min&lt;/span&gt;

  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-premium-4-ubuntu-2404&lt;/span&gt;     &lt;span class="c1"&gt;# Sengi Premium, for the slow Docker build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your workflows, secrets and logs stay in GitHub. You can start without a card, and the 3,000 free minutes cover a real trial on one workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and more detail
&lt;/h2&gt;

&lt;p&gt;The full price table, re-checked every month with a source for every number, is on our site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sengi.run/blog/cheapest-github-actions-runners" rel="noopener noreferrer"&gt;The 2026 GitHub Actions runner price table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sengi.run/blog/sengi-basic-vs-premium" rel="noopener noreferrer"&gt;Sengi Basic vs Premium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sengi.run/github-actions-cost-calculator" rel="noopener noreferrer"&gt;GitHub Actions cost calculator&lt;/a&gt; for your own minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a price here is out of date, tell us in the comments and we'll fix it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this post is by the team behind Sengi.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devops</category>
      <category>cicd</category>
      <category>github</category>
    </item>
    <item>
      <title>Cheap runners for most CI jobs, fast runners for the few that matter</title>
      <dc:creator>Sengi Runners</dc:creator>
      <pubDate>Sat, 07 Nov 2026 19:47:16 +0000</pubDate>
      <link>https://dev.to/sengi_runners/cheap-runners-for-most-ci-jobs-fast-runners-for-the-few-that-matter-1c8g</link>
      <guid>https://dev.to/sengi_runners/cheap-runners-for-most-ci-jobs-fast-runners-for-the-few-that-matter-1c8g</guid>
      <description>&lt;p&gt;We build Sengi, a hosted runner service for GitHub Actions. Today we launched Sengi Basic, at $1 per 1,000 runner minutes. This post is about the idea behind it: pick the runner per job, not per company.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most CI minutes aren't urgent
&lt;/h2&gt;

&lt;p&gt;Look at a typical workflow run. Lint, unit tests, type checks, dependency audits, nightly jobs. Nobody is waiting on most of them. Then there are one or two jobs everyone is waiting on: the Docker image, the release build, the slow integration suite blocking a merge.&lt;/p&gt;

&lt;p&gt;Paying the same per-minute rate for both makes no sense. So Sengi has two classes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Basic&lt;/th&gt;
&lt;th&gt;Premium&lt;/th&gt;
&lt;th&gt;GitHub-hosted Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 vCPU&lt;/td&gt;
&lt;td&gt;$0.001/min&lt;/td&gt;
&lt;td&gt;$0.003/min&lt;/td&gt;
&lt;td&gt;$0.006/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 vCPU&lt;/td&gt;
&lt;td&gt;$0.002/min&lt;/td&gt;
&lt;td&gt;$0.006/min&lt;/td&gt;
&lt;td&gt;$0.012/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 vCPU&lt;/td&gt;
&lt;td&gt;$0.004/min&lt;/td&gt;
&lt;td&gt;$0.012/min&lt;/td&gt;
&lt;td&gt;$0.022/min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Basic gives you six times the minutes per dollar of GitHub's own runners at 2 and 4 vCPU, and 5.5 times at 8 vCPU. 10,000 2-vCPU minutes cost $10 on Basic and $60 on GitHub at list price.&lt;/p&gt;

&lt;p&gt;Premium is the fast class. On a PostHog Docker build at 4 vCPU it finished in 7m34s; GitHub's runner took 14m36s.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixing them in one workflow
&lt;/h2&gt;

&lt;p&gt;The class is just the label:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;lint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-basic-2-ubuntu-2404&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci &amp;amp;&amp;amp; npm run lint&lt;/span&gt;

  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-basic-4-ubuntu-2404&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci &amp;amp;&amp;amp; npm test&lt;/span&gt;

  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-premium-8-ubuntu-2404&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker build -t app .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Labels: &lt;code&gt;sengi-basic-{2,4,8}-ubuntu-2404&lt;/code&gt; and &lt;code&gt;sengi-premium-{2,4,8}-ubuntu-2404&lt;/code&gt;. Workflows, secrets and logs stay in GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to decide
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Move every job to Basic.&lt;/li&gt;
&lt;li&gt;Find the jobs where someone is waiting on the result.&lt;/li&gt;
&lt;li&gt;Run those on Premium and compare time and cost against Basic.&lt;/li&gt;
&lt;li&gt;Keep whichever wins for that job.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Free to start
&lt;/h2&gt;

&lt;p&gt;Every account gets 3,000 free Basic minutes a month. A 4-vCPU minute counts as two and an 8-vCPU minute as four.&lt;/p&gt;

&lt;p&gt;More on Basic vs Premium: &lt;a href="https://sengi.run/blog/sengi-basic-vs-premium" rel="noopener noreferrer"&gt;https://sengi.run/blog/sengi-basic-vs-premium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>cicd</category>
      <category>showdev</category>
    </item>
    <item>
      <title>A month of GitHub Actions, worked by hand: $54 on GitHub, $11 on 5 GHz bare metal</title>
      <dc:creator>Sengi Runners</dc:creator>
      <pubDate>Fri, 23 Oct 2026 18:47:36 +0000</pubDate>
      <link>https://dev.to/sengi_runners/a-month-of-github-actions-worked-by-hand-54-on-github-11-on-5-ghz-bare-metal-3ool</link>
      <guid>https://dev.to/sengi_runners/a-month-of-github-actions-worked-by-hand-54-on-github-11-on-5-ghz-bare-metal-3ool</guid>
      <description>&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://sengi.run/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-2026-10" rel="noopener noreferrer"&gt;Sengi&lt;/a&gt;, a hosted runner service for GitHub Actions, and the Sengi rows below are ours. GitHub's figures are its published per-minute rates and included minutes, the ones in effect since January 1, 2026. Every line of arithmetic is on the page.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A GitHub Actions bill has two numbers in it: &lt;strong&gt;the minutes&lt;/strong&gt; and &lt;strong&gt;the price per minute&lt;/strong&gt;. Most advice goes after the minutes: cache more, skip jobs, split suites. All good. But both numbers are also set by the machine your job runs on, and that's the lever this post is about.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to work out your bill by hand
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Take last month's job-minutes.&lt;/li&gt;
&lt;li&gt;On standard runners in private repositories, subtract your plan's included minutes: 2,000 on GitHub Free, 3,000 on Pro and Team, 50,000 on Enterprise Cloud.&lt;/li&gt;
&lt;li&gt;Multiply what's left by the runner's rate: $0.006 a minute for Linux 2-core, $0.012 for 4-core, $0.022 for 8-core.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Larger runners skip step 2. Included minutes never apply to them, so GitHub bills a 4- or 8-core job from its first minute. Each job is rounded up to a whole minute before the rate applies. Storage is a separate meter; leave it out, because it doesn't move when compute does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lever one: the price per minute
&lt;/h2&gt;

&lt;p&gt;Sengi's matched sizes are $0.003, $0.006 and $0.012 a minute for 2, 4 and 8 vCPU, against GitHub's $0.006, $0.012 and $0.022. That's up to half the price for the same vCPU and memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lever two: the minutes themselves
&lt;/h2&gt;

&lt;p&gt;A hosted runner is a slice of a cloud server CPU on network storage. Sengi runs every job in a fresh VM on an AMD Ryzen 9 7950X3D: a desktop CPU boosting past 5 GHz, with DDR5 and local NVMe, on bare metal. Against GitHub's &lt;code&gt;ubuntu-latest&lt;/code&gt; at the same size, that gets &lt;strong&gt;up to 3×&lt;/strong&gt; the multi-core CPU, &lt;strong&gt;1.65×&lt;/strong&gt; the single-core and &lt;strong&gt;15×&lt;/strong&gt; the random-read disk speed. It's also the same CPU model on every job.&lt;/p&gt;

&lt;p&gt;That shows up as fewer minutes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Build&lt;/th&gt;
&lt;th&gt;GitHub-hosted&lt;/th&gt;
&lt;th&gt;Sengi&lt;/th&gt;
&lt;th&gt;Faster&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Production Docker image (PostHog), 4 vCPU&lt;/td&gt;
&lt;td&gt;14m36s&lt;/td&gt;
&lt;td&gt;7m34s&lt;/td&gt;
&lt;td&gt;1.9×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust + TypeScript + Docker together, 4 vCPU&lt;/td&gt;
&lt;td&gt;20m43s&lt;/td&gt;
&lt;td&gt;11m28s&lt;/td&gt;
&lt;td&gt;1.8×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node + Docker build (real CI), 2 vCPU&lt;/td&gt;
&lt;td&gt;539 s&lt;/td&gt;
&lt;td&gt;299 s&lt;/td&gt;
&lt;td&gt;1.8×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Multiply the two levers together and you get the price per build. That Docker image costs &lt;strong&gt;$0.175&lt;/strong&gt; on GitHub (14m36s at $0.012) and &lt;strong&gt;$0.045&lt;/strong&gt; on Sengi (7m34s at $0.006): &lt;strong&gt;74% less per build.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three months, worked by hand
&lt;/h2&gt;

&lt;p&gt;Typical CI throughout: 1.8× faster on 2 vCPU and 1.81× on 4 vCPU, the measured speed-ups above. Sengi includes 3,000 free minutes a month, counted in 2 vCPU minutes, so they cover 1,500 minutes on 4 vCPU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Under the quota: GitHub Free, 1,500 private minutes&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line&lt;/th&gt;
&lt;th&gt;Minutes&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub: inside the 2,000 included&lt;/td&gt;
&lt;td&gt;1,500&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sengi, 2 vCPU: 1,500 ÷ 1.8, inside the free 3,000&lt;/td&gt;
&lt;td&gt;834&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Below the quota, neither side bills compute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over the quota: GitHub Team, 12,000 private Linux 2-core minutes&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line&lt;/th&gt;
&lt;th&gt;Minutes&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub: 12,000 − 3,000 included&lt;/td&gt;
&lt;td&gt;9,000&lt;/td&gt;
&lt;td&gt;$0.006&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$54.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sengi, 2 vCPU: 12,000 ÷ 1.8 = 6,667, − 3,000 free&lt;/td&gt;
&lt;td&gt;3,667&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$11.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You save&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;$43.00 (80%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;A larger runner: GitHub Team, 6,000 minutes on Linux 4-core&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line&lt;/th&gt;
&lt;th&gt;Minutes&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub: no included minutes on larger runners&lt;/td&gt;
&lt;td&gt;6,000&lt;/td&gt;
&lt;td&gt;$0.012&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$72.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sengi, 4 vCPU: 6,000 ÷ 1.81 = 3,315, − 1,500 free&lt;/td&gt;
&lt;td&gt;1,815&lt;/td&gt;
&lt;td&gt;$0.006&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$10.89&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You save&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;$61.11 (85%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The larger runner is where the gap is widest. GitHub bills every one of those minutes at $0.012, while Sengi finishes the same work in fewer minutes at half the rate.&lt;/p&gt;

&lt;p&gt;To run your own numbers, the &lt;a href="https://sengi.run/github-actions-cost-calculator?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-2026-10" rel="noopener noreferrer"&gt;cost calculator&lt;/a&gt; takes your plan, minutes, runner size and job type (typical CI, Docker, Rust or TypeScript). It runs in your browser with no email gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caches come along
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;actions/cache&lt;/code&gt;, the &lt;code&gt;setup-*&lt;/code&gt; actions' caches and Docker's &lt;code&gt;type=gha&lt;/code&gt; layer cache all work unchanged on Sengi, served from Sengi's own cache and included in the price. With a warm &lt;code&gt;type=gha&lt;/code&gt; cache, one measured Docker build step went from 68 s to 36 s.&lt;/p&gt;

&lt;h2&gt;
  
  
  Switching is one line
&lt;/h2&gt;

&lt;p&gt;Install the Sengi GitHub App, connect the repository, then:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jobs:
  test:
-   runs-on: ubuntu-latest
+   runs-on: sengi-standard-2-ubuntu-2404
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;sengi-standard-4-ubuntu-2404&lt;/code&gt; and &lt;code&gt;sengi-standard-8-ubuntu-2404&lt;/code&gt; give you 4 and 8 vCPU. Steps, secrets, triggers and logs stay in GitHub. 2 vCPU runners are pre-booted, so jobs start in about 2 seconds, and boot and teardown are never billed. Runners are Ubuntu 24.04 on x64. If you'd rather not touch the YAML, there's &lt;a href="https://sengi.run/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-2026-10#agent" rel="noopener noreferrer"&gt;a prompt for your coding agent&lt;/a&gt; that finds every eligible job and opens the pull request for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3,000 free minutes every month, no card:&lt;/strong&gt; point your slowest job at &lt;a href="https://sengi.run/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-2026-10" rel="noopener noreferrer"&gt;sengi.run&lt;/a&gt; and compare its run time with last week's.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devops</category>
      <category>cicd</category>
      <category>pricing</category>
    </item>
    <item>
      <title>Check GitHub Actions runner compatibility before switching providers</title>
      <dc:creator>Sengi Runners</dc:creator>
      <pubDate>Mon, 12 Oct 2026 19:34:00 +0000</pubDate>
      <link>https://dev.to/sengi_runners/check-github-actions-runner-compatibility-before-switching-providers-3038</link>
      <guid>https://dev.to/sengi_runners/check-github-actions-runner-compatibility-before-switching-providers-3038</guid>
      <description>&lt;p&gt;Disclosure: This guide is from the Sengi team and was written with AI. Sengi is the managed runner service used in the example.&lt;/p&gt;

&lt;p&gt;A runner change can be a small pull request, but a small diff does not mean every job will behave identically. The machine still needs the right operating system, tool versions and container environment.&lt;/p&gt;

&lt;p&gt;Before moving a Linux job, check these assumptions. The goal is a first successful result you can compare with your existing run, not a repository-wide rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check what the label actually selects
&lt;/h2&gt;

&lt;p&gt;GitHub uses &lt;code&gt;runs-on&lt;/code&gt; to choose a machine. An array is an intersection: the runner must match every listed label. Adding a new provider's label to an old array is not the same as replacing the target. &lt;a href="https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job" rel="noopener noreferrer"&gt;GitHub explains label matching here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For Sengi, a supported target is a complete label:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-standard-2-ubuntu-2404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the provider's documented form rather than inventing combinations. If the selection comes from a matrix, an expression or a reusable workflow, inspect where that value is defined before changing it.&lt;/p&gt;

&lt;p&gt;Sengi currently offers Ubuntu 24.04 on x64. Leave Windows, macOS, arm64 and jobs requiring another operating-system image on their existing runners. A job on &lt;code&gt;ubuntu-latest&lt;/code&gt; also needs an image check: switching to a fixed Ubuntu 24.04 target may change an assumption about what “latest” supplies. &lt;a href="https://sengi.run/agent" rel="noopener noreferrer"&gt;Sengi's migration instructions&lt;/a&gt; identify the supported targets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make tool dependencies explicit
&lt;/h2&gt;

&lt;p&gt;A working build can quietly depend on software that happens to be installed on its current runner. Look for commands such as &lt;code&gt;node&lt;/code&gt;, &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;ruby&lt;/code&gt;, &lt;code&gt;java&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt; and native compilers. For each important dependency, identify how the workflow selects its version.&lt;/p&gt;

&lt;p&gt;Prefer an existing setup step or your project's documented installation procedure over relying on whichever executable appears first in the machine's path. Keep the dependency lockfile and install command unchanged for the first comparison. Otherwise, a runner migration and a dependency upgrade become one experiment that is harder to diagnose.&lt;/p&gt;

&lt;p&gt;If you need a diagnostic step, print only the relevant tool versions. Do not dump the whole environment: CI logs can contain sensitive information, and a version check does not require exposing secrets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat containers as a separate compatibility check
&lt;/h2&gt;

&lt;p&gt;A job-level &lt;code&gt;container:&lt;/code&gt; setting changes where script steps execute. Check the image, registry access and shell assumptions as well as the host runner. GitHub's container documentation notes that the default shell inside a job container is &lt;code&gt;sh&lt;/code&gt;, not &lt;code&gt;bash&lt;/code&gt;; an explicit shell can override it. It also warns that Docker Hub's normal pull limits can affect self-hosted runners. &lt;a href="https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container" rel="noopener noreferrer"&gt;Read the container behavior&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do not remove registry authentication or alter service-container networking merely to make a migration look like a one-line change. Keep those settings intact, then inspect the first result on the chosen runner. A failure while pulling an image and a failure in your test suite need different fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate routing trouble from a failed step
&lt;/h2&gt;

&lt;p&gt;If the job never starts, inspect the exact label, repository connection and available capacity. If it starts and fails, inspect the first failing step and compare it with the previous run. Changing five unrelated settings at once usually destroys the useful comparison.&lt;/p&gt;

&lt;p&gt;For Sengi, connect the repository to a project through Connect GitHub before merging its runner-label change. Installing the GitHub App alone is not the complete connection. The current &lt;a href="https://dev.to/sengi_runners/move-a-linux-github-actions-job-to-sengi-without-replacing-your-workflow-3375"&gt;migration guide&lt;/a&gt; walks through that sequence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the first trial reversible
&lt;/h2&gt;

&lt;p&gt;Choose one representative build or test job. Review the pull request, let its normal trigger run, then compare the result, artifacts and required checks. Only widen the change once that job behaves as expected.&lt;/p&gt;

&lt;p&gt;Keep the original label in the pull-request diff so rollback is a simple revert. A green first run is useful evidence; it is not proof that every job in a large matrix has the same requirements.&lt;/p&gt;

&lt;p&gt;That is the practical benefit of keeping GitHub Actions while changing execution services: you can test the machine choice without replacing the workflow system. Start small, preserve the comparison, and expand based on actual results.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devops</category>
    </item>
    <item>
      <title>Move a Linux GitHub Actions job to Sengi without replacing your workflow</title>
      <dc:creator>Sengi Runners</dc:creator>
      <pubDate>Mon, 12 Oct 2026 19:05:10 +0000</pubDate>
      <link>https://dev.to/sengi_runners/move-a-linux-github-actions-job-to-sengi-without-replacing-your-workflow-3375</link>
      <guid>https://dev.to/sengi_runners/move-a-linux-github-actions-job-to-sengi-without-replacing-your-workflow-3375</guid>
      <description>&lt;p&gt;Disclosure: I work on Sengi, the runner service used in this walkthrough.&lt;/p&gt;

&lt;p&gt;Changing your CI provider can sound like a rewrite. With GitHub Actions, there is a smaller option: keep Actions for the workflow and use another service for the machine that runs a job.&lt;/p&gt;

&lt;p&gt;Sengi follows that model. You keep reviewing results in GitHub. For a supported job, the workflow change is its runner label. Here is how to try it on one job, see the result, and undo it if it is not a fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick a job that fits
&lt;/h2&gt;

&lt;p&gt;Start with a straightforward build or test job using Ubuntu 24.04 on x64. Sengi currently offers that platform, not Windows, macOS, arm64 or older Ubuntu images.&lt;/p&gt;

&lt;p&gt;Read the actual job before changing it. A literal runner label is straightforward. A matrix expression, a reusable workflow or a runner group needs closer inspection because the machine selection may happen somewhere else. Keep unrelated jobs unchanged for the first trial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect the repository first
&lt;/h2&gt;

&lt;p&gt;Create an account at &lt;a href="https://app.sengi.run" rel="noopener noreferrer"&gt;Sengi&lt;/a&gt;, choose Connect GitHub, and select the repository you want to use. This grants the GitHub access and connects the repository to a Sengi project.&lt;/p&gt;

&lt;p&gt;Installing the GitHub App directly is not the same as completing that connection. Confirm the repository appears in your Sengi project before merging a runner change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Change the runner label
&lt;/h2&gt;

&lt;p&gt;For a 2-vCPU runner with 8 GB of RAM, change this line in the chosen job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-24.04&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sengi-standard-2-ubuntu-2404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same target can be used for compatible Linux x64 jobs currently on ubuntu-latest. It fixes the image at Ubuntu 24.04, so check any assumptions your job makes about the latest image.&lt;/p&gt;

&lt;p&gt;Leave steps, permissions, secrets and triggers unchanged. Open a pull request and review the diff before merging. If your repository uses actionlint, declare the custom label in its configuration so the lint check recognizes it.&lt;/p&gt;

&lt;p&gt;Prefer a coding agent? The &lt;a href="https://sengi.run/agent" rel="noopener noreferrer"&gt;Sengi migration prompt&lt;/a&gt; inventories workflow files, reports jobs it skips and asks for review before opening a pull request. The repository connection still needs your consent, and you decide what to merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect the first result
&lt;/h2&gt;

&lt;p&gt;Use the next workflow run to check whether the selected job starts, completes and produces the expected outputs. Review the GitHub logs and required checks, not just the runner label in the file.&lt;/p&gt;

&lt;p&gt;A queue is not automatically a broken connection. Free accounts share a 12-vCPU concurrency limit. Six 2-vCPU jobs can run together; additional jobs wait for capacity to become available. Once the monthly free allowance is exhausted, new free jobs cannot start, but jobs already running may finish.&lt;/p&gt;

&lt;p&gt;If a step behaves differently, inspect that step's dependencies and image assumptions before migrating the rest of the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the allowance
&lt;/h2&gt;

&lt;p&gt;The 2-vCPU size costs $0.003 per execution minute after the applicable free allowance. Each job rounds up separately to a whole minute, and boot and teardown are not billed.&lt;/p&gt;

&lt;p&gt;One account gets 3,000 standard-2-equivalent free minutes each month, without a card to start. The 4-vCPU and 8-vCPU sizes use that same pool at two and four times the rate. These are not three separate allowances. Prices checked October 11, 2026; see &lt;a href="https://sengi.run/#pricing" rel="noopener noreferrer"&gt;current pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the rollback small
&lt;/h2&gt;

&lt;p&gt;To return that job to GitHub-hosted execution, revert the runner-label change. Test one representative job first, then decide whether to move others based on their actual behavior, time and cost.&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>cicd</category>
    </item>
  </channel>
</rss>
