GitHub Actions vs Ubicloud
GitHub Actions is GitHub's CI service: each job gets a fresh VM that is gone within 6 hours. Ubicloud is an open source cloud that sells plain Linux VMs you keep as long as you like, and it also sells runners for the same GitHub Actions jobs.
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
Ubicloud
Ubicloud is an open source cloud that runs VMs, managed Postgres, Kubernetes and GitHub Actions runners on leased bare-metal servers.
You rent Linux VMs (Standard with dedicated CPU, or cheaper Burstable with shared CPU) from Ubicloud's managed service, or run the same AGPL code on your own servers. Around the VMs it offers private subnets, an inbound firewall, load balancers, managed PostgreSQL, Kubernetes, GPU VMs, inference endpoints and cheap GitHub Actions runners. It is general infrastructure, not an agent sandbox, so this page compares the two where they overlap: giving an agent its own Linux machine.
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 | Ubicloud: price rank | bochka: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month A software factory needs machines that keep their checkout and Docker cache; a Ubicloud VM can, but bills while stopped, and a GitHub Actions job starts clean and ends within 6 hours. | 298th of 367, with limits $5,853 a month | 126th of 367, with limits $1,136 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 a Ubicloud VM you set up yourself, but not GitHub Actions jobs that end after 6 hours. | 333rd of 366, with limits $10,692 a month | 154th of 366, with limits $1,139 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 | 59th of 345, with limits $52 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 GitHub's terms rule out offering Actions to your users as a service, while Ubicloud's quota of 256 vCPU needs a raise for 300 sandboxes of 2 vCPU. | 308th of 361, with limits $2,892 a month | 53rd of 361, with limits $390 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 | 234th of 360, with limits $1,560 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 | 31st cheapest of 364 $624 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 fit: Ubicloud runs the same GitHub Actions jobs on its own runners for $300 a month against $1,012 on GitHub-hosted runners here, and bochka ranks 4th at $86 on general sandboxes. | 100th cheapest of 377 $1,012 a month | 28th cheapest of 377 $300 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB Ubicloud fits a 24/7 dev box with SSH and a disk that stays; GitHub-hosted runners take no inbound connections and keep nothing between jobs. | 279th of 368, with limits $159 a month | 67th cheapest of 368 $91 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 Neither has a desktop: GitHub runners are headless and a Ubicloud VM is a plain OS you set up yourself, while bochka streams a 60fps desktop with computer use. | 292nd of 369, with limits $1,768 a month | 132nd of 369, with limits $312 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 | 188th of 367, with limits $156 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 | 165th of 346, with limits $78 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 | 60th of 338, with limits $1,573 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 | 129th of 360, with limits $81 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 Ubicloud fits here, with Nvidia GPU VMs enabled on request; GitHub's T4 runners are CI jobs and bochka has no GPUs. | Can't run it | 93rd of 98, with limits $795 a month | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month Only GitHub Actions fits, with hosted macOS runners; Ubicloud and bochka run Linux only. | 25th of 36, with limits $1,178 a month | Can't run it | Can't run it |
Key features
| Feature | GitHub Actions | Ubicloud | bochka |
|---|---|---|---|
| Kind of product | CI service: jobs run from workflow files in a GitHub repository | General cloud: VMs you set up yourself, plus Postgres, Kubernetes and GitHub Actions runners | Sandbox API for agents: create, stop, fork and reach full VMs from your code |
| Isolation | New VM per job on Azure (Linux, Windows) or GitHub's Mac cloud, with passwordless sudo | Full KVM guest on Cloud Hypervisor with its own kernel and root | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemd |
| Session length | Up to 6 hours per job | A VM runs until you delete it; runner jobs keep GitHub's 6-hour job limit | No cap on paid plans; you set the time to live |
| Disk and stopping | Every job starts on a fresh VM; files carry over only through cache, artifacts or custom images | A VM keeps its disk, but a stopped VM keeps billing as if it were running | Disk saved every minute and on stop; a stopped sandbox costs nothing |
| Fork | No; custom images are a template for new runners, not a copy of a live one | Stop the VM, capture a machine image (single disk up to 40 GiB), then boot new VMs from it | Fork a running sandbox with its disk in one call |
| Inbound access | None; GitHub says hosted runners never need inbound connections | SSH, free public IPv6, IPv4 for $3 a month; for HTTPS the VM runs TLS itself | SSH, token-protected HTTPS URLs for up to 50 ports, raw TCP, own IP |
| Docker and nested virtualization | Docker preinstalled; KVM on Linux runners after adding the runner user to the KVM group | Root over SSH, so Docker installs like on any Linux VM; nested virtualization is not documented | Docker, root, systemd and /dev/kvm on every machine |
| Desktop and computer use | Headless runners; browsers are preinstalled for tests | None; you install a desktop and browser on the VM yourself | Linux desktop streamed at 60fps, Chromium, computer use API |
| Coding agents | Copilot cloud agent, plus Claude and Codex in public preview, working on issues and pull requests | None; you install and drive agents yourself, for example over SSH | Seven agents preinstalled, driven from outside with a prompt, steer and events API |
| Keeping API keys out of the machine | Secrets enter the job as environment variables and are hidden from logs | No credentials proxy; secrets live on the VM | Credentials proxy for model providers and any HTTPS API; switch a credential to another account when credits run out |
| GitHub Actions runners | GitHub-hosted runners; plans include monthly minutes for standard runners | Managed x64 and arm64 runners built from GitHub's runner image templates, billed per minute of job time | No managed runner; CI runs on general sandboxes with Docker and /dev/kvm |
| Operating systems | Linux x64 and arm64, Windows x64 and arm64, macOS | Linux VMs (Ubuntu, Debian, AlmaLinux); arm64 for CI runners | Linux x64 |
| GPUs and self-hosting | Larger runners with an NVIDIA T4; open-source runner free on your own machines | Nvidia A100, B200 and RTX PRO 6000 VMs on request; the whole cloud is AGPL code you can run yourself | No GPUs, managed service only |
| Regions | Azure; larger runners can join your Azure network in the US, EU and APAC | Germany, Finland and Virginia (US), plus GPUs in Istanbul | EU only: Germany, Finland, France |
Every feature Battleships tracks (43)
| Feature | GitHub Actions | Ubicloud | bochka |
|---|---|---|---|
| Full VM (own kernel) | Yes | Yes | Yes |
| Docker inside | Yes | Yes | Yes |
| Nested virtualization | Yes | Not published | Yes |
| Root | Yes | Yes | Yes |
| Systemd | No | Not published | Yes |
| Desktop GUI | No | No | Yes |
| Browser | Yes | No | Yes |
| Computer-use API | No | No | Yes |
| SSH | No | Yes | Yes |
| Persistent disk | No | Yes | Yes |
| Pause/resume | No | No | Yes |
| Automatic snapshots | No | No | 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 | Yes | Yes |
| Idle auto-stop | Yes | No | No |
| Wake on request | No | No | No |
| HTTPS preview URLs | No | No | Yes |
| Raw TCP inbound | No | Not published | Yes |
| Public IPv4 | No | Yes | No |
| Egress allowlist | Yes | No | No |
| Secret proxy | No | No | Yes |
| Secret proxy for any API | No | No | Yes |
| Preinstalled agents | Yes | No | Yes |
| Agent harness API | Yes | No | Yes |
| MCP server | Yes | No | No |
| GPU | Yes | Yes | No |
| Windows | Yes | No | No |
| Arm64 | Yes | Yes | No |
| Self-hosting | Yes | Yes | No |
| BYOC | No | Yes | No |
| Open source | Yes | Yes | 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 | Yes | No |
| SSO | Yes | Yes | No |
| SOC 2 | Yes | Yes | No |
| HIPAA | No | No | No |
| EU data residency | Yes | Yes | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
There is no comparable CPU measurement for GitHub Actions hosted runners or for Ubicloud VMs in the hpc-sandbox-benchmarks test. bochka did 26.69 runs per second on it at 4 vCPU / 8 GB, on dedicated AMD Ryzen 9 9950X hosts. On Ubicloud the result would also depend on the family: Standard VMs have dedicated CPU, and Burstable VMs get half of each vCPU with short bursts.
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 Ubicloud 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 | Ubicloud, a month | bochka, 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 | $22 · Usage | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $354 · Team · with limits | $91 · Usage | $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 | $1,098 · Usage | $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 | $156 · Usage | $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 | $312 · Usage · 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 repositories use standard runners for free.
Ubicloud: Ubicloud bills each VM per minute for as long as it exists, running or stopped, and a public IPv4 adds $3 a month. Its GitHub Actions runners bill per minute of job time, with a $2.50 monthly credit for runner time only.
Ubicloud: Plans start at $20 a month, and the whole fee is usage credit spent per second while a sandbox runs. A stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
GitHub Actions fits none of the five sandbox scenarios: it is a CI service, every job ends within 6 hours and nothing on the disk survives to the next job, and for 1,000 short jobs Enterprise Cloud stops at 500 concurrent. Ubicloud fits four of them, but a project starts at 32 vCPU and gets 256 once it has paid an invoice over $5, so 300 user sandboxes of 2 vCPU need a raise from support. Its cheap burstable shape guarantees only half of each vCPU, so the 1,000-job burst gets throttled. On bochka that burst gets queued above 90 starts a minute and needs more starts per day than the $2,000 plan allows.
| Scenario | GitHub Actions | Ubicloud | bochka |
|---|---|---|---|
| One coding agent, workdays |
| None that bite | None that bite |
| One agent that never stops |
| None that bite | None that bite |
| 50 agents in parallel |
| None that bite | None that bite |
| Sandboxes for your users |
| None that bite | None that bite |
| 1,000 short jobs at once |
|
|
|
Which one should you use?
Use GitHub Actions when
you build, test and deploy a GitHub repository, need macOS or Windows runners, or want Copilot, Claude or Codex working on your issues and pull requests.
- Native CI for GitHub repos. For building and testing a GitHub repository, Actions runs right from pushes and pull requests with nothing else to wire up.
- macOS and Windows runners. Teams that build for Apple or Windows get hosted runners for both, which Ubicloud does not offer.
- Agents on your issues and pull requests. Teams that want Copilot, Claude or Codex to pick up issues and open pull requests get that on Actions runners.
Use Ubicloud when
you want cheaper runners for the same GitHub workflows, a plain Linux VM that runs as long as you like, GPU VMs, a US region, or a cloud you can run yourself.
- Same jobs on cheaper runners. Teams that keep their GitHub workflows but want a smaller bill can run them on Ubicloud's x64 and arm64 runners.
- A VM that stays. When the work outlives a 6-hour job, a Ubicloud VM keeps its disk, takes SSH and runs until you delete it.
- GPUs and an open source cloud. Teams that want Nvidia GPU VMs, or to run the whole cloud themselves under the AGPL, can do both on Ubicloud.
Where bochka fits
If what you are really running is agents rather than CI, neither one is built for it: GitHub Actions throws the machine away after each job, and Ubicloud hands you an empty VM to set up yourself. bochka gives each agent a full VM that is ready to work, keeps its disk and costs nothing while stopped.
A machine that stays, with free stops
On GitHub Actions an agent reclones and reinstalls in every job and stops at 6 hours. A Ubicloud VM keeps its disk but bills while stopped, so you pay for idle time or delete it. bochka saves the disk every minute and stops cost nothing.
Fork a running machine
GitHub runners cannot be copied, and on Ubicloud you stop the VM and capture a machine image of one disk up to 40 GiB first. bochka forks a running sandbox in one call, so an agent can try two ideas from the same state.
Agents, a desktop and HTTPS built in
GitHub runners take no inbound traffic and keep secrets as environment variables the agent can read. On Ubicloud you install the agents, desktop and TLS yourself. bochka ships seven agents, a 60fps desktop, HTTPS on 50 ports and a credentials proxy.
Use bochka when an agent needs its own full VM that keeps its disk, stops for free, forks while running, takes inbound HTTPS and comes with coding agents, a desktop and a credentials proxy. Compare it one to one: bochka vs GitHub Actions and bochka vs Ubicloud.
Questions people ask
Is Ubicloud cheaper than GitHub Actions?
For CI in this comparison, yes: the CI runners use case comes to $300 a month on Ubicloud against $1,012 on GitHub-hosted runners. GitHub can still be cheaper for small teams, since public repositories use standard runners for free and paid plans include monthly minutes.
Can Ubicloud replace GitHub-hosted runners?
For Linux jobs, largely: Ubicloud sells x64 and arm64 runners built from GitHub's own runner image templates, so your workflows still run on GitHub Actions. It has no macOS or Windows runners, and jobs keep GitHub's 6-hour limit.
Which is faster?
Neither has a comparable measurement in the hpc-sandbox-benchmarks CPU test, so this page does not rank them. bochka did 26.69 runs per second there at 4 vCPU / 8 GB.
Can GitHub Actions or Ubicloud run Docker?
Both can. GitHub-hosted Linux runners have Docker preinstalled and expose KVM after you add the runner user to the KVM group. A Ubicloud VM gives you root over SSH, so Docker installs like on any Linux machine, and its runners ship Docker too.
Can I run AI agents on GitHub Actions or Ubicloud?
On GitHub Actions, agents like Copilot, Claude and Codex work on issues and pull requests, inside jobs that end within 6 hours. On Ubicloud you install and drive agents yourself on a plain VM. bochka is built for this, with seven agents preinstalled and driven through one API.
Is bochka SOC 2 compliant?
SOC 2 is in progress. We're open about where we stand: live status at status.bochka.xyz and our data retention policy at docs.bochka.xyz/data-retention.
Try bochka
Install the CLI, then run bochka new.
Product preview
More comparisons
- bochka vs GitHub Actions
- bochka vs Ubicloud
- GitHub Actions vs CircleCI
- GitHub Actions vs Blacksmith
- GitHub Actions vs Depot
- GitHub Actions vs WarpBuild
- GitHub Actions vs Buildkite
- GitHub Actions vs GitLab.com hosted runners
- GitHub Actions vs Bitrise
- GitHub Actions vs Codemagic
- GitHub Actions vs RunsOn
- CircleCI vs Ubicloud