This integration releases independently of Orka and is compatible with Orka 3.x. Check the releases page for the current version.
Prerequisites
Have all of these in place before step 1.Setup steps
1. Create a service account and VM config
2. Set up your GitHub App
Follow Creating a GitHub App and note the App ID, installation ID, and private key. If you’re registering at the enterprise level instead, skip this and use a classic PAT with theadmin:enterprise scope. Use a dedicated service account for it and rotate it on a schedule, since it’s long-lived and broadly privileged.
3. Configure environment variables
At minimum you need GitHub auth,GITHUB_URL, ORKA_URL, ORKA_TOKEN, ORKA_VM_CONFIG, and a RUNNERS definition:
name in RUNNERS must match the runs-on label your workflows target. GITHUB_APP_PRIVATE_KEY_PATH is read inside the container, so it’s the path you mount the key to in step 4 (/secrets/github-app.pem in these examples), not the key’s location on your host. See the full variable reference below, and an example .env file here.
The GitHub App private key must be PKCS#1 RSA format. If your key doesn’t work, convert it with
ssh-keygen -p -m pem -f <PATH_TO_KEY>.4. Run the container
Either pass environment variables directly:.env file:
5. Run a test workflow
Point a workflow at the runner label from yourRUNNERS config:
Configuration reference
GitHub authentication
Orka connection
Runner behavior
Metrics (optional)
GitHub Enterprise Server (GHES)
SetGITHUB_URL to your enterprise instance (for example https://github.enterprise.com/my-org), and provide either a GITHUB_TOKEN with permission to pull the runner release from github.com, or pin GITHUB_RUNNER_VERSION to avoid contacting github.com at startup entirely. GHES is detected automatically from GITHUB_URL.
Multiple runners
Only one runner scale set is supported per running instance. For multiple scale sets, run multiple instances of the container, each with its ownRUNNERS value and a unique runner name.
Beyond a single runner pool
A few things worth knowing about as your usage grows:- Observability. Set
ENABLE_METRICS=trueto get Prometheus metrics on scale-set state (available jobs, busy/idle runners) atMETRICS_ADDR, useful for building dashboards or alerts on top of your runner fleet rather than guessing at capacity. - Custom VM images.
ORKA_VM_CONFIGpoints at any VM config you’ve created withorka3 vmc create, so you’re not limited to a base image. Build one with your own tooling pre-installed to cut per-job setup time. - Image caching. If cold starts on a new image are slow, see Image Caching to pre-cache images on specific nodes ahead of time.
- Burst capacity. If your fixed node pool isn’t enough during peak build periods, Orka Burst adds on-demand elastic capacity without a long-term hardware commitment.
Troubleshooting
Support
Open a ticket in the MacStadium Portal and include the runner container’s logs (LOG_LEVEL=debug if possible).
