Guide

Runner GitHub Actions auto-hébergé sur un Mac mini

Mettez en place un runner GitHub Actions auto-hébergé sur un Mac mini dédié. Installez Xcode, enregistrez le runner, lancez-le comme service et gardez des builds rapides et privés.

30 minutes, mis à jour le 2026-09-15

Les runners macOS hébergés par GitHub sont des machines partagées. Ils font la queue aux heures chargées, démarrent à froid à chaque fois et facturent à la minute.

Un runner auto-hébergé sur votre propre Mac mini démarre tout de suite, garde ses caches entre les builds et coûte le même prix chaque mois.

Ce guide prend environ trente minutes. Il vous faut :

  • Un Mac mini Apple silicon avec un accès SSH
  • Des droits d'administration sur le dépôt ou l'organisation GitHub
  • Un identifiant Apple, pour télécharger Xcode

1. Préparer le Mac

Connectez-vous en SSH et empêchez le Mac de se mettre en veille :

ssh
sudo pmset -a sleep 0 disksleep 0 displaysleep 0

Installez Homebrew :

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

Nous recommandons un utilisateur dédié au runner, pour que les builds ne tournent jamais sous votre compte administrateur :

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

Connectez-vous avec cet utilisateur pour les étapes suivantes.

2. Installer Xcode

Le plus simple en SSH, c'est `xcodes` :

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

Acceptez la licence et terminez le premier lancement :

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

3. Enregistrer le runner

Dans GitHub, ouvrez votre dépôt, puis Settings, Actions, Runners, New self-hosted runner. Choisissez macOS et ARM64.

GitHub affiche les commandes exactes, avec la version actuelle et un jeton. Elles ressemblent à ceci :

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>

Le jeton expire au bout d'une heure, alors enregistrez le runner tout de suite. Quand `config.sh` demande des labels, ajoutez ceux que vous utiliserez dans vos workflows, comme `xcode` ou `m4`.

4. Le lancer comme service

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.
Une fois le service lancé, voici tout le câblage.

Le runner démarre maintenant avec la session de l'utilisateur. Si vos jobs lancent des tests d'interface ou ont besoin du trousseau de session, activez l'ouverture de session automatique pour l'utilisateur du runner dans Réglages Système, Utilisateurs et groupes. Vous pouvez le faire via le Partage d'écran. L'ouverture de session automatique n'est pas disponible tant que FileVault est activé.

5. L'utiliser dans 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

Poussez un commit. Le job apparaît sous Actions et démarre sur votre Mac en quelques secondes.

6. Le garder en bon état

  • Dépôts privés uniquement. Sur un dépôt public, une pull request venant d'un fork peut exécuter du code sur votre Mac. GitHub déconseille les runners auto-hébergés sur les dépôts publics.
  • Faites le ménage de temps en temps. DerivedData et les anciens simulateurs grossissent avec le temps :
ssh
rm -rf ~/Library/Developer/Xcode/DerivedData
xcrun simctl delete unavailable
  • Signature. Gardez les certificats dans un trousseau dédié, ou utilisez fastlane match.
  • Mises à jour. Le runner se met à jour tout seul par défaut. Mettez Xcode à jour selon votre propre calendrier, pas au milieu d'une release.

Pourquoi un Mac mini dédié

  • Personne d'autre dessus. Les builds démarrent dès que vous poussez.
  • Caches chauds. DerivedData, les paquets Swift et CocoaPods restent sur le disque, donc les builds incrémentaux sont bien plus rapides.
  • De vraies puces. Testez sur le même Apple silicon que vos utilisateurs.
  • Un forfait mensuel unique. Pas de facturation à la minute, pas de surprise à la fin d'un sprint chargé.

MacDuty héberge dans ses baies, dans l'UE, des Mac mini du M1 au M6, avec macOS installé. Ajoutez votre clé SSH depuis l'espace client.

En stock aujourd'hui

Ceux-ci sont en baie maintenant. Choisissez-en un, voyez ce qu'il comprend, et créez votre compte seulement au moment de commander.

Vérification des baies

Un Mac mini à vous

Choisissez une configuration. Si elle n'est pas disponible, laissez votre e-mail et nous vous écrivons le jour où elle est en baie.

À l'année : au moins 19 % de moins qu'au mois

  • 16GB

    Mémoire unifiée, 120 GB/s

    Cœurs
    10 CPU, 10 GPU
    Stockage
    Disponible
    En stock
  • Le plus choisi
    24GB

    Mémoire unifiée, 120 GB/s

    Cœurs
    10 CPU, 10 GPU
    Stockage
    Disponible
    En stock
  • 32GB

    Mémoire unifiée, 120 GB/s

    Cœurs
    10 CPU, 10 GPU
    Stockage
    Disponible
    En stock
Visa Mastercard Virement SEPAPrix en EUR, TVA ajoutée au paiement le cas échéant. Un mois minimum, puis résiliation possible n'importe quel mois.

À suivre