Skip to content

How to install on macOS

Terminal window
brew install boring-design/tap/elastic-fruit-runner
Terminal window
git clone https://github.com/boring-design/elastic-fruit-runner
cd elastic-fruit-runner
make build

The binary will be in output/elastic-fruit-runner.

Create ~/.elastic-fruit-runner/config.yaml. See the configuration reference for all options.

Terminal window
mkdir -p ~/.elastic-fruit-runner

A minimal example:

orgs:
- org: your-org
auth:
pat_token: ghp_xxx
runner_group: Default
runner_sets:
# macOS runners via Tart VMs
- name: efr-macos-arm64
backend: tart
image: ghcr.io/cirruslabs/macos-tahoe-xcode:26.3
labels: [self-hosted, macos, arm64]
max_runners: 2
# Linux arm64 runners via Docker
- 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
# Linux amd64 runners via Docker (Rosetta 2 emulation)
- 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
idle_timeout: 15m
Terminal window
brew services start elastic-fruit-runner

Check status:

Terminal window
brew services info elastic-fruit-runner

Stop:

Terminal window
brew services stop elastic-fruit-runner
Terminal window
elastic-fruit-runner

With a specific config file:

Terminal window
elastic-fruit-runner --config /path/to/config.yaml

Logs are written to the Homebrew log directory when running as a service:

Terminal window
tail -f /opt/homebrew/var/log/elastic-fruit-runner.log

On Intel Macs:

Terminal window
tail -f /usr/local/var/log/elastic-fruit-runner.log

Logs are JSON-formatted. Use jq for filtering:

Terminal window
# Show only errors
tail -f /opt/homebrew/var/log/elastic-fruit-runner.log | jq 'select(.level == "ERROR")'
# Show runner set activity
tail -f /opt/homebrew/var/log/elastic-fruit-runner.log | jq 'select(.runnerSet != null)'

When running manually, logs go to stdout.

Terminal window
brew upgrade elastic-fruit-runner
brew services restart elastic-fruit-runner
Terminal window
brew services stop elastic-fruit-runner
brew uninstall elastic-fruit-runner
rm -rf ~/.elastic-fruit-runner