Self-hosted CI runners
Your dedicated Mac makes an excellent self-hosted CI runner — full performance, persistent caches, and no per-minute macOS billing.
On your Mac, from your repo’s Settings → Actions → Runners → New self-hosted runner, follow the macOS instructions:
mkdir actions-runner && cd actions-runnercurl -o actions-runner-osx-arm64.tar.gz -L <URL-from-GitHub>tar xzf actions-runner-osx-arm64.tar.gz./config.sh --url https://github.com/ORG/REPO --token <TOKEN>./run.sh # or install as a service:./svc.sh install && ./svc.sh startTarget it in a workflow with runs-on: self-hosted (or a custom label).
brew install gitlab-runnergitlab-runner register \ --url https://gitlab.com/ \ --registration-token <TOKEN> \ --executor shell \ --description "mac-mini-m4"brew services start gitlab-runnerUse a matching tags: entry in .gitlab-ci.yml.
Run a Jenkins agent over SSH or JNLP. Add the Mac as a node (Manage Jenkins → Nodes → New Node), set the remote root (e.g. /Users/your-username/jenkins), and connect via the SSH launcher using your SSH key.
Keep it healthy
Section titled “Keep it healthy”- Clean DerivedData and old simulators regularly to reclaim disk.
- Pin Xcode versions with
xcodesso builds are reproducible. - Watch free space with
df -h; upgrade the SSD tier if needed.