Skip to content

CI: run macOS jobs on macos-15 until actions/runner-images#14940 is fixed - #12468

Merged
mergify[bot] merged 1 commit into
haskell:masterfrom
ulysses4ever:ci/pin-macos-15-runner-images-14940
Oct 16, 2026
Merged

mergify[bot] merged 1 commit into
haskell:masterfrom
ulysses4ever:ci/pin-macos-15-runner-images-14940

Conversation

@ulysses4ever

Copy link
Copy Markdown
Collaborator

Works around #12465; upstream bug: actions/runner-images#14940.

Every PR's macOS jobs have failed since about 2026-10-15 10:30 UTC, regardless of content; master was last green on 2026-10-14 and the merge queue runs the same workflows, so nothing can merge. The macos-26-arm64 image that macos-latest maps to (20261013.0424.1) ships the Command Line Tools 27.0 with the macOS 27 SDK, but keeps Xcode 26.6 as the default toolchain. GHC's link line passes -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib, so Xcode 26.6's ld reads the SDK 27 library stubs, which list a new arm64e.x1 architecture it cannot parse:

ld: multiple errors: tapi error: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX27.0.sdk/usr/lib/libiconv.2.tbd:4:20: error:
     error: unknown architecture
                       arm64e.x1-macos, arm64e.x1-maccatalyst ]

This PR:

