RunsOn RunsOn

Linux self-hosted runners

Learn how to set up and use Linux self-hosted runners for your GitHub Actions workflows. Supports native x64 and arm64 architectures.

If you want to self-host GitHub Actions runners for Linux on AWS, RunsOn supports both native x64 and arm64 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:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64
    steps:
      - run: echo "Hello from x64!"

For an arm64 runner, you would use:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-arm64
    steps:
      - run: echo "Hello from arm64!"

The list of predefined runner names is available below, although most users will customize their runners to use a specific number of CPUs, memory, volume size, etc. using the Custom runners capabilities.

Default runners

You pay AWS directly. RunsOn orchestrates EC2 runners in your account — compute costs go straight to your AWS bill with no markup. The license fee covers the RunsOn software only.

Per-minute costs including compute + 40GB gp3 EBS storage. Reduce egress costs further with Magic Cache.

Runner RunsOn $/min GitHub $/min Savings
1cpu m7a.medium RunsOn $0.0003 GitHub $0.0020
2cpu m7i-flex.large RunsOn $0.0005 GitHub $0.0060
4cpu m7i-flex.xlarge RunsOn $0.0014 GitHub $0.0120
8cpu c7i-flex.2xlarge RunsOn $0.0025 GitHub $0.0220
16cpu c7i-flex.4xlarge RunsOn $0.0045 GitHub $0.0420
32cpu c7i-flex.8xlarge RunsOn $0.0072 GitHub $0.0820
48cpu c7i-flex.12xlarge RunsOn $0.0104 GitHub N/A
64cpu c7i-flex.16xlarge RunsOn $0.0131 GitHub $0.1620
96cpu c7i.24xlarge RunsOn $0.0205 GitHub $0.2520
Runner RunsOn $/min GitHub $/min Savings
1cpu m7gd.medium RunsOn $0.0002 GitHub N/A
2cpu t4g.large RunsOn $0.0004 GitHub $0.0050
4cpu t4g.xlarge RunsOn $0.0009 GitHub $0.0080
8cpu c7gd.2xlarge RunsOn $0.0017 GitHub $0.0140
16cpu c7gd.4xlarge RunsOn $0.0034 GitHub $0.0260
32cpu c7g.8xlarge RunsOn $0.0060 GitHub $0.0500
48cpu c7g.12xlarge RunsOn $0.0084 GitHub N/A
64cpu c7g.16xlarge RunsOn $0.0113 GitHub $0.0980
96cpu c8g.24xlarge RunsOn $0.0135 GitHub N/A

Spot prices, us-east-1. Actual costs vary by region, time of day, and instance type selected.

Default images

You can opt into a specific image by setting the image label in your workflow.

x64

ImageDescription
ubuntu22-full-x64x64 image compatible with official Ubuntu 22.04 GitHub runner image
ubuntu24-full-x64x64 image compatible with official Ubuntu 24.04 GitHub runner image

arm64

ImageDescription
ubuntu22-full-arm64arm64 image compatible with official Ubuntu 22.04 GitHub runner image
ubuntu24-full-arm64arm64 image compatible with official Ubuntu 24.04 GitHub runner image

In case you specify the image label, make sure you have a family label that specifies instance types that support your image architecture. For instance:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-arm64/family=c7g+m7g

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:

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:

Examples

Disable spot pricing for critical jobs:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/spot=false

Only allow instances with 4 CPUs from compute-optimized families:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/runner=4cpu-linux-x64/family=c7

Use ubuntu22 image instead of default ubuntu24:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/image=ubuntu22-full-x64

Fully custom runs-on definition, instance is launched in private subnet with static egress IP:

jobs:
  build:
    runs-on: runs-on=${{ github.run_id }}/family=m7+c7+r7/image=ubuntu24-full-x64/spot=false/ssh=false/private=true

Quotas

Note that new AWS accounts have low quotas set by default for standard instances, so you might need to request an increase if you plan on launching many jobs.

How to request an increase
  1. Search for “Quotas” in the AWS console.
  2. Click on “Request quota increase”.
  3. Select “EC2” as the service.
  4. Select “G” as the instance type.
  5. Fill in the form and submit (remember that you request vCPUs, not instance count).
  6. Repeat for both spot and on-demand quotas.
Quota increase

Finding the right instance

Need help choosing the right instance type for your workload? Use the instance finder to quickly find AWS instances matching your CPU, RAM, and architecture requirements.