runs-on: fast, cheap, self-hosted GitHub Action runners
runs-on is a service that dynamically launches powerful hosted runners of any size, for any GitHub repository.
In your GitHub Action workflow files, instead of using the default base runner:
You would use:
And then your workflow will execute with a 16 vCPUs / 32GB RAM instance. After the workflow ends, the instance will automatically terminates.
Make that slow test suite fly
GitHub provides base runners with a most 8GB of RAM and 2vCPUs. Bigger runners are available, but they require a Team or Enterprise plan, as well as not being cheap (e.g. a 16 core linux VM is sold at $0.064/min, i.e. theoretical cost of $2700/month if fully used).
From various experiences at smaller companies, I believe there is a need to provide a simple service that auto-magically provision runners of various sizes (and architectures?), for a much cheaper price than what GitHub provides.
Ephemeral self-hosted runners, in your own AWS account
We can use the workflow events emitted by GitHub to auto-provision runners, on-premise:
- You deploy the service on a single server within your infrastructure, in a fire and forget manner.
- The service connects to any of your GitHub repositories, and listens for incoming workflow events.
- When a workflow specifies a custom runner, it provisions an on-demand VM, in your own cloud provider account.
From start to end, everything (service + VMs) runs in your own infrastructure, which is a big win in terms of security and observability.
AWS will be the first provider to be supported: with spot pricing, per-minute billing and large choice of instance types and architectures, it is very efficient in terms of cost/performance for CI workflows.
Hetzner would be the next clear choice, since their cloud offering has a great performance/price ratio (although no per-minute billing).
- Service can be launched with a single command, and runs on a $5 VM.
- Service must make it easy to connect a GitHub account, and add specific GitHub repositories to listen to.
- Service exposes a simple UI for management and observability purposes. HTTPS is required.
- Service allows you to specify a max monthly bill. Runners are no longer started once this limit is reached.
The code will be open-source, possibly with a commercial license required after 30+ days of use. This formula seems to work well for my other project PullPreview.
Installation (coming soon)
Service is compatible with any server running Ubuntu 22.04 LTS. A domain (e.g.
runners.example.com) must point to the server. We strongly recommend using a dedicated VM for that service.
Download the script:
curl -O https://runs-on.com/install.sh
- Inspect the script to ensure it's safe to run.
Run the script with the required arguments:
sudo sh ./install.sh --domain runners.example.com