Skip to content

Runners for GitHub Actions

GitHub Actions on fresh AMD machines. Billed by the second.

Change one runs-on line and each job gets its own disposable EC2 VM. Your workflows, logs and checks stay in GitHub. Queue time and startup are free.

Public signup · prepaid credit · no subscription

From · 2 vCPU · 8 GiB
AMD EPYC · Ubuntu 24.04 x86-64
Billing increment1 secondNo rounding up to the minute
Isolation1 job / VMTerminated with its disk afterwards
Queue & startup$0Billing starts when your job runs

Migration

Three steps.
One line of YAML.

GitHub still schedules your workflow and shows the results. BerryBox supplies the machine: Ubuntu 24.04 with the official Actions runner, Docker, Buildx and Compose.

  1. 1

    Connect GitHub

    Sign in, install the GitHub App and choose the private repositories it can use.

  2. 2

    Add credit and pick a size

    Top up from $20 through Stripe, then enable a runner size for your team.

  3. 3

    Change runs-on

    Point a job at a BerryBox label. Jobs on other labels stay where they are.

.github/workflows/ci.yml
name: cion: [push, pull_request] jobs:  build:    runs-on: berrybox-2vcpu-ubuntu-2404was ubuntu-latest    steps:      - uses: actions/checkout@v7      - uses: actions/setup-node@v7        with:          node-version: 24          cache: npm      - run: npm ci      - run: npm test      - run: docker build -t app .

Everything else in the job keeps working as it does today:

  • actions/checkout
  • setup-* caches
  • matrix builds
  • service containers
  • docker build
  • secrets
  • logs & checks

Not sure which jobs fit? Paste a workflow into the dashboard’s migration preview, or run berrybox migrate to see the patch first. Migration guide

Pricing

Price your builds
before you switch.

One list price per size, whether the VM runs on Spot or on-demand capacity. Pay from prepaid credit; there’s no subscription or seat fee.

Security & operations

Every job runs alone.
Then its VM is deleted.

BerryBox is built by Strawberry Labs. Questions about isolation, billing or a stuck job reach the people who run the fleet.

Email the team
One job, one VM
Each job gets a new EC2 instance. When it finishes, the instance is terminated and its encrypted root disk is deleted. Nothing carries over to the next job.
No keys on the machine
Runner VMs accept no inbound connections and have no cloud role attached. They receive only a one-time runner config — never our AWS credentials or the GitHub App key.
GitHub stays in charge
The official GitHub Actions runner executes your steps. Secrets, logs, checks and permissions work as they do today.
Spending you control
Credit is prepaid. Each job reserves its maximum runtime up front and releases what it didn’t use. Team spending limits pause new jobs.
Capacity without surprise pricing
We try Spot capacity first and fall back to on-demand. Your price per minute is the same either way.

Good to know before you switch

  • Cold starts take tens of seconds; idle capacity scales to zero
  • Private repositories in GitHub organizations
  • Pushes, schedules, manual runs, same-repo pull requests
  • Linux x86-64, Ubuntu 24.04 only
  • No fork pull requests or public repositories yet
  • No Windows, macOS, ARM or GPU runners yet

FAQ

Common questions

More detail on runners, caching and billing is in the docs.

Can I move one job at a time?

Yes. runs-on is set per job, so you can move a single job, compare it with your current runner, and keep the rest of the workflow where it is. Switching back is the same one-line change.

What exactly do you charge for?

The time a BerryBox job actually runs, measured by the second. Queue time, VM startup, skipped jobs and provider failures are not billed.

What happens when my credit runs low?

Before a job starts, BerryBox reserves enough credit for its maximum runtime. If the balance can’t cover that, new jobs wait instead of starting, and the dashboard shows why. Unused reservations are released when a job settles.

Are starts instant?

No. Idle capacity scales to zero, so a cold start takes tens of seconds and can take longer when AWS capacity is scarce. That wait is free, and the Jobs page shows it for every run.

Does caching work?

actions/cache and the cache options in setup-* actions use GitHub’s Actions cache, as they do on GitHub-hosted runners. Each VM starts with a clean disk, so local Docker layers aren’t kept between jobs.