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.

Most CI minutes aren't urgent

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.

Paying the same per-minute rate for both makes no sense. So Sengi has two classes:

Size Basic Premium GitHub-hosted Linux
2 vCPU $0.001/min $0.003/min $0.006/min
4 vCPU $0.002/min $0.006/min $0.012/min
8 vCPU $0.004/min $0.012/min $0.022/min

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.

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

Mixing them in one workflow

The class is just the label:

jobs: lint: runs-on: sengi-basic-2-ubuntu-2404 steps: - uses: actions/checkout@v4 - run: npm ci && npm run lint test: runs-on: sengi-basic-4-ubuntu-2404 steps: - uses: actions/checkout@v4 - run: npm ci && npm test image: needs: test runs-on: sengi-premium-8-ubuntu-2404 steps: - uses: actions/checkout@v4 - run: docker build -t app . 

Labels: sengi-basic-{2,4,8}-ubuntu-2404 and sengi-premium-{2,4,8}-ubuntu-2404. Workflows, secrets and logs stay in GitHub Actions.

How to decide

  1. Move every job to Basic.
  2. Find the jobs where someone is waiting on the result.
  3. Run those on Premium and compare time and cost against Basic.
  4. Keep whichever wins for that job.

Free to start

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

More on Basic vs Premium: https://sengi.run/blog/sengi-basic-vs-premium