GitHub’s February 5, 2026 changelog still describes Runner Scale Set support for custom infrastructure, including macOS, as a Public Preview (GitHub’s public preview announcement).
Symptom: your Mac CI queue grows during release peaks, but replacing every fixed Mac with an elastic pool would weaken signing control and recovery.
Fastest fix: pilot GitHub Actions Runner Scale Set Client for disposable, rebuildable jobs while keeping a warm or dedicated Mac pool for production signing and low-latency workflows.
This article is for you if you manage several GitHub Actions Mac runners, release-time queue spikes, or a budget decision between owned Macs, remote Mac capacity, and a mixed pool. It also targets security owners who need evidence that one-time runners actually remove workspaces, caches, and credentials after a job.
Last updated September 20, 2026. Status and behavior were checked against the GitHub Changelog, the self-hosted runner reference, the official actions/scaleset repository, and GitHub’s security guidance.
SECTION 01The decision in one page: fixed pool, elastic pool, or both?
GitHub Actions Runner Scale Set Client is worth a controlled pilot when your team can provision, initialize, clean, and destroy real Mac hosts through its own automation. It is not a replacement for that automation. The client connects the infrastructure to the Scale Set control plane; it does not make a physical or virtual Mac appear, install your toolchain, erase the host, or prove that signing credentials are gone.
Use this first-pass matrix before you allocate engineering time:
| Operating condition | Fixed Mac pool | Elastic Scale Set pool | Hybrid pool |
|---|---|---|---|
| Stable daily workload | Strong fit | Usually unnecessary | Optional |
| Large or irregular PR bursts | May create idle capacity | Strong fit if provisioning is reliable | Strong fit |
| Production signing | Preferred | Avoid by default | Dedicated signing tier |
| Disposable PR validation | Possible, but less isolated | Strong fit | Strong fit |
| No Mac provisioning automation | Only realistic option | Reject for now | Reject elastic part |
| Strict cleanup evidence required | Depends on host process | Requires host destruction or verified reset | Use elastic nodes for rebuildable work |
| Very low job startup tolerance | Strong fit | Risky without warm capacity | Warm fixed nodes plus elastic overflow |
| Small platform team | Lower control-plane complexity | Higher operational burden | Start fixed, then pilot narrowly |
Choose a fixed pool if you need predictable startup and the workload is steady. Choose an elastic pool if capacity is expensive to keep idle and your team can rebuild a Mac consistently. Choose a hybrid pool when signing, release archives, or critical regression jobs need stronger continuity than disposable infrastructure can provide.
The first rejection condition is not the number of developers. It is the absence of a trustworthy host lifecycle.
SECTION 02The client’s actual control boundary
The architecture has several distinct objects. Treating them as one “runner” creates incorrect security and cost assumptions.
- Scale Set API: the GitHub control-plane interface that reports demand and coordinates runner capacity.
- Scale Set Client: the component that communicates with the Scale Set service and manages runner-side participation.
- Runner process: the process that receives and executes a job.
- macOS host: the actual Mac that your automation must supply and operate.
- Workspace: source files, build output, dependency caches, logs, and temporary artifacts.
- Signing identity: certificates, provisioning profiles, Keychain state, and any credentials used to produce a trusted release.
The official actions/scaleset README describes the client-side scaling model. It does not turn Mac provisioning into a native GitHub capability. Your side still owns host creation, OS readiness, toolchain installation, network access, cleanup, and destruction.
Can Runner Scale Set Client automatically create a Mac build machine?
No. It can participate in the signal and registration path, but the Mac supply chain remains your responsibility. Your implementation must decide how to obtain an Apple Silicon or Intel Mac, assign it to the correct runner group, initialize macOS, install the approved Xcode toolchain, register the runner, and remove the node after the job.
This distinction matters for remote Mac capacity. A service such as MACNOX’s remote Mac access can provide a reachable Mac environment for a pilot or fallback path, but you still need to validate how that environment fits your own provisioning, logging, access, and destruction controls. Do not describe a rented Mac as an automatically generated ephemeral node unless your test evidence proves the complete lifecycle.
Does an elastic Mac Runner require Kubernetes?
No. Kubernetes is not the decision boundary. The required capability is an automation layer that can provision and manage Mac hosts and expose their state to the Scale Set workflow. That layer could be based on dedicated hardware, a remote Mac provider, an internal scheduler, or another approved infrastructure system.
Kubernetes may help coordinate parts of a larger platform, but it does not solve Mac-specific problems such as system unlock, Xcode initialization, Keychain cleanup, physical capacity, or signing identity protection. Adding Kubernetes without a reliable Mac lifecycle increases control-plane complexity without proving that a runner is clean.
SECTION 03Metric 1: elasticity and queue behavior
Do not convert every scale event into one new Mac. The useful capacity model separates demand from supply:
- TotalAssignedJobs: jobs assigned to the Scale Set or its runners.
- Running jobs: work already consuming runner capacity.
- Waiting jobs: demand not yet attached to an available runner.
- Provisionable Macs: hosts your automation can make ready within the required window.
- Ready Macs: hosts that are fully initialized and able to accept a job.
A simple operational view is:
required ready capacity = running jobs + acceptable waiting demand
That is not a sizing formula. It is a measurement rule. You need queue records, job arrival distribution, host startup records, and failure history before deciding how much capacity to keep warm.
The official Scale Set documentation should be used to validate how the client receives and handles scaling information. Your own records must answer whether a new Mac becomes job-ready before the queue peak has passed.
Step 1: record the demand signal before changing capacity
For each repository and workflow class, record:
- Job arrival time.
- Time the job enters the waiting state.
- Time a runner accepts it.
- Job execution duration.
- Runner provisioning state at assignment.
- Whether the job was retried or reassigned.
- Whether the workload can run on a disposable host.
Use separate buckets for PR validation, simulator regression, archive builds, and production signing. A single blended queue hides the fact that a short PR job and a sensitive release job have different capacity and trust requirements.
Step 2: compare cold start with warm capacity
A fully on-demand pool minimizes idle Macs but adds every provisioning phase to the first job. A warm pool spends capacity before demand arrives but can absorb a burst immediately. A fixed pool gives the clearest recovery path but may leave expensive hardware unused.
The official self-hosted runner monitoring and troubleshooting guidance can help structure runner health evidence, but it cannot supply your Mac host initialization duration.
Typical policy choices are:
- Fully on demand: suitable only when queue delay is acceptable and rebuild automation is mature.
- Minimum warm capacity: suitable when demand is bursty but not fully unpredictable.
- Fixed baseline plus elastic overflow: suitable when signing and release traffic need continuity but PR demand is variable.
The benefit is real only if the reduction in waiting time exceeds the delay and failure rate introduced by host delivery.
SECTION 04Metric 2: JIT isolation and residual state
A JIT Runner can limit runner registration lifetime, but a one-time runner is not automatically a clean Mac. You must separate four lifecycles:
- Runner registration and deregistration.
- macOS host creation and destruction.
- Workspace creation and deletion.
- Keychain, signing certificate, and credential creation and revocation.
GitHub’s secure use guidance provides the security baseline for untrusted workflow content. It does not prove that your Mac host has been erased after a job.
Can a JIT Runner isolate the Xcode workspace and signing credentials?
It can reduce the registration window and support a disposable execution pattern, but it cannot by itself guarantee that the workspace and Keychain are gone. A reused Mac may retain source files, DerivedData, package caches, simulator data, shell history, logs, SSH material, or signing credentials even after the runner process exits.
For that reason, production signing should not share an elastic execution environment with untrusted branches by default. A safer division is:
- PR validation on disposable Apple Silicon capacity.
- Simulator regression on disposable or tightly reset capacity.
- Archive builds on a controlled pool with restricted repository access.
- Production signing on dedicated Macs or a separately governed trusted pool.
Validate cleanup with evidence, not a successful deregistration event. Your acceptance record should show workspace deletion, cache policy, Keychain state, credential revocation, host destruction or verified reset, and the destination of diagnostic logs.
Use Runner group access controls to restrict which repositories can target each pool. A runner label is not a security boundary. Repository permissions, workflow review, token scope, network egress, and signing identity policy must agree.
SECTION 05Metric 3: startup latency and environment delivery
Break “startup time” into observable stages:
| Stage | What to measure | Decision consequence |
|---|---|---|
| Host available | Mac is reachable through the approved management path | Slow supply makes on-demand scaling unreliable |
| System ready | macOS is booted, unlocked, and policy-compliant | Login or unlock dependencies can block automation |
| Toolchain ready | Xcode, SDKs, simulators, package managers, and certificates are usable | Repeated downloads can dominate short jobs |
| Runner registered | Runner is visible in the intended group and has correct labels | Wrong scope can cause queueing or unsafe placement |
| First job accepted | The workflow actually starts on the node | Only this point represents usable CI capacity |
Measure these stages separately for a cold node and a warm node. Do not publish a precise startup claim unless it comes from enterprise records, an authoritative source, or a clearly labeled MACNOX test. The task’s available evidence does not provide a MACNOX initialization or recovery measurement, so no vendor-specific performance figure should be invented here.
Step 3: make the environment reproducible
A rebuildable Mac needs a declared environment contract. Record the macOS version, Xcode version, SDK requirements, package sources, simulator images, runner labels, network routes, certificates, and required secrets. Store the contract outside the node so that the host can be discarded without losing the ability to recreate it.
Avoid treating a large cache as proof of readiness. Caches can reduce repeated downloads, but they also carry source and dependency residue. Decide which caches are safe to share, which must be scoped by repository or branch, and which must be destroyed with the node.
SECTION 06Metric 4: control-plane recovery and operational evidence
An elastic pool needs more than a healthy client process. Test the failure paths that affect delivery:
- The Scale Set Client crashes after the host is ready.
- The Mac is unreachable after runner registration.
- Provisioning succeeds but Xcode initialization fails.
- A job is assigned while the node loses network access.
- The client receives a duplicate or delayed message.
- A runner exits without a clean deregistration.
- The host is destroyed before diagnostics are exported.
Use the official authentication guidance to limit GitHub App or token permissions to the required scope. Use the self-hosted runner REST API reference to verify inventory and lifecycle state, but do not treat an API record as proof that the underlying Mac has been wiped.
Before destruction, copy client diagnostics, provisioning events, runner registration records, job identifiers, and cleanup results to external storage. If logs remain only on the temporary Mac, the most useful evidence disappears with the failure.
Define a fallback route before the pilot starts. A failed elastic node should return work to a fixed pool, a backup remote Mac, or an explicit retry queue. “The client restarted” is not a recovery objective; “the job reached an approved replacement node without exposing signing material” is.
SECTION 07Metric 5: TCO and mixed-pool allocation
Do not compare a monthly Mac price with a hardware purchase price and call the result TCO. Model the following variables:
TCO = capacity cost + provisioning engineering + maintenance + observability + storage and network + security controls + idle capacity + failure loss
For a fixed pool, include purchase or lease cost, replacement planning, power or colocation, patching, local administration, unused capacity, and hardware failure. For an elastic pool, include per-period Mac access, orchestration, image or environment maintenance, warm capacity, logs, retries, cleanup verification, and the cost of a failed release window.
| Cost or risk factor | Fixed Mac pool | Elastic Mac pool | Hybrid recommendation |
|---|---|---|---|
| Baseline capacity | Paid continuously | Lower if demand is irregular | Keep only trusted baseline capacity |
| Peak demand | Queue grows unless oversized | Better if supply automation keeps up | Use elastic overflow |
| Environment drift | Accumulates on reused hosts | Reduced only if hosts are rebuilt | Rebuild elastic nodes; patch fixed nodes |
| Signing operations | Easier to dedicate | Higher exposure if misclassified | Keep dedicated signing tier |
| Engineering effort | Lower platform complexity | Higher automation and observability cost | Limit elasticity to clear workloads |
| Failure recovery | Known node replacement path | Requires supply and fallback design | Route critical jobs to fixed nodes |
| Cost evidence | Asset and maintenance records | Usage, idle, startup, and failure records | Compare by workload class |
Map work by trust and timing:
- PR verification: elastic pool when source and secrets policy permit it.
- Simulator regression: elastic pool if images and dependencies are reproducible.
- Archive publishing: warm or fixed pool unless the entire release environment is proven disposable.
- Production signing: dedicated trusted Mac nodes by default.
If you are comparing purchased Macs with temporary remote capacity, include the operational value of avoiding idle hardware, but do not assume renting is cheaper for a continuously busy, long-lived workload. A remote Mac from MACNOX’s available ordering paths may be useful for a controlled capacity test or fallback node; your procurement review should still verify access method, retention policy, support process, billing period, and evidence of cleanup.
SECTION 08A runbook for a limited pilot
Use a narrow pilot rather than migrating every workflow:
- Select one rebuildable PR workflow with no production signing credentials.
- Assign it to a separate runner group with explicit repository access.
- Define the Mac environment contract and required labels.
- Implement host provisioning, initialization, registration, cleanup, and destruction.
- Export client and provisioning logs before node deletion.
- Inject failures for unreachable hosts, client crashes, registration errors, and job retries.
- Compare cold, warm, and fixed capacity using queue and startup records.
- Confirm that failed elastic work can return to an approved fixed or remote fallback.
- Review workspace, cache, Keychain, and credential evidence with the security owner.
- Decide whether to expand only after the pilot meets both delivery and cleanup requirements.
Reject the elastic design if the team cannot prove which Mac ran the job, whether the host was reused, where logs went, or how credentials were removed. Those are not documentation gaps. They are unresolved operational risks.
A fixed pool remains the better answer when your workload is steady, signing dominates, low latency is mandatory, or your team lacks Mac lifecycle automation. An elastic pool earns its place when demand is irregular, jobs are rebuildable, and the organization can operate the surrounding control plane. Most enterprise teams should start with a hybrid pool rather than forcing one policy onto every workflow.
Your current fixed Mac setup may waste capacity during quiet periods, accumulate workspace residue, and require hardware expansion for short release peaks. A fully on-demand remote setup can add startup delay, provisioning failures, and more complex evidence collection. Renting remote Macs through MACNOX is most useful when you need temporary capacity, a fallback environment, or a controlled pilot without committing immediately to more physical hardware; it should not be presented as a substitute for a dedicated production signing boundary.
The next sensible action is to run one disposable PR workload through the elastic path, then use the recorded startup, cleanup, queue, and fallback evidence to decide whether the next step is a limited Scale Set expansion or a mixed Mac pool. You can review the available MACNOX Mac rental options after the technical acceptance criteria are written, not before.