Guida

Runner self-hosted di GitHub Actions su un Mac mini

Configura un runner self-hosted di GitHub Actions su un Mac mini dedicato. Installa Xcode, registra il runner, avvialo come servizio e mantieni le build veloci e private.

30 minuti, aggiornato: 2026-09-15

I runner macOS ospitati da GitHub sono macchine condivise. Fanno coda nelle ore di punta, partono a freddo ogni volta e si pagano al minuto.

Un runner self-hosted sul tuo Mac mini parte subito, conserva le cache tra una build e l'altra e costa lo stesso ogni mese.

Questa guida richiede circa trenta minuti. Ti servono:

  • Un Mac mini con Apple silicon e accesso SSH
  • Diritti di amministratore sul repository o sull'organizzazione GitHub
  • Un Apple ID, per scaricare Xcode

1. Prepara il Mac

Accedi via SSH e impedisci al Mac di andare in stop:

ssh
sudo pmset -a sleep 0 disksleep 0 displaysleep 0

Installa Homebrew:

ssh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Consigliamo un utente separato per il runner, così le build non girano mai con il tuo account amministratore:

ssh
sudo sysadminctl -addUser runner -fullName "CI Runner" -password -

Accedi con quell'utente per i passaggi seguenti.

2. Installa Xcode

Il modo più semplice via SSH è `xcodes`:

ssh
brew install xcodesorg/made/xcodes
xcodes install --latest
xcodes select

Accetta la licenza e completa il primo avvio:

ssh
sudo xcodebuild -license accept
xcodebuild -runFirstLaunch
xcodebuild -downloadPlatform iOS

3. Registra il runner

Su GitHub apri il repository, poi Settings, Actions, Runners, New self-hosted runner. Scegli macOS e ARM64.

GitHub mostra i comandi esatti, con la versione attuale e un token. Sono più o meno così:

ssh
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>

Il token scade dopo un'ora, quindi registra subito il runner. Quando `config.sh` chiede le etichette, aggiungi quelle che userai nei workflow, come `xcode` o `m4`.

4. Avvialo come servizio

ssh
./svc.sh install
./svc.sh start
./svc.sh status
GitHubYour repositoryActions queues the jobMac mini, our rackactions.runner service, launchdXcode, simulators, signing keychainIts own diskDerivedData, SwiftPM and CocoaPods caches stay warmthe runner dials out, HTTPS 443jobs and logs come back on itNothing listens on the Mac.No inbound port, no address to expose.
Con il servizio avviato, i collegamenti sono tutti qui.

Ora il runner parte con la sessione dell'utente. Se i tuoi job eseguono test di UI o hanno bisogno del portachiavi di login, attiva il login automatico per l'utente del runner in Impostazioni di Sistema, Utenti e gruppi. Puoi farlo tramite condivisione schermo. Il login automatico non è disponibile mentre FileVault è attivo.

5. Usalo in un workflow

.github/workflows/ios.yml
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' build

Fai push di un commit. Il job compare sotto Actions e parte sul tuo Mac in pochi secondi.

6. Mantienilo in salute

  • Solo repository privati. Su un repository pubblico, una pull request da un fork può eseguire codice sul tuo Mac. GitHub sconsiglia i runner self-hosted sui repository pubblici.
  • Fai pulizia ogni tanto. DerivedData e i vecchi simulatori crescono nel tempo:
ssh
rm -rf ~/Library/Developer/Xcode/DerivedData
xcrun simctl delete unavailable
  • Firma. Tieni i certificati in un portachiavi dedicato, oppure usa fastlane match.
  • Aggiornamenti. Il runner si aggiorna da solo per impostazione predefinita. Aggiorna Xcode secondo i tuoi tempi, non nel mezzo di una release.

Perché un Mac mini dedicato

  • Nessun altro sopra. Le build partono nel momento in cui fai push.
  • Cache già calde. DerivedData, pacchetti Swift e CocoaPods restano su disco, quindi le build incrementali sono molto più veloci.
  • Chip reali. Testa sullo stesso Apple silicon dei tuoi utenti.
  • Un mese a prezzo fisso. Nessuna fatturazione al minuto, nessuna sorpresa alla fine di uno sprint intenso.

MacDuty ospita nei suoi rack nell'UE Mac mini da M1 a M6, con macOS installato. Aggiungi la tua chiave SSH dall'area clienti.

Disponibili oggi

Questi sono già nel rack. Scegline uno, guarda cosa include e crea l'account solo quando ordini.

Controllo dei rack in corso

Un Mac mini tutto tuo

Scegli una configurazione. Se non è disponibile, lasciaci la tua email e ti scriviamo il giorno in cui è nel rack.

Annuale: almeno 19% in meno rispetto al pagamento mensile

  • 16GB

    Memoria unificata, 120 GB/s

    Core
    10 CPU, 10 GPU
    Archiviazione
    Disponibile
    Disponibile
  • Il più scelto
    24GB

    Memoria unificata, 120 GB/s

    Core
    10 CPU, 10 GPU
    Archiviazione
    Disponibile
    Disponibile
  • 32GB

    Memoria unificata, 120 GB/s

    Core
    10 CPU, 10 GPU
    Archiviazione
    Disponibile
    Disponibile
Visa Mastercard Bonifico SEPAPrezzi in EUR, IVA aggiunta al pagamento dove si applica. Minimo un mese, poi disdici in qualsiasi mese.

Avanti