Skip to content

How to manage multiple orgs and repos

A single elastic-fruit-runner daemon can manage runners for multiple GitHub organizations and individual repositories at the same time.

Add multiple entries under orgs, each with its own auth and runner sets:

orgs:
- org: org-one
auth:
github_app:
client_id: Iv1.aaa
installation_id: 11111111
private_key_path: /path/to/org-one-key.pem
runner_group: Default
runner_sets:
- name: org-one-macos
backend: tart
image: ghcr.io/cirruslabs/macos-tahoe-xcode:26.3
labels: [self-hosted, macos, arm64]
max_runners: 2
- org: org-two
auth:
pat_token: ghp_xxx
runner_group: Default
runner_sets:
- name: org-two-linux
backend: docker
image: ghcr.io/actions-runner-controller/actions-runner-controller/actions-runner-dind:latest
labels: [self-hosted, linux, arm64]
max_runners: 4
platform: linux/arm64

Use repos for repository-scoped runners. Each entry uses owner/repo format:

repos:
- repo: your-org/your-repo
auth:
pat_token: ghp_xxx
runner_sets:
- name: repo-runner
backend: docker
image: ghcr.io/actions-runner-controller/actions-runner-controller/actions-runner-dind:latest
labels: [self-hosted, linux, arm64]
max_runners: 2

Repository-level runners do not use runner_group — they use the default group.

You can combine orgs and repos in a single config:

orgs:
- org: my-org
auth:
github_app:
client_id: Iv1.xxx
installation_id: 12345678
private_key_path: /path/to/key.pem
runner_group: Default
runner_sets:
- name: org-macos
backend: tart
image: ghcr.io/cirruslabs/macos-tahoe-xcode:26.3
labels: [self-hosted, macos, arm64]
max_runners: 2
repos:
- repo: other-org/special-repo
auth:
pat_token: ghp_yyy
runner_sets:
- name: special-linux
backend: docker
image: ghcr.io/actions-runner-controller/actions-runner-controller/actions-runner-dind:latest
labels: [self-hosted, linux, arm64]
max_runners: 2
idle_timeout: 15m

Each org and repo gets its own controller goroutine, so they poll and scale independently.