Notes for review:

  • Check names change from … macos-latest … to … macos-15 …. Only the post jobs are required checks, so branch protection and mergify are unaffected.
  • The release-build pin can be dropped from this PR if you'd rather handle releases separately; without it, the macOS aarch64 build in the nightly and release runs hits the same error.
  • The 3.18 branch has the same macos-latest lines, so this needs a backport.
  • An alternative that keeps macOS 26 is selecting the Command Line Tools as the active toolchain (sudo xcode-select -s /Library/Developer/CommandLineTools, suggested in Bootstrap job fails on macos-latest (GHC 9.12.4) due to linker error with SDK TBD files #12465), so that linker and SDK match again. Nobody has shown it working yet, and it would move all macOS CI onto a new linker at once, so the pin seems the safer unblock.

Template B: This PR does not modify behaviour or interface

  • Patches conform to the coding conventions.
  • Is this a PR that fixes CI? If so, it will need to be backported to older cabal release branches (ask maintainers for directions). — Yes: 3.18 has the same lines.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MWUpUBVSHTCWHGYNCwsjFL

…ixed

The macos-26-arm64 image that macos-latest maps to (20261013.0424.1,
rolled out on 2026-10-15) ships the Command Line Tools 27.0 with the
macOS 27 SDK but keeps Xcode 26.6 as the default toolchain. GHC's link
line passes -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib,
so Xcode 26.6's ld reads the SDK 27 library stubs, whose new arm64e.x1
architecture it cannot parse, and every link fails with "tapi error:
malformed file". That takes down every macOS Validate job, the macOS
Bootstrap job and the aarch64 release build, on every GHC (haskell#12465).

macos-15 has a consistent toolchain (Command Line Tools and Xcode 16.4).
Each pin carries a comment, so they can go back to macos-latest once the
image is fixed.

Also stop the Bootstrap matrix from failing fast: the macOS failure was
cancelling the four Linux jobs, so their results were lost too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MWUpUBVSHTCWHGYNCwsjFL
@ulysses4ever

Copy link
Copy Markdown
Collaborator Author

To be clear about scope: this is the most obvious stop-gap, not a fix. The bug is in the runner image (actions/runner-images#14940), and these pins should go once GitHub fixes it. Alternatives that keep us on macOS 26, such as selecting the Command Line Tools as the active toolchain (#12465 (comment)), may well work, but they need investigation before we rely on them.

Why a wholesale pin for now:

  • Known-good, self-consistent toolchain. The macos-15 image our jobs run on (20260907.0337.1) has the Command Line Tools and Xcode both at 16.4, so nothing is mixed. The xcode-select route instead puts a brand-new linker, from the 27.0 Command Line Tools, under all six GHCs at once, and we don't know yet how GHC 9.4–9.14 get on with it.
  • Already verified. On this PR, Bootstrap passes on macos-15, and all six macOS Validate jobs are past the build steps that used to fail within minutes and are running the test suites.
  • No side effects, trivial to revert. A runner label changes nothing at run time. sudo xcode-select changes the developer directory for everything after it in the job, and if left behind after the image is fixed, it would quietly keep us on a toolchain other than the image default. Here, reverting is one word per job, each marked with a comment pointing at the upstream issue.
  • Release binaries. For the release builds, a consistent toolchain matters more than OS coverage; I'd rather not ship binaries linked through a workaround.
  • Nothing to lose right now. The pin trades macOS 26 coverage, which we don't currently have at all since every macOS job fails, for macOS 15 coverage that works.

One caveat: the macos-15 image hasn't had the October update yet. If GitHub ships it the same Command Line Tools update, this pin stops helping, which is one more reason to look into the xcode-select route in parallel, e.g. in a separate PR across the full matrix.

@ulysses4ever ulysses4ever added merge me Tell Mergify Bot to merge and removed attention: needs-review labels Oct 16, 2026
@mergify mergify Bot added the merge delay passed Applied (usually by Mergify) when PR approved and received no updates for 2 days label Oct 16, 2026
@mergify mergify Bot added the queued label Oct 16, 2026
@mergify

mergify Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • ✅ Entered queue — 2026-10-16 19:13 UTC · Rule: default · triggered by rule Put pull requests in the rebase+merge queue
  • ✅ Checks skipped · PR is already up-to-date
  • ✅ Merged — 2026-10-16 19:23 UTC · at 27789667bb34aa32237289ff5bc861361e431fda · merge

This pull request spent 10 minutes 42 seconds in the queue, including 2 seconds running CI.

Required conditions to merge
  • #review-threads-unresolved = 0 [🛡 GitHub branch protection]
  • github-review-approved [🛡 GitHub branch protection]
  • any of [🛡 GitHub branch protection]:
    • check-success = Doctest Cabal
    • check-neutral = Doctest Cabal
    • check-skipped = Doctest Cabal
  • any of [🛡 GitHub branch protection]:
    • check-success = Meta checks
    • check-neutral = Meta checks
    • check-skipped = Meta checks
  • any of [🛡 GitHub branch protection]:
    • check-success = docs/readthedocs.org:cabal
    • check-neutral = docs/readthedocs.org:cabal
    • check-skipped = docs/readthedocs.org:cabal
  • any of [🛡 GitHub branch protection]:
    • check-success = Validate post job
    • check-neutral = Validate post job
    • check-skipped = Validate post job
  • any of [🛡 GitHub branch protection]:
    • check-success = fourmolu
    • check-neutral = fourmolu
    • check-skipped = fourmolu
  • any of [🛡 GitHub branch protection]:
    • check-success = hlint
    • check-neutral = hlint
    • check-skipped = hlint
  • any of [🛡 GitHub branch protection]:
    • check-success = Bootstrap post job
    • check-neutral = Bootstrap post job
    • check-skipped = Bootstrap post job
  • any of [🛡 GitHub branch protection]:
    • check-success = whitespace
    • check-neutral = whitespace
    • check-skipped = whitespace
  • any of [🛡 GitHub branch protection]:
    • check-success = Check sdist post job
    • check-neutral = Check sdist post job
    • check-skipped = Check sdist post job
  • any of [🛡 GitHub branch protection]:
    • check-success = Changelogs
    • check-neutral = Changelogs
    • check-skipped = Changelogs

@mergify
mergify Bot merged commit 2778966 into haskell:master Oct 16, 2026
94 of 96 checks passed
@mergify mergify Bot removed the queued label Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge delay passed Applied (usually by Mergify) when PR approved and received no updates for 2 days merge me Tell Mergify Bot to merge priority: high 🔥

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bootstrap job fails on macos-latest (GHC 9.12.4) due to linker error with SDK TBD files

3 participants