Labels and sizes
A job chooses its size with its runs-on label. Each label is its own queue.
| Label | vCPUs | Per minute, your hive |
|---|---|---|
hive | 2 | $0.00025 |
hive-4cpu | 4 | $0.0005 |
hive-8cpu | 8 | $0.001 |
Prices are US dollar estimates at reference speed, for jobs that run on your own organization's machines.
Linux x64 labels
The labels above run arm64 jobs, on Macs and on arm64 Linux machines. Linux x64 jobs get labels of their own and run only on Linux x64 machines in your hive. A job sent to one of these labels waits in GitHub's queue until your hive has an x64 machine free. They are priced by the same rule: vCPUs, minutes and the machine's speed.
| Label | vCPUs | Architecture |
|---|---|---|
hive-x64 | 2 | Linux x64 |
hive-x64-4cpu | 4 | Linux x64 |
hive-x64-8cpu | 8 | Linux x64 |
macOS labels
For Xcode: iOS builds, signing, simulators. A macOS job does not run in a VM. It runs on a member's Mac itself, as a separate local user named hiveworker that cannot read the owner's files or keychain, but can use the Xcode and other software installed on that Mac, and its network. Two people have to agree before one runs: the Mac's owner, with hived macos setup, and an owner of your hive, in its settings. Jobs sent to the label wait in GitHub's queue until a Mac that has both is free.
| Label | Billed as | Per minute, your hive | GitHub-hosted |
|---|---|---|---|
hive-macos | 4 vCPUs | $0.0005 | $0.062 |
The job has the whole Mac, less two cores kept for its owner, and is billed as four vCPUs: the size GitHub's standard macOS runner is. Caches the job leaves in the hiveworker user's home, such as CocoaPods and npm, stay for the next job; the runner's working directory does not. The Mac's owner installs what every job needs, typically CocoaPods and Fastlane with Homebrew; a job installs the rest with setup-* actions, as on Linux.
An Expo app built with EAS, on your own Mac:
jobs:
ios:
runs-on: hive-macos
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx eas-cli build --local --platform ios --profile preview --non-interactive --output app.ipa
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
- uses: actions/upload-artifact@v4
with:
name: ios
path: app.ipaAndroid builds need no Mac: eas build --local --platform android runs on the Linux labels with setup-java and android-actions/setup-android.
In a workflow
jobs:
test:
runs-on: hive
steps:
- uses: actions/checkout@v7
- uses: oven-sh/setup-bun@v2
- run: bun test
build:
runs-on: hive-8cpu
steps:
- uses: actions/checkout@v7
- uses: oven-sh/setup-bun@v2
- run: bun run buildLabels, not runner groups
runs-on takes one of these labels as a plain string: hive, hive-4cpu, hive-8cpu or hive-macos. They are not runner groups, so the group: form fails:
jobs:
test:
runs-on:
group: hive-4cpu
# Required runner group 'hive-4cpu' not foundWrite runs-on: hive-4cpu instead. Hive Runner's runners are in your organization's Default runner group, the only group an organization on GitHub Free has, so the labels work on every GitHub plan.
What a job runs on
- A Linux arm64 VM. Actions, container images and binaries a job uses need an arm64 build. The x64 labels, once released, run a Linux x64 VM.
- One job per VM. The VM is created for the job and destroyed after it.
- Docker is in the VM, with buildx and compose, and needs no
sudo: fordockerin a step,services:andcontainer:. Acontainer:image must be based on Debian, Ubuntu or Alpine, or otherwise have Perl. No image is on the disk beforehand: each job pulls what it uses. hive-macosjobs run on a Mac itself, as a separate user, with that Mac's Xcode. See macOS labels.- Windows and GPU jobs are not supported.
Which repositories can use the labels
The labels are created in your organization's default runner group. GitHub does not offer that group to public repositories unless you change the group's settings, which suits a hive of your own.
Next: The daemon