DevOps

Self-Hosted macOS GitHub Actions Runner Setup

Guide on setting up a Mac mini as a self-hosted GitHub Actions runner for macOS 15.

February 23, 2026
6 min read
By ClawList Team

Breathing New Life Into Old Hardware: Setting Up a Self-Hosted macOS 15 GitHub Actions Runner on Mac Mini

Published on ClawList.io | DevOps & AI Automation


If you have a Mac mini collecting dust on a shelf, you're sitting on a surprisingly powerful CI/CD asset. Developer @tualatrix recently shared a clever solution: repurposing an idle Mac mini as a self-hosted macOS 15 GitHub Actions runner — and it's a move that more developers should be making.

In this guide, we'll walk through exactly why this setup matters, how to get it running, and the real-world use cases where a self-hosted macOS runner genuinely outperforms GitHub's shared infrastructure.


Why Bother With a Self-Hosted macOS Runner?

GitHub's hosted macOS runners are convenient, but they come with real limitations — especially if you're building for Apple platforms or running AI automation pipelines that need persistent state.

Here's what you gain by going self-hosted:

  • Zero per-minute billing — GitHub charges a premium for hosted macOS runners. A self-hosted runner costs you nothing beyond electricity and the hardware you already own.
  • macOS 15 (Sequoia) support — At the time of writing, GitHub's hosted fleet lags behind the latest Apple releases. Self-hosting means you control the OS version.
  • Persistent environment — Your dependencies, caches, simulators, and toolchains stay installed between runs. No more reinstalling Xcode or Homebrew packages from scratch every job.
  • Access to local hardware — Need to test on a real Apple Silicon chip? Connect to local network services? Access USB-attached devices? Only a self-hosted runner can do this.
  • Ideal for AI automation workloads — If you're building OpenClaw skills or AI agents that require local model inference, a dedicated Mac mini runner is a game-changer.

For indie developers, small teams, and AI engineers experimenting with on-device workflows, the economics are obvious: why pay for what you already own?


Step-by-Step: Setting Up Your Mac Mini as a GitHub Actions Runner on macOS 15

Getting your Mac mini registered as a self-hosted runner is straightforward. Here's a clean, production-ready walkthrough.

1. Prepare Your Mac Mini

Make sure your Mac mini is running macOS 15 Sequoia and has the following installed:

# Install Homebrew if not already present
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install common CI dependencies
brew install git node [email protected] jq

Enable automatic login and disable sleep so the runner stays available:

# Prevent sleep (run as admin)
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a displaysleep 0

2. Register the Runner With Your GitHub Repository

Navigate to your GitHub repository → SettingsActionsRunnersNew self-hosted runner.

Select macOS and ARM64 (for Apple Silicon) or X64 (for Intel Mac mini).

GitHub will generate a unique registration token. Use the commands it provides — they'll look something like this:

# Create a dedicated directory for the runner
mkdir ~/actions-runner && cd ~/actions-runner

# Download the latest runner package
curl -o actions-runner-osx-arm64.tar.gz -L \
  https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-osx-arm64-2.317.0.tar.gz

# Extract the package
tar xzf ./actions-runner-osx-arm64.tar.gz

# Configure the runner (replace TOKEN and REPO_URL with your values)
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO \
            --token YOUR_REGISTRATION_TOKEN \
            --name "mac-mini-m2" \
            --labels "macos-15,apple-silicon,self-hosted"

Labels are your best friend here. Tag your runner with meaningful labels like macos-15 or apple-silicon so your workflow YAML can target it precisely.

3. Run the Runner as a Persistent Background Service

Don't just run the runner interactively — install it as a launchd service so it starts automatically on boot:

# Install as a macOS service
./svc.sh install

# Start the service
./svc.sh start

# Check service status
./svc.sh status

Your Mac mini will now automatically reconnect to GitHub Actions after every restart, power outage, or macOS update.

4. Write a Workflow That Targets Your Runner

Here's a sample GitHub Actions workflow that specifically targets your self-hosted Mac mini runner:

name: Build and Test on macOS 15

on:
  push:
    branches: [main, develop]
  pull_request:

jobs:
  build:
    runs-on: [self-hosted, macos-15, apple-silicon]

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Xcode
        run: sudo xcode-select -s /Applications/Xcode.app

      - name: Install dependencies
        run: |
          brew bundle --file=Brewfile
          npm ci

      - name: Run tests
        run: |
          xcodebuild test \
            -scheme MyApp \
            -destination 'platform=macOS' \
            -resultBundlePath TestResults.xcresult

      - name: Upload test results
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: TestResults.xcresult

Notice the runs-on: [self-hosted, macos-15, apple-silicon] — this is what routes jobs exclusively to your Mac mini.


Real-World Use Cases: Where This Setup Shines

A self-hosted macOS 15 runner isn't just for building iOS apps. Here are some compelling use cases that the developer and AI engineering community is increasingly exploring:

macOS App Distribution Pipelines

Automate code signing, notarization, and upload to the Mac App Store — all from your own machine, with your own certificates securely stored in the local Keychain. No secrets gymnastics required in a hosted environment.

On-Device AI Model Testing

Running local LLMs or Core ML models? A self-hosted Mac mini runner lets you benchmark and validate on-device AI inference as part of your CI pipeline — something GitHub's hosted runners simply can't replicate.

OpenClaw Skill Automation

If you're building OpenClaw skills — AI-powered automation scripts that orchestrate multi-step developer workflows — a persistent self-hosted runner provides the stable, stateful environment those agents need to operate reliably. Think automated skill testing, deployment verification, and regression checks running on real Apple hardware.

Long-Running Integration Tests

Hosted runners have job time limits. Your Mac mini doesn't. For integration test suites that take 45+ minutes, self-hosting removes that ceiling entirely.

iOS Simulator Testing at Scale

Keep iOS simulators pre-booted and warmed up between runs. The first run sets everything up; every subsequent run is dramatically faster because the state persists.


Conclusion: Don't Let Good Hardware Idle

The insight from @tualatrix is deceptively simple: idle hardware is wasted potential. A Mac mini running macOS 15 as a self-hosted GitHub Actions runner transforms an underutilized machine into a 24/7 CI/CD workhorse — at zero incremental cost.

For developers working on Apple platform apps, AI engineers testing on-device inference, and automation builders crafting OpenClaw skills, this setup delivers capabilities that hosted runners fundamentally cannot match: native Apple Silicon, persistent state, local hardware access, and complete control over the macOS environment.

The setup time is under 30 minutes. The payoff is indefinite.

If you have a spare Mac mini, there's genuinely no reason not to do this.


Have you set up a self-hosted macOS runner? Share your workflow tips and use cases in the comments below, or tag us on X. For more guides on AI automation, DevOps tooling, and OpenClaw skill development, explore the full ClawList.io resource library.


Tags: github-actions self-hosted-runner macos mac-mini devops ci-cd apple-silicon xcode automation openclaw

Tags

#github-actions#ci-cd#macos#self-hosted#devops

Related Articles