GitHub Actions vs Buildkite
GitHub Actions is the CI built into GitHub: workflows in your repository run as jobs on fresh VMs that end within 6 hours. Buildkite is a separate CI platform whose hosted agents run each pipeline job for up to 8 hours on Linux in a VM that is destroyed after, with cache volumes to carry chosen paths forward.
The companies and products
GitHub Actions
GitHub Actions is GitHub's CI/CD service: workflows in your repository run as jobs on runners that GitHub hosts or that you host yourself.
GitHub Actions is a CI service, not a sandbox API. Each job on a GitHub-hosted runner gets a new VM, Linux and Windows on Azure and macOS on GitHub's own Mac fleet, with passwordless sudo, and the VM is gone when the job ends. It is built for building, testing and deploying the code in a repository, and GitHub's own Copilot cloud agent and the Claude and Codex agents on GitHub also run on Actions runners.
- Job length
- Each job can run for up to 6 hours
- Self-hosted runners
- Open-source runner under MIT; usage on self-hosted runners is free
Buildkite
Buildkite is a CI and software delivery platform, and hosted agents are the build machines it runs for you.
You write Buildkite pipelines, and each job runs on a fresh virtual machine that Buildkite starts for that job and destroys when it ends; only cache volumes carry files to the next job. Hosted agents come in Linux and macOS on Apple M4, with Windows in private preview, and you can also run Buildkite's agent on your own machines. It is a CI service, not an agent sandbox, so this page compares the part where they overlap: a machine where an agent or a job does its work.
- Where it runs
- Hosted agents run only in US East Coast data centers
- Compliance
- Maintains a SOC 2 Type II report
Which use cases each one fits
For each use case, Battleships prices every sandbox provider on the same workload and sorts them from the cheapest monthly bill up. “100th cheapest of 377” means 99 of the other 376 providers run that workload, with every feature it needs, for less. “With limits” means the provider runs it but misses something, so it is listed after every full match. Open a use case for its whole ranking and what each provider misses.
| Use case and its workload | GitHub Actions: price rank | Buildkite: price rank | boat: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month A software factory needs agents that keep their checkout and Docker cache between tasks; GitHub Actions starts every job clean and Buildkite keeps only cache volume paths, while boat keeps the whole disk. | 298th of 367, with limits $5,853 a month | 43rd of 367, with limits $11,648 a month | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB An assistant that lives on its machine all month fits neither CI service, since jobs stop after 6 hours on GitHub Actions and 8 on Buildkite; boat has no session cap on paid plans. | 333rd of 366, with limits $10,692 a month | 351st of 366, with limits $17,564 a month | 5th cheapest of 366 $657 a month |
| Code interpreter bursts 100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month | 294th of 345, with limits $721 a month | 315th of 345, with limits $1,587 a month | 186th of 345, with limits $2,000 a month |
| Sandboxes for your users 300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month Neither takes inbound traffic for your users, and GitHub's terms rule out offering Actions as a service; boat gives each sandbox HTTPS on up to 50 ports and raw TCP. | 308th of 361, with limits $2,892 a month | 326th of 361, with limits $4,984 a month | Cheapest of 361 $209 a month |
| RL rollouts 1,000 at once · 2 vCPU / 4 GB · 1,000,000 sessions of 3 min a month | 304th of 360, with limits $14,721 a month | 316th of 360, with limits $23,881 a month | 34th of 360, with limits $2,000 a month |
| Agent evals 250 at once · 4 vCPU / 8 GB · 15,000 sessions of 20 min a month | 303rd of 364, with limits $1,962 a month | 324th of 364, with limits $3,884 a month | 10th cheapest of 364 $200 a month |
| CI runners 40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month Both are built for CI; GitHub Actions fits a GitHub repository with no extra service, Buildkite brings its own pipelines and cache volumes, and boat runs CI jobs on full VMs that keep a warm disk. | 100th cheapest of 377 $1,012 a month | 203rd of 377, with limits $2,318 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB A dev box needs SSH, open ports and a disk that stays; GitHub runners have none of these and Buildkite only offers a terminal into a running job. | 279th of 368, with limits $159 a month | 354th of 368, with limits $715 a month | 18th cheapest of 368 $26 a month |
| Computer-use agents 50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month GitHub runners are headless and Buildkite's desktop access is for a person debugging a macOS job; boat streams a 60fps Linux desktop with computer use built in. | 292nd of 369, with limits $1,768 a month | 70th of 369, with limits $3,500 a month | 6th cheapest of 369 $200 a month |
| Browser-use agents 50 at once · 2 vCPU / 4 GB · 30,000 sessions of 10 min a month | 135th of 367, with limits $942 a month | 142nd of 367, with limits $1,772 a month | 7th cheapest of 367 $200 a month |
| Scraping & bots (startup scale) 50 at once · 1 vCPU / 2 GB · 100,000 sessions of 3 min a month | 134th of 346, with limits $1,184 a month | 142nd of 346, with limits $2,354 a month | 6th cheapest of 346 $90 a month |
| Mass scraping & bots (undetectable) 1,000 at once · 1 vCPU / 2 GB · 3,000,000 sessions of 2 min a month | 301st of 338, with limits $28,971 a month | 317th of 338, with limits $46,814 a month | 71st of 338, with limits $1,800 a month |
| Parallel red teaming 200 at once · 2 vCPU / 4 GB · 5,000 sessions of 30 min a month | 70th of 360, with limits $467 a month | 85th of 360, with limits $1,184 a month | 2nd cheapest of 360 $200 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month Only GitHub Actions offers a GPU, with NVIDIA T4 larger runners; Buildkite's hosted shapes and boat's are CPU only. | Can't run it | Can't run it | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month Both host macOS, GitHub on Apple silicon and Intel and Buildkite on Apple M4 with current Xcode; boat runs Linux only. | 25th of 36, with limits $1,178 a month | 35th of 36, with limits $2,310 a month | Can't run it |
Key features
| Feature | GitHub Actions | Buildkite | boat |
|---|---|---|---|
| Kind of product | CI built into GitHub: jobs run from workflow files in a repository | Separate CI platform: hosted agents run jobs from Buildkite pipelines | Sandbox API: create, stop, fork and reach full VMs from your code |
| Isolation | A new VM per job on Azure for Linux and Windows, GitHub's Mac cloud for macOS | A VM per job, destroyed with its data after; Apple Virtualization framework on macOS | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemd |
| How long a job or machine runs | Up to 6 hours per job | Up to 8 hours on Linux and 4 on macOS, longer on request; 4 hours on Free | No session cap on paid plans; you set the time to live |
| Files between runs | Fresh VM each job; files carry over only through cache, artifacts or custom images | Cache volumes keep chosen paths after successful jobs, best effort, up to 14 days | The whole disk is saved every minute and on stop; a stopped sandbox costs nothing |
| Fork | No; custom images are a template for new runners | Each job gets its own copy of the last committed cache volume | Fork a running sandbox with its disk |
| Docker and nested virtualization | Docker, and /dev/kvm on Linux runners after adding the runner user to the KVM group | Docker on Linux; macOS has the Docker CLI but no daemon; /dev/kvm not documented | Docker, root, systemd and /dev/kvm on every machine |
| Reaching the machine | No inbound connections | No exposed ports; a terminal into a running job through the UI or bk job ssh | SSH, HTTPS URLs for up to 50 ports, raw TCP, dedicated IPv4 or IPv6 |
| Desktop and computer use | Headless runners; browsers preinstalled for tests | Browser-based desktop access to debug a running macOS job; no computer-use API | 60fps Linux desktop with Chromium and a computer use API |
| Coding agents | Copilot cloud agent, plus Claude and Codex in preview, working on issues and pull requests | You install Claude Code in your image or step and run it as a pipeline job | Claude Code, Codex and five more preinstalled, driven from outside with a prompt, steer and events API |
| Keeping API keys out | Secrets enter the job as inputs or environment variables, hidden from logs | Anthropic proxy: jobs call it with the job token and Buildkite sets the key | Credentials proxy for model providers and any HTTPS API; switch to another account when credits run out |
| Operating systems | Linux x64 and arm64, Windows x64 and arm64, macOS | Linux AMD64 (ARM64 on Enterprise), macOS on Apple M4, Windows Server 2022 in private preview | Linux x64 only |
| GPUs | Linux and Windows larger runners with an NVIDIA T4 | None | None |
| Biggest machine | Larger runners in several sizes, billed at their own rates | Linux up to 8 vCPU / 32 GB on Pro and 64 vCPU / 256 GB on Enterprise; macOS up to 12 vCPU / 56 GB | Up to 16 vCPU / 32 GB on the $100 plan and above |
| Regions | Azure; larger runners can join your Azure network across the US, EU and APAC | US East Coast only | EU only (Germany, Finland, France), with EU data residency |
Every feature Battleships tracks (43)
| Feature | GitHub Actions | Buildkite | boat |
|---|---|---|---|
| Full VM (own kernel) | Yes | Yes | Yes |
| Docker inside | Yes | Yes | Yes |
| Nested virtualization | Yes | No | Yes |
| Root | Yes | Not published | Yes |
| Systemd | No | No | Yes |
| Desktop GUI | No | Yes | Yes |
| Browser | Yes | Yes | Yes |
| Computer-use API | No | No | Yes |
| SSH | No | Yes | Yes |
| Persistent disk | No | Yes | Yes |
| Pause/resume | No | No | Yes |
| Automatic snapshots | No | Yes | Yes |
| Fork/clone | No | Yes | Yes |
| Live fork (no pause) | No | No | Yes |
| Memory fork | No | No | No |
| Custom image (Docker or snapshot) | Yes | Yes | Yes |
| ≥24 h sessions | No | No | Yes |
| Idle auto-stop | Yes | Yes | No |
| Wake on request | No | No | No |
| HTTPS preview URLs | No | No | Yes |
| Raw TCP inbound | No | No | Yes |
| Public IPv4 | No | No | No |
| Egress allowlist | Yes | No | No |
| Secret proxy | No | Yes | Yes |
| Secret proxy for any API | No | No | Yes |
| Preinstalled agents | Yes | No | Yes |
| Agent harness API | Yes | No | Yes |
| MCP server | Yes | Yes | No |
| GPU | Yes | No | No |
| Windows | Yes | Yes | No |
| Arm64 | Yes | Yes | No |
| Self-hosting | Yes | Yes | No |
| BYOC | No | No | No |
| Open source | Yes | No | No |
| Scoped API keys | Not published | Not published | Yes |
| Spend limits | Yes | Not published | Yes |
| Usage per sandbox (API) | Yes | No | Yes |
| Audit logs | Yes | Not published | No |
| SSO | Yes | Yes | No |
| SOC 2 | Yes | Yes | No |
| HIPAA | No | No | No |
| EU data residency | Yes | No | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
There is no comparable CPU measurement for GitHub Actions hosted runners or for Buildkite hosted agents: neither was part of the StarSling hpc-sandbox-benchmarks run. On that Node.js benchmark at 4 vCPU / 8 GB, boat did 26.69 runs per second on dedicated AMD Ryzen 9 9950X hosts.
Node.js build-and-test loop at 4 vCPU / 8 GB, higher is better. Measured with the open hpc-sandbox-benchmarks suite. GitHub Actions and Buildkite have no published run in this suite yet, so there is no like-for-like number to compare.
Pricing in five scenarios
Each bill is priced from the providers' public price lists by the open Battleships engine, with the cheapest plan that runs the scenario.
| Scenario | GitHub Actions, a month | Buildkite, a month | boat, a month |
|---|---|---|---|
| One coding agent, workdays 4 vCPU / 8 GB, 50 GB disk, 8 hours a day, 22 days a month, files kept between days | $80 · Team · with limits | $166 · Pro · with limits | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $354 · Team · with limits | $715 · Pro · with limits | $26 · $20/mo |
| 50 agents in parallel 50 machines of 4 vCPU / 8 GB at once, 8-hour sessions, 1,100 sessions a month, Docker inside | $3,814 · Team · with limits | $7,677 · Pro · with limits | $317 · $20/mo × 3 seats |
| Sandboxes for your users 2 vCPU / 4 GB, 30,000 sessions of 10 minutes a month, up to 300 at once | $1,092 · Enterprise Cloud · with limits | $2,204 · Pro · with limits | $200 · $100/mo × 2 seats |
| 1,000 short jobs at once 2 vCPU / 4 GB, 1,000 at once, 3 minutes each, 200,000 jobs a month | $2,721 · Enterprise Cloud · with limits | $4,787 · Pro · with limits | $2,000 · $2000/mo · with limits |
GitHub Actions: GitHub bills per minute per job, rounding each job up to the next whole minute, from $0.006 a minute for 2-core Linux. Plans include monthly minutes for standard runners only, and public repos use standard runners for free.
Buildkite: Buildkite Pro costs $30 per active user a month and includes 4,000 Linux vCPU minutes, then $0.004 per vCPU minute on Linux and $0.02 on macOS, metered to the second. Enterprise pricing is custom.
Buildkite: Plans start at $20 a month, and the whole fee is usage credit spent per second while sandboxes run. A stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
Neither CI service fits the agent scenarios as a sandbox: GitHub Actions jobs end after 6 hours with nothing kept on disk, and Buildkite jobs end after 8 hours with only cache volume paths kept. For 1,000 short jobs at once, GitHub Enterprise Cloud stops at 500 concurrent jobs, and Buildkite Pro shares one pool of 256 Linux vCPU, so most jobs wait in the queue. boat's $2,000 plan queues starts above 90 a minute and allows fewer starts a day than that burst needs.
| Scenario | GitHub Actions | Buildkite | boat |
|---|---|---|---|
| One coding agent, workdays |
|
| None that bite |
| One agent that never stops |
|
| None that bite |
| 50 agents in parallel |
|
| None that bite |
| Sandboxes for your users |
|
| None that bite |
| 1,000 short jobs at once |
|
|
|
Which one should you use?
Use GitHub Actions when
your code is on GitHub and you want CI right inside it, or you need Windows, arm64, macOS or a T4 GPU, or the Copilot, Claude or Codex agents on your pull requests.
- Already in your GitHub repo. If your code lives on GitHub, Actions runs from pushes and pull requests with no second service to sign up for or wire up.
- More platforms, including GPUs. Teams that need Windows on arm64, Intel macOS or an NVIDIA T4 GPU get hosted runners for each, which Buildkite does not offer.
- Free minutes and your own network. Public repos use standard runners free, plans include minutes, and larger runners can join your Azure network outside the US.
Use Buildkite when
you want a dedicated CI platform with its own pipelines, jobs longer than 6 hours, cache volumes, macOS on Apple M4 or Linux build machines up to 64 vCPU.
- Longer jobs. Builds that run past 6 hours fit: Buildkite Linux jobs go up to 8 hours, and support can allow longer.
- Files that carry forward. Cache volumes keep chosen paths, such as a dependency or Git cache, for the next job without uploading them as artifacts.
- Big Linux machines and per-second billing. Heavy builds can use up to 64 vCPU and 256 GB on Enterprise, billed per second with no minimum per job.
Where boat fits
GitHub Actions and Buildkite are both CI services: each job gets a fresh machine that is thrown away when it ends. If what you are really running is agents that work for hours or days, keep their files, serve a preview or need a desktop, look at boat. It is not a CI service, but it gives each agent one full Linux VM that stays.
A machine that keeps its state
Jobs end after 6 hours on GitHub Actions and 8 on Buildkite, and each starts clean apart from caches. An agent reinstalls tools and reclones every run; boat saves the whole disk every minute and has no session cap on paid plans.
Reachable from outside
Neither CI service accepts inbound connections, so a preview server or webhook needs a third-party tunnel inside the job. boat gives each sandbox SSH, HTTPS URLs on up to 50 ports and raw TCP.
Agents driven from outside, keys kept out
On both, an agent is a job you start and read through logs, with secrets inside the VM or a proxy for Anthropic only. boat lets you prompt and steer seven preinstalled agents by API, and its proxy covers any HTTPS API.
Use boat when what you are running is agents on Linux for hours or days: one full VM that keeps its disk, Docker and /dev/kvm, a 60fps desktop, URLs you can reach and coding agents you drive from outside. Compare it one to one: boat vs GitHub Actions and boat vs Buildkite.
Questions people ask
Is GitHub Actions cheaper than Buildkite?
In the scenarios we priced, GitHub Actions came out lower: one agent running all month is $354 on GitHub Actions and $715 on Buildkite, and 50 agents in parallel are $3,814 versus $7,677. Neither fits those agent scenarios, and boat came to $26 and $317 for the same two.
Which is faster, GitHub Actions or Buildkite?
We have no comparable CPU measurement for either one. boat did 26.69 runs per second on the StarSling Node.js benchmark at 4 vCPU / 8 GB.
How long can a job run on each?
GitHub-hosted runners stop a job after 6 hours. Buildkite hosted agents allow up to 8 hours on Linux and 4 on macOS, and support can allow longer runs. A boat sandbox has no session cap on paid plans.
Do files persist between jobs?
On GitHub Actions each job starts on a new VM, and files carry over only through the cache, artifacts or a custom image. On Buildkite, paths you declare as cache volumes are saved after successful jobs, best effort, for up to 14 days. boat saves the whole disk every minute and on stop.
Can GitHub Actions and Buildkite run Docker and Android emulators?
Both run Docker on Linux. GitHub Linux runners expose KVM for Android emulators once you add the runner user to the KVM group, while Buildkite does not document /dev/kvm. boat has Docker and /dev/kvm on every machine.
Can I run AI coding agents on them?
Yes, as CI jobs: GitHub runs its Copilot cloud agent and Claude and Codex on Actions runners, and on Buildkite you install Claude Code in a step and call its Anthropic proxy. The agent stops when the job ends. On boat seven agents are preinstalled and you prompt and steer them by API.
Try boat
Install the CLI, then run boat new.
7-day free trial
More comparisons
- boat vs GitHub Actions
- boat vs Buildkite
- GitHub Actions vs CircleCI
- GitHub Actions vs Blacksmith
- GitHub Actions vs Depot
- GitHub Actions vs WarpBuild
- GitHub Actions vs GitLab.com hosted runners
- GitHub Actions vs Bitrise
- GitHub Actions vs Codemagic
- GitHub Actions vs RunsOn
- GitHub Actions vs Ubicloud
- CircleCI vs Buildkite