Linux self-hosted runners
RunsOn supports both native x64 and arm64 self-hosted GitHub Actions runners, irrespective of your GitHub plan (even with free plans).
For instance if you want to use a 2cpu x64 runner, your workflow file would look like this:
For an arm64 runner, you would use:
The list of predefined runner names is available below, although most users will customize their runners to use a specific number of CPUs, memory, disk size, etc. using the Custom runners capabilities.
Default runners
The table below shows the per-minute prices of various runner types using EC2 instances launched by RunsOn, against comparable official managed GitHub runners. Cost includes compute + storage using the default RunsOn stack parameters. Networking costs can vary depending on your usage but all ingress traffic is free. Most users can significantly reduce egress traffic by using the Magic Cache feature, as well as ECR for storing docker images.
$/min, us-east-1 spot prices, for the instance type selected at the time of the calculation. Prices can vary based on time of day, region, and instance type selected. Savings are higher if you include the speed gains (your jobs will consume less minutes) or use previous-generation instance types.
Custom runners
You can also create your own custom runners using inline runs-on:
labels in your workflow, or by referencing a custom runner name created in the repository configuration file.
For more details:
- See the Job labels section.
- See the Repository configuration section.
Custom images
Every runner launches from an AMI. Default runners are launched using a public AMI managed by RunsOn, but you can also build and use your own custom AMIs if you’d like better control, or preinstall specific software.
For more details:
- See the Custom images section.
Examples
Disable spot pricing for critical jobs:
Only allow instances with 4 CPUs from compute-optimized families:
Use ubuntu24
image instead of default ubuntu22
:
Fully custom runs-on definition, instance is launched in private subnet with static egress IP: