Skip to content

Configuration Reference

All configuration is done through a YAML config file. The only CLI flag is --config to specify the file path.

If --config is not specified, the following paths are searched in order:

  1. ~/.elastic-fruit-runner/config.yaml
  2. /opt/homebrew/var/elastic-fruit-runner/config.yaml
  3. /usr/local/var/elastic-fruit-runner/config.yaml
  4. /etc/elastic-fruit-runner/config.yaml
orgs:
- org: your-org
auth:
# Option A: GitHub App (recommended)
github_app:
client_id: Iv1.xxxxxxxxxxxxxxxx
installation_id: 12345678
private_key_path: /path/to/private-key.pem
# Option B: Personal Access Token (uncomment and remove github_app above)
# pat_token: ghp_xxx
runner_group: Default
runner_sets:
- name: efr-macos-arm64
backend: tart
image: ghcr.io/cirruslabs/macos-tahoe-xcode:26.3
labels: [self-hosted, macos, arm64]
max_runners: 2
- name: efr-linux-arm64
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
- name: efr-linux-amd64
backend: docker
image: ghcr.io/actions-runner-controller/actions-runner-controller/actions-runner-dind:latest
labels: [self-hosted, linux, amd64]
max_runners: 4
platform: linux/amd64
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
idle_timeout: 15m
log_level: info
FieldTypeDefaultDescription
orgslistOrganization-level runner set configurations
reposlistRepository-level runner set configurations
idle_timeoutduration15mTime after which idle runners are reaped. Must be > 0
log_levelstringinfoLog level: debug, info, warn, error

At least one of orgs or repos must be configured.

FieldTypeRequiredDefaultDescription
orgstringyesGitHub organization name
authobjectyesAuthentication configuration
runner_groupstringnoDefaultRunner group name
runner_setslistyesAt least one runner set
FieldTypeRequiredDescription
repostringyesRepository in owner/repo format
authobjectyesAuthentication configuration
runner_setslistyesAt least one runner set

Repository-level runners always use the default runner group.

Exactly one of pat_token or github_app must be configured per org/repo. They are mutually exclusive.

FieldTypeRequiredDescription
github_app.client_idstringyesGitHub App Client ID (starts with Iv1.)
github_app.installation_idintegeryesInstallation ID
github_app.private_key_pathstringyesPath to the private key .pem file
FieldTypeRequiredDescription
pat_tokenstringyesGitHub PAT (must not be empty)

Required PAT scopes:

For a classic token:

  • admin:org (Organization > Self-hosted runners: Read and write)
  • repo (for repository-level runners)

For a fine-grained token:

  • Resource owner: your organization
  • Organization permissions > Self-hosted runners: Read and write
  • Repository permissions > Administration: Read and write (for repository-level runners)
FieldTypeRequiredDefaultDescription
namestringyesRunner set name (used as runs-on label in workflows). Must be unique across all orgs/repos
backendstringyesBackend type: tart or docker
imagestringnoVM image (Tart) or container image (Docker)
labelslistnoRunner labels
max_runnersintegeryesMaximum concurrent runners. Must be > 0
platformstringnoDocker platform (e.g., linux/arm64, linux/amd64)

For macOS VMs on Apple Silicon. Uses Tart to create ephemeral VMs.

  • image: OCI image reference (e.g., ghcr.io/cirruslabs/macos-tahoe-xcode:26.3)
  • max_runners: Recommend capping at 2 per host (Apple EULA restriction for macOS VMs)
  • Requires the tart CLI installed on the host

For Linux containers. Uses Docker-in-Docker.

  • image: Docker image with actions/runner (e.g., ghcr.io/actions-runner-controller/actions-runner-controller/actions-runner-dind:latest)
  • platform: Specify for cross-architecture (e.g., linux/amd64 for Rosetta 2 emulation on Apple Silicon)
  • Requires Docker installed and running on the host

Only one environment variable is supported:

VariableConfig file equivalentDescription
LOG_LEVELlog_levelOverrides the log level from config file

All other configuration must be done through the YAML config file.