GitHub Actions: the macOS 14 runner image is retired
GitHub keeps the two latest stable versions of each OS image and retires the one before. The macOS 14 image retires on November 2, 2026, with its labels macos-14, macos-14-large and macos-14-xlarge (GitHub changelog, runner-images #13518). A workflow that still asks for one of them has to move, and the move changes the default Xcode.
The brownout message
Before the date, GitHub failed these jobs on purpose in ten brownouts, from 14:00 UTC to midnight on October 5, 12, 16, 19, 23, 26, 29, 30 and 31 and November 1. The changelog lists the first eight; the issue adds October 31 and November 1. A job then ended as Cancelled in the second it was created, with no runner and no steps, and this message:
This job failed because of a scheduled macOS 14 runner image brownout. macOS 14 runner images will be retired on November 2, 2026. For migration options and the brownout schedule, see https://github.com/actions/runner-images/issues/13518
A run cancelled on the evening of November 1 (UTC) was a brownout, not the retirement. The other jobs of the run can still succeed, so a release workflow can publish everything except the macOS artifact.
Jobs still ran on November 2
The date is not a switch. On November 2, public runs on macos-14 still got a runner at 02:15, 11:47 and 12:26 UTC, with the image macos-14-arm64 version 20260831.0302.1. A job that runs today can stop any day now. Before the date, GitHub also warned it may reduce macOS 14 capacity, which means longer queues.
When the label stops answering
runner-images #13518 says workflows on these labels "will be terminated with an error". When older images were removed (ubuntu-18.04, macOS 11), the job waited a day for a runner and then failed with this, followed by a note that the image is deprecated (quoted in rogchap/v8go #399 and maticzav/nookies #592):
This request was automatically failed because there were no enabled runners online to process the request for more than 1 days.
Until then the job shows "Waiting for a runner to pick up this job" (the other reasons a job waits). Cancelling it does not help; the label has to change.
Which label to use
From the issue:
macos-14:macos-latest,macos-15ormacos-26macos-14-large(Intel):macos-latest-largeormacos-15-largemacos-14-xlarge:macos-latest-xlarge,macos-15-xlargeormacos-26-xlarge
macos-latest is macOS 26 now and moves to the next image by itself. A numbered label such as macos-15 stays put until that image retires in turn, which makes the next move a choice instead of a surprise.
What changes with the move
- Xcode: The macOS 14 image has Xcode 15.0.1 to 16.2, with 15.4 as the default. The macOS 15 image has Xcode 16.0 to 26.3, with 16.4 as the default, and no Xcode 15 (the image readmes in runner-images). A step that selects
Xcode_15.4.app, or a matrix entry for Xcode 15, fails onmacos-15. - The minimum macOS of what you build: A Homebrew bottle is tagged for the macOS it was built on (
arm64_sequoiainstead ofarm64_sonoma) and installs only on that version or later. Builds that bundle libraries made for the runner's macOS raise their minimum the same way. Where the toolchain honoursMACOSX_DEPLOYMENT_TARGET, setting it to 14.0 keeps the old minimum. - Where the label hides: not always on a
runs-on:line: look in matrix lists (os: [ubuntu-latest, macos-14]), in conditions such asmatrix.os == 'macos-14', in reusable workflows and in files that generate the matrix.
To find every place in a repository:
grep -rnE "macos-14(-large|-xlarge)?" .github/
Across an organization, GitHub code search: org:YOUR-ORG path:.github/workflows "macos-14". Azure Pipelines is affected too: runner-images #13518 lists Azure DevOps among the platforms.
See failed and queued runs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, so a macOS job that failed or is still queued while the others ran shows at a glance, and your current branch's runs are in the status bar. Reading is free; re-running, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
GitHub and GitHub Actions are trademarks of GitHub, Inc.; macOS and Xcode are trademarks of Apple Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., Apple Inc. or JetBrains.
More: "Waiting for a runner to pick up this job" · Cancelling a run that will not stop · Re-running jobs with debug logging · GitHub Actions plugins for IntelliJ IDEA compared · 日本語