Guide
Runner self-hosted de GitHub Actions pe un Mac mini
Pune un runner GitHub Actions self-hosted pe un Mac mini dedicat. Instalezi Xcode, înregistrezi runner-ul, îl rulezi ca serviciu și ții build-urile rapide și private.
30 minute, actualizat 2026-09-15
Runnerii macOS găzduiți de GitHub sunt mașini partajate. Stau la coadă la ore aglomerate, pornesc de la zero de fiecare dată și se facturează la minut.
Un runner self-hosted pe propriul tău Mac mini pornește imediat, își păstrează cache-urile între build-uri și costă la fel în fiecare lună.
Ghidul ăsta îți ia cam treizeci de minute. Îți trebuie:
- Un Mac mini cu Apple silicon și acces prin SSH
- Drepturi de admin pe repository-ul sau pe organizația de GitHub
- Un Apple ID, ca să descarci Xcode
1. Pregătește Mac-ul
Intră prin SSH și oprește adormirea Mac-ului:
sudo pmset -a sleep 0 disksleep 0 displaysleep 0Instalează Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Recomandăm un utilizator separat pentru runner, ca build-urile să nu ruleze niciodată cu contul tău de admin:
sudo sysadminctl -addUser runner -fullName "CI Runner" -password -Pentru pașii de mai jos, autentifică-te cu utilizatorul ăla.
2. Instalează Xcode
Cel mai simplu prin SSH e cu `xcodes`:
brew install xcodesorg/made/xcodes
xcodes install --latest
xcodes selectAcceptă licența și termină prima pornire:
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS3. Înregistrează runner-ul
În GitHub, deschide-ți repository-ul, apoi Settings, Actions, Runners, New self-hosted runner. Alege macOS și ARM64.
GitHub îți arată comenzile exacte, cu versiunea curentă și un token. Arată cam așa:
mkdir actions-runner && cd actions-runner
curl -o actions-runner-osx-arm64.tar.gz -L <download URL from GitHub>
tar xzf ./actions-runner-osx-arm64.tar.gz
./config.sh --url https://github.com/<owner>/<repo> --token <token>Token-ul expiră după o oră, deci înregistrează-l imediat. Când `config.sh` cere label-uri, pune-le pe cele pe care le vei folosi în workflow-uri, de exemplu `xcode` sau `m4`.
4. Rulează-l ca serviciu
./svc.sh install
./svc.sh start
./svc.sh statusRunner-ul pornește acum odată cu sesiunea utilizatorului. Dacă joburile tale rulează teste UI sau au nevoie de login keychain, activează autentificarea automată pentru utilizatorul runner-ului din System Settings, Users and Groups. Poți face asta prin screen sharing. Autentificarea automată nu e disponibilă cât timp FileVault e pornit.
5. Folosește-l într-un workflow
name: iOS build
on: [push]
jobs:
build:
runs-on: [self-hosted, macOS, ARM64]
steps:
- uses: actions/checkout@v4
- name: Build
run: xcodebuild -scheme MyApp -destination 'generic/platform=iOS Simulator' buildFă un push. Jobul apare în Actions și pornește pe Mac-ul tău în câteva secunde.
6. Ține-l sănătos
- Doar repository-uri private. Pe un repository public, un pull request dintr-un fork poate rula cod pe Mac-ul tău. GitHub nu recomandă runneri self-hosted pe repo-uri publice.
- Fă curat din când în când. DerivedData și simulatoarele vechi cresc în timp:
rm -rf ~/Library/Developer/Xcode/DerivedData
xcrun simctl delete unavailable- Semnare. Ține certificatele într-un keychain dedicat, sau folosește fastlane match.
- Actualizări. Runner-ul se actualizează singur, implicit. Xcode îl actualizezi când vrei tu, nu în mijlocul unui release.
De ce un Mac mini dedicat
- Nimeni altcineva pe el. Build-urile pornesc în clipa în care dai push.
- Cache-uri calde. DerivedData, pachetele Swift și CocoaPods rămân pe disc, așa că build-urile incrementale sunt mult mai rapide.
- Cipuri reale. Testezi pe același Apple silicon pe care îl au utilizatorii tăi.
- O lună la preț fix. Fără facturare la minut, fără surprize la finalul unui sprint aglomerat.
MacDuty pune în rack Mac mini de la M1 la M6 în UE, cu macOS instalat și cu cheia ta SSH deja pusă.
Mai departe