Registre seu runner em 10 minutos
Sua máquina da MacRun é um runner auto-hospedado padrão do GitHub Actions. Mantenha seu pipeline e mude duas linhas de YAML.
Conecte à sua máquina
Sua máquina fica em uma rede privada do Tailscale, e não na internet pública. Não existe porta SSH aberta para alguém achar nem nada para blindar. Para entrar você precisa de duas coisas, uma vez só.
Instale o Tailscale em tailscale.com/download e entre na sua conta. É grátis para uso pessoal e para os tamanhos de conta que a maioria das equipes precisa aqui. Funciona no macOS, Linux e Windows. Depois aceite o convite que enviamos quando sua máquina fica pronta. Ele dá acesso a essa máquina e a nada mais da nossa rede.
Seu portal mostra o comando exato, com o endereço da sua máquina já preenchido:
ssh runner@100.x.x.x
Não há senha nem chave para gerenciar: o Tailscale cuida da autenticação. Se sua conta do Tailscale usa um email diferente do email de cobrança, peça no seu portal um compartilhamento para ele.
Seus jobs de CI não precisam do Tailscale. O GitHub Actions chega ao runner pela conexão de saída do próprio GitHub. Isto é só para quando você quiser um shell na máquina.
Abra a tela, quando precisar
O SSH cobre o CI. Para quando um log não basta, você chega à mesma máquina com Compartilhamento de Tela pela mesma rede privada. Assim o Instruments, o Simulador e a interface do Xcode funcionam como no seu computador. Seu portal mostra o endereço, o usuário runner e uma senha exclusiva da sua locação.
Em um Mac, abra o Finder e depois Ir → Conectar ao Servidor (⌘K):
vnc://100.x.x.x
No Windows, instale o RealVNC Viewer ou o TightVNC e conecte a 100.x.x.x:5900. No Linux, Remmina e TigerVNC funcionam, com o mesmo endereço. Se seu cliente pedir só uma senha, deixe o usuário em branco.
Copiar e colar. Os visualizadores de Windows e Linux não conseguem compartilhar a área de transferência com o Mac, porque o Compartilhamento de Tela do macOS ignora a deles. O app Compartilhamento de Tela da Apple em um Mac compartilha. No Windows, passe o texto por SSH. Cole estas linhas no PowerShell:
# Once per window: send and read text as UTF-8 $OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::new($false) # Mac to PC ssh runner@100.x.x.x "LANG=en_US.UTF-8 pbpaste" | Set-Clipboard # PC to Mac Get-Clipboard -Raw | ssh runner@100.x.x.x "LANG=en_US.UTF-8 pbcopy"
A primeira linha faz o PowerShell enviar e ler UTF-8. Assim acentos e outros idiomas chegam certinhos. Ou use nosso pequeno script macrun-clip.ps1. Rode com push, pull ou sync e o seu endereço. O sync copia as mudanças nos dois sentidos até você apertar Ctrl+C. Ele só passa texto. No Linux, passe os mesmos comandos ssh pelo xclip ou wl-copy.
É isso que a maioria dos serviços de CI não consegue fazer. Um runner hospedado te dá logs e mais nada. Um crash que só aparece no Instruments é um crash que você não consegue investigar.
Pegue um token de registro no GitHub
No seu repositório (ou organização) vá em Settings → Actions → Runners → New runner. O GitHub mostra um token de uso único. Você vai colar ele no comando abaixo. Runners de organização são compartilhados por todos os repositórios da organização.
Registre o runner na sua máquina
Entre por SSH como acima e rode o comando de configuração do seu portal (ele já traz o label da sua unidade):
cd ~/actions-runner ./config.sh --url https://github.com/YOUR-ORG/YOUR-REPO \ --token <RUNNER_TOKEN> \ --labels self-hosted,macOS,macrun-unit-01 \ --unattended # start it as a service (survives reboots) ./svc.sh install && ./svc.sh start
O daemon runner-agent mantém este serviço vivo automaticamente. Se ele cair, é reiniciado em até 30 segundos.
Mude duas linhas de YAML
Aponte seu workflow para o runner. O diff é só isto:
jobs: build: - runs-on: macos-latest + runs-on: [self-hosted, macOS, macrun-unit-01]
Todo o resto do seu pipeline continua exatamente igual.
Versões do Xcode
Versões recentes do Xcode vêm pré-instaladas em /Applications. Para escolher uma em um job, defina DEVELOPER_DIR. Não precisa de sudo. Você também pode pedir uma versão nova pelo seu portal (normalmente no mesmo dia):
jobs:
build:
env:
DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer
steps:
- run: ls -d /Applications/Xcode*.app # installed versions
- run: xcodebuild -versionOs caches já estão quentes
Como a máquina é sua, os caches ficam no disco local entre execuções. Você não paga o pedágio de baixar tudo de novo. Caminhos comuns:
~/Library/Developer/Xcode/DerivedData # build cache ~/Library/Caches/CocoaPods # pods ~/.gradle ~/.npm ~/.gem # toolchain caches ~/Library/Caches/org.swift.swiftpm # SwiftPM
Você ainda pode usar actions/cache se quiser chaves de restauração determinísticas. Mas na maioria dos builds de iOS, o que faz diferença é o disco local quente.
Gerencie sua máquina
Reinicie, peça versões do Xcode e gerencie a cobrança pelo seu portal. Precisa de outra coisa? Responda qualquer email da MacRun e uma pessoa te responde.