Problème : vos tâches GitHub Actions exigent macOS, mais votre Mac de voyage n’est pas toujours disponible.
Réponse rapide : si le projet dépend réellement d’outils macOS et que la machine peut rester accessible, inscrivez un Mac distant comme runner auto-hébergé, activez son service, puis validez le flux dans un dépôt contrôlé avant d’y envoyer des tâches régulières. GitHub documente trois périmètres d’inscription — dépôt, organisation et entreprise — dans son guide d’ajout des runners.
Ce guide s’adresse aux développeurs iOS ou macOS indépendants qui veulent exécuter leurs tâches GitHub Actions sur un Mac.
Il concerne aussi les freelances qui maintiennent des projets clients et les petites équipes à distance qui doivent définir les responsabilités de maintenance et les permissions du dépôt.
Si vos tâches ne dépendent pas de macOS, une machine Linux ou un runner hébergé peut suffire : ce tutoriel n’est alors pas la première étape à suivre.
Décider si un runner macOS auto-hébergé est nécessaire
Un runner Mac auto-hébergé sert à exécuter des tâches qui ont besoin d’un environnement macOS ou de logiciels disponibles sur Mac. Il peut s’agir, par exemple, de compiler une application Apple, de signer un livrable ou de vérifier un projet dans les outils employés par l’équipe. Pour un traitement indépendant du système, le simple fait d’utiliser GitHub Actions ne justifie pas l’ajout d’un Mac.
La différence de gestion est importante. Avec un runner hébergé par GitHub, l’infrastructure est fournie par GitHub selon les options disponibles pour le dépôt. Avec un runner auto-hébergé, l’équipe apporte et administre la machine, son système, ses logiciels et sa disponibilité. GitHub décrit ces responsabilités dans sa présentation des runners auto-hébergés. L’inscription ne transforme donc pas le Mac en service entièrement administré par GitHub.
| Option | À choisir lorsque… | Responsabilités à prévoir | Limite à vérifier |
|---|---|---|---|
| Runner hébergé par GitHub | L’environnement proposé convient au projet et vous ne souhaitez pas administrer une machine. | Définir le flux, ses dépendances et ses permissions. | L’environnement disponible peut ne pas correspondre à un outil ou à une configuration précise du projet. |
| Mac auto-hébergé limité à un dépôt | Une tâche exige macOS et doit s’exécuter sur une machine que vous contrôlez. | Maintenir le Mac, les logiciels, le service, le réseau et les accès du dépôt. | Le runner n’est disponible que si l’hôte et son service fonctionnent ; le code exécuté doit être digne de confiance. |
| Runner auto-hébergé partagé à l’échelle d’une organisation | Plusieurs projets autorisés doivent utiliser une même infrastructure administrée par l’équipe. | Gérer le périmètre de partage, les permissions des dépôts et les conséquences d’une tâche sur l’hôte partagé. | Une erreur de configuration ou un accès trop large peut affecter plusieurs projets. |
Choisissez un runner auto-hébergé seulement si la dépendance à macOS est réelle et si une personne peut maintenir la machine. Préférez un runner hébergé lorsque l’environnement proposé suffit et que vous ne voulez pas surveiller un Mac. Si les tâches sont portables, ne leur attribuez pas un runner Mac par défaut.
Les coûts ne se limitent pas à la location ou à l’achat du matériel. Il faut aussi prévoir le maintien des dépendances, les mises à jour du système, la gestion des accès, les interruptions réseau et le diagnostic lorsque le runner ne prend plus de tâche. En déplacement, une machine qui dort, perd sa connexion ou attend une intervention manuelle ne constitue pas un environnement de compilation fiable. L’auto-hébergement déplace une partie du travail d’exploitation vers l’équipe ; il ne le fait pas disparaître.
Étape de préparation : définissez le périmètre et les accès
Avant d’ouvrir les réglages GitHub, choisissez si le runner doit servir un dépôt ou plusieurs projets de la même organisation. Une inscription à l’échelle de l’organisation peut faciliter le partage entre dépôts autorisés, mais elle élargit aussi la portée de l’administration et exige des règles de permission cohérentes. Un runner limité à un dépôt réduit cette portée, ce qui est souvent préférable pour une première validation.
Les trois périmètres documentés — dépôt, organisation et entreprise — n’ont pas les mêmes responsables ni le même rayon d’action. Vérifiez que le compte utilisé peut administrer le périmètre retenu. Si ce n’est pas le cas, demandez l’accès approprié plutôt que de contourner les permissions. Les instructions d’inscription affichées dans l’interface doivent correspondre au périmètre choisi.
Préparez ensuite la machine et le projet :
- Confirmez que le Mac est accessible à la personne chargée de l’administration et que le réseau permet au runner de communiquer avec GitHub.
- Choisissez un compte macOS dédié aux tâches d’automatisation lorsque l’organisation le permet. Limitez les fichiers et les identifiants accessibles à ce compte.
- Préparez un répertoire de travail distinct des documents personnels. N’y placez pas de secrets de longue durée sans nécessité.
- Recensez les dépendances nécessaires au projet : outils de compilation, gestionnaires de paquets, certificats ou logiciels de conception et de traitement audio ou vidéo utilisés dans le flux.
- Vérifiez l’architecture du Mac avant de sélectionner l’option correspondante dans GitHub. La documentation distingue les architectures x64 et ARM64 pour les runners macOS ; l’instruction proposée à l’inscription doit correspondre à la machine et à ses dépendances. Consultez les exigences système des runners auto-hébergés avant de poursuivre.
Un Mac qui compile un projet dans une session interactive n’est pas automatiquement prêt pour l’automatisation. Le service peut démarrer dans un contexte différent du terminal habituel : variables d’environnement, accès au trousseau, chemins des outils et disponibilité d’une session graphique doivent être vérifiés avec le flux réel. Pour les tâches de conception, de rendu ou de traitement de médias, testez également les outils concernés au lieu de déduire leur bon fonctionnement de la seule présence du runner.
Étape d’inscription : récupérez les instructions depuis GitHub
Dans les réglages du dépôt ou de l’organisation, ouvrez la section consacrée aux actions et aux runners, puis choisissez l’ajout d’un runner auto-hébergé. Sélectionnez macOS et l’architecture appropriée. GitHub affiche alors les instructions de téléchargement, de configuration et d’enregistrement qui correspondent au périmètre sélectionné. Suivez ces instructions au moment du déploiement : les commandes affichées dans l’interface sont la référence, et il ne faut pas reprendre des commandes copiées depuis un ancien tutoriel sans les comparer à l’écran actuel.
L’enregistrement s’appuie sur un jeton temporaire généré par le processus officiel. Traitez-le comme un secret : ne le publiez pas, ne l’ajoutez pas à un fichier du dépôt et ne le transmettez pas dans un journal partagé. Si le jeton expire ou si l’enregistrement échoue, revenez aux réglages GitHub pour obtenir une procédure valide plutôt que de chercher à réutiliser un jeton exposé.
Une fois la configuration terminée, vérifiez dans la page des runners que la machine apparaît dans le bon périmètre et avec le bon état. Cette première apparition confirme l’inscription, pas le bon fonctionnement continu. La disponibilité du runner dépend ensuite du processus de l’application, du réseau, du Mac et de sa configuration de démarrage.
Les étiquettes permettent aux tâches de cibler une machine compatible. GitHub indique que les étiquettes par défaut identifient notamment le runner auto-hébergé, le système d’exploitation et l’architecture. Consultez la référence sur l’application des étiquettes et utilisez les valeurs réellement affichées pour le runner enregistré ; ne présumez pas que des étiquettes personnalisées sont présentes.
Le runner Mac reçoit-il des tâches après la fermeture du terminal ?
Un runner lancé au premier plan dans un terminal convient à un essai ponctuel. Il dépend de la session et du processus qui l’exécute. Si le terminal est fermé ou si la session s’interrompt, ne comptez pas sur cette méthode pour recevoir les tâches suivantes.
Pour un fonctionnement persistant sur macOS, configurez l’application comme service en suivant la procédure officielle de configuration du service macOS. Les commandes exactes et le contexte d’installation sont ceux générés pour le runner concerné. La procédure documentée décrit l’installation, le démarrage et la vérification du service. Ne copiez pas une commande supposée universelle si le script ou les instructions de votre installation diffèrent.
Les deux modes ne répondent pas au même besoin :
- Exécution au premier plan : utile pour examiner le démarrage et diagnostiquer un premier essai ; elle dépend de la session et ne prouve pas que le runner survivra à sa fermeture.
- Service macOS : adapté à une machine destinée à rester disponible ; il faut toutefois confirmer son démarrage, son état et son comportement après redémarrage du Mac.
- Lancement manuel après chaque intervention : acceptable pour un usage occasionnel surveillé ; insuffisant si les tâches attendues doivent être prises sans présence humaine.
La réponse dépend donc de la configuration : fermer le terminal n’empêche pas nécessairement le runner de prendre des tâches si le service a été correctement installé et reste actif. Un processus simplement lancé dans ce terminal ne devient pas un service parce qu’il a réussi une première tâche.
Attention : un Mac configuré comme service peut être joignable mais indisponible pour des raisons distinctes — service arrêté, réseau interrompu, mise à jour en attente ou outil requis absent. Vérifiez l’état à la fois sur le Mac et dans la page GitHub du runner.
Après l’installation, redémarrez le Mac dans une fenêtre de maintenance. Vérifiez ensuite que le service s’est relancé, que le runner est en ligne dans GitHub et qu’il accepte une nouvelle tâche. La configuration de démarrage n’est validée que si cette chaîne fonctionne après le redémarrage, pas seulement après l’installation initiale. Pour examiner les journaux et les états en cas d’échec, suivez les indications de surveillance et dépannage des runners.
Étape de validation : ciblez les bonnes étiquettes et testez le flux
Le fichier de workflow doit demander des étiquettes présentes sur le runner enregistré. Pour illustrer la forme générale, un travail peut cibler les étiquettes de système et d’architecture suivantes :
jobs:
verification-mac:
runs-on: [self-hosted, macOS, ARM64]
steps:
- uses: actions/checkout@v4
- name: Vérifier l’environnement
run: |
uname -a
sw_vers
Cet extrait est un exemple de ciblage, pas la garantie que ces étiquettes correspondent à votre machine. Remplacez ARM64 par l’étiquette affichée pour le runner, si nécessaire, et contrôlez la casse et les noms dans les réglages. La référence GitHub sur les étiquettes explique leur rôle dans la sélection ; utilisez les valeurs reconnues et attribuées au runner.
Pour la première acceptation, gardez un test simple et réversible. Il doit permettre de vérifier que le travail est distribué à la bonne machine, que ses journaux sont visibles et que son résultat peut être récupéré. Une fois ce test réussi, exécutez le scénario réellement utile au projet : compilation macOS, contrôle d’une application, signature si elle fait partie du processus, ou génération d’un livrable créatif. Un test système réussi ne prouve pas que toutes les dépendances, tous les certificats ni toutes les étapes graphiques fonctionneront.
Procédez dans cet ordre :
- Lancez un travail sans opération destructive ni secret sensible.
- Confirmez dans les journaux l’identification attendue du système et de l’architecture.
- Vérifiez que le travail sélectionne le runner prévu et ne reste pas en attente d’une étiquette inexistante.
- Contrôlez le résultat produit et les journaux disponibles pour l’équipe.
- Lancez le flux réel dans un dépôt contrôlé, puis corrigez les dépendances ou permissions manquantes avant d’élargir l’usage.
Cet ordre aide à séparer les causes d’échec. Une tâche en attente suggère d’abord un problème de disponibilité ou d’étiquettes ; une tâche lancée mais échouée demande plutôt d’examiner les dépendances, le contexte du compte macOS ou le script du projet. GitHub ne garantit pas qu’un flux validé sur une configuration soit compatible avec toutes les autres : la validation porte sur le projet, le runner et les versions réellement testés. Consignez les conditions qui ont permis la réussite afin que les changements ultérieurs du système ou du projet puissent être diagnostiqués au lieu d’être attribués au hasard à la connexion distante.
Étape de sécurité et de maintenance : protégez l’hôte et les secrets
Un runner auto-hébergé exécute les tâches demandées par les workflows autorisés. La machine peut conserver des fichiers, des dépendances ou d’autres traces après une tâche. Elle doit donc être traitée comme un hôte d’exécution, et non comme un simple terminal temporaire. GitHub souligne que l’utilisateur reste responsable de la sécurité et de la maintenance de cet environnement dans sa documentation sur l’utilisation sécurisée de GitHub Actions.
Un Mac persistant peut-il exécuter les demandes externes d’un dépôt public ?
Ne dirigez pas automatiquement les demandes de modification provenant de l’extérieur vers un Mac qui contient des certificats, des clés ou des données de travail. Un flux qui exécute du code non fiable sur une machine persistante peut exposer les fichiers disponibles à ce code, notamment si des identifiants ou des secrets sont accessibles au compte du runner. La visibilité publique du dépôt n’est pas une protection en soi.
Avant d’autoriser ces tâches, vérifiez qui peut modifier les workflows, quelles contributions peuvent les déclencher, quels secrets leur sont accessibles et si l’environnement peut être isolé ou réinitialisé. Si vous ne pouvez pas distinguer les travaux fiables des travaux non fiables, refusez leur exécution sur le runner persistant et utilisez un environnement mieux adapté au niveau de risque. Une tâche d’intégration réussie ne valide pas la sécurité des autres déclencheurs du dépôt.
Prévoyez également une routine de maintenance : surveillez l’état du runner dans GitHub, installez les mises à jour nécessaires, contrôlez les outils du projet et retirez les accès qui ne sont plus utiles. En déplacement, convenez à l’avance de la personne qui peut intervenir si le Mac redémarre sans reprendre le service. Une machine distante accessible depuis plusieurs lieux reste dépendante de son alimentation, de sa connexion et de sa maintenance.
Pour les équipes qui hésitent encore sur la répartition des responsabilités, notre comparatif des solutions Mac à distance peut aider à examiner les critères d’accès et d’usage sans confondre la location d’un Mac avec l’administration du runner. Si la localisation de l’infrastructure compte pour votre organisation, consultez aussi les informations sur les centres de données disponibles et vérifiez leur adéquation avec vos exigences avant de choisir.
Un Mac local peut convenir si une personne le garde allumé, le maintient et peut intervenir ; il impose toutefois de transporter ou de laisser sur place le matériel, de gérer son accès à distance et d’assumer les conséquences d’une panne ou d’une perte. Pour une équipe en déplacement, un Mac distant peut éviter de faire dépendre les tâches d’un ordinateur de voyage, mais il ne dispense ni de configurer le runner ni de protéger les secrets. Si le flux est déjà validé et que vous souhaitez comparer cette option à votre installation actuelle, examinez les conditions réelles d’accès, de permissions, de redémarrage et de durée d’utilisation auprès de OnceMac. Si votre charge est permanente, lourde ou exige une interface physique particulière, conserver ou acheter un Mac dédié peut rester plus approprié qu’une location.
Hébergez votre runner macOS sur un Mac dédié
Avec OnceMac, chaque commande vous donne accès à un Mac mini physique dont le calcul, la mémoire et le stockage local ne sont pas partagés avec d’autres clients.
