Installation Guide
RunsOn can be installed and upgraded in a few clicks using the provided CloudFormation template.
The full installation takes about 10 minutes and will require:
- a license key (free 15 day trial available).
- an AWS account: we recommend that you set up RunsOn in its own dedicated AWS sub-account, to further improve isolation of your workflows.
- permission to create a GitHub App in your GitHub organization. RunsOn supports any type of GitHub account, even personal accounts.
1. Select your AWS region
To get started, simply select one of the regions below. This will redirect you to the CloudFormation interface:
Or, if you prefer creating the stack manually with CloudFormation, you can use the following template URL:
https://runs-on.s3.eu-west-1.amazonaws.com/cloudformation/template.yaml
Note: RunsOn can be made available in any region that has the AppRunner service available. Please contact me if you want support for a new region.
2. Stack creation
After you click on one of the regions above, you will end up on a screen with a few inputs fields:
![Inputs for RunsOn stack](/_astro/01-stack-params-X.DfFcJ1VE_14Ix76.webp)
You must fill those fields under Required Configuration:
- the name of your GitHub organization or personal account where you want to install RunsOn (e.g.
my-org
). - the license key for RunsOn. You can get one here, with a 15-day free trial.
- an email address where cost & alert reports will be sent.
Then, check the box to allow the stack creation, and proceed by clicking on “Create stack”. Note that the stack will create a dedicated IAM role for the RunsOn service, with the most restricted set of permissions required.
![Create RunsOn stack](/_astro/02-create-stack-X.BmtA58Y__wGiOz.webp)
Once the stack creation is complete, the HTTPS URL to your RunsOn instance will be displayed in the CloudFormation stack Outputs, under the RunsOnEntryPoint
output parameter:
![CloudFormation Output](/_astro/04-stack-outputs-X.CzARXUsN_1XrQbI.webp)
3. GitHub app registration
To finish the installation, from the CloudFormation stack Outputs, simply click on the HTTPS URL for the RunsOn entrypoint, and click “Register app”:
![Register GitHub App](/_astro/07-setup-welcome-X.BXYHMa7D_gQdpn.webp)
You will then be directed to a screen where you can adjust your app name:
![Create GitHub App](/_astro/07-setup-create-app.egRV81ZR_Z1e6CiV.webp)
And then select the repositories you want this app to be installed on:
![Set permissions for GitHub App](/_astro/07-setup-install-app.BQnj93jA_2MLQi.webp)
After you confirm, you will get redirected to the RunsOn service, which should display the following success screen:
![Success](/_astro/07-setup-success-X.CJTFuOD-_Z2nDzLA.webp)
4. Ready!
It’s now time to update your workflows to select one of the RunsOn runner types! For instance:
runs-on: ubuntu-latestruns-on: [runs-on,runner=2cpu-linux-x64,"run-id=${{ github.run_id }}"]
We recommend adding the run-id
label so that the runner is pinned to this workflow run.
Otherwise the job could be executed by any other RunsOn runner having the same labels, which could make debugging a bit harder if anything goes wrong.
As a final check, make sure you have enabled repository-level self-hosted runners in your organization settings, under the “General” Actions settings:
![Allow repository-level runners in organization settings](/_astro/allow-runner-repo.D34GeOw0_1XYcAi.webp)
Direct link to the settings page:
https://github.com/organizations/<YOUR_ORG>/settings/actions
Stack cost
The stack will setup a dedicated VPC / 3 public subnets / Route table / S3 gateway endpoint / Security Group / Restricted IAM Role / SNS Topic for Alerts / AppRunner Service.
Monthly cost of the stack is ~$5/month on average, and can be as low as $1.5/month if low workflow count.
Stack parameters
GithubOrganization
- Type: String
- Description: Name of your GitHub organization. For instance if your GitHub organization lives at
https://github.com/my-org
, then the value of this parameter should be:my-org
. - MinLength: 1
LicenseKey
- Type: String
- Description: License key. Get one at https://runs-on.com/pricing/ ↗.
- MinLength: 1
EmailAddress
- Type: String
- Description: Email address for cost and alert reports.
- MinLength: 1
AlertTopicSubscriptionHttpsEndpoint
- Type: String
- Description: HTTPS endpoint for cost and alert reports. Note that the endpoint must support confirmation of the SubscribeURL ↗ emitted by AWS.
- Default: ""
SSHCidrRange
- Type: String
- Default: 0.0.0.0/0
- Description: CIDR range for SSH access (mainly useful when Private=false). By default, only repository collaborators with admin permission will be able to SSH into the runner instances.
- MinLength: 1
Private
- Type: String
- Default:
false
- AllowedValues:
true
false
- Description: Enable (true) or disable (false) private subnets. Note that enabling will create 3 managed NAT gateways, with the corresponding costs.
DefaultAdmins
- Type: String
- Default: ""
- Description: Comma-separated list of GitHub usernames that will always be granted SSH access to all the runner instances (if SSH access is enabled). If blank, only repository collaborators with push permission will be able to SSH into the runner instances.
AppEc2QueueSize
- Type: Number
- Default: 2
- MinValue: 1
- Description: Rate limit for launching instances, per second. New AWS accounts come with a default of 2 RunInstances call/s, so only increase if you have requested a higher limit from AWS.
AppAlarmDailyMinutes
- Type: Number
- Default:
4000
- Description: Trigger an alarm if the cumulative number of minutes consumed during a day is over that number.
AppCPU
- Type: Number
- Default:
256
- Description: CPU units for RunsOn service (256 or higher). If you have many workflows, you may need to increase this (512, 1024, etc.).
AppMemory
- Type: Number
- Default:
512
- Description: Memory in MB for RunsOn service (512 or higher). If you have many workflows, you may need to increase this (1024, 2048, etc.).
RunnerDefaultDiskSize
- Type: Number
- Default:
40
- MinValue:
40
- Description: Disk size in GB for default runners.
RunnerDefaultVolumeThroughput
- Type: Number
- Default:
400
- MinValue:
125
- MaxValue:
1000
- Description: Volume throughput in MiB/s for default runners (helps with faster boot times, but costs more).
RunnerLargeDiskSize
- Type: Number
- Default:
80
- MinValue:
40
- Description: Disk size in GB for large runners.
RunnerLargeVolumeThroughput
- Type: Number
- Default:
750
- MinValue:
125
- MaxValue:
1000
- Description: Volume throughput in MiB/s for large runners (helps with faster boot times, but costs more).
CostReportsEnabled
- Type: String
- Default:
true
- AllowedValues:
true
false
- Description: Enable or disable cost reports sent by email.
EC2InstanceCustomPolicy
- Type: String
- Default: ""
- Description: Optional managed IAM Policy ARN to assign to the EC2 runner instances.
ECInstanceDetailedMonitoring
- Type: String
- Default:
false
- AllowedValues:
true
false
- Description: Enable or disable detailed monitoring for EC2 instances (can incur additional costs).