ci(release): switch macOS Intel runner from macos-13 to macos-15#42
Conversation
GitHub retired the free `macos-13` runner on 2025-12-04 (actions/runner-images#13046). PR #41's Intel build queued for 24h without a runner and got auto-cancelled. `macos-15` (without the `-arm64` suffix) is the current free Intel runner image — confirmed via the actions/runner-images readme: tool paths under `chromedriver-mac-x64` / `JAVA_HOME_*_X64`. `macos-15-arm64` remains the explicit Apple Silicon variant. Note: actions/runner-images#12545 reports the `macos-15` Intel runner is slower than `macos-13` was; release builds will take longer but still finish under the per-job ceiling.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4698de48a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| dist/*.pkg | ||
| - label: macos-x64 | ||
| os: macos-13 | ||
| os: macos-15 |
There was a problem hiding this comment.
Use the Intel macOS 15 runner label
For the macos-x64 matrix entry, macos-15 is not the Intel label: GitHub's hosted-runner reference lists macos-15 with the arm64 runners and macos-15-intel with Intel. Because package.json runs tauri build --bundles app,dmg --no-sign without --target, and scripts/create-macos-pkg.mjs derives the package arch from process.arch, this job will run on an arm64 host and publish arm64 DMG/PKG artifacts under the macos-x64 artifact name, so tag releases still won't contain a real x64 macOS build.
Useful? React with 👍 / 👎.
| dist/*.pkg | ||
| - label: macos-x64 | ||
| os: macos-13 | ||
| os: macos-15 |
There was a problem hiding this comment.
🔴 macos-x64 build will produce ARM64 binaries because macos-15 runners are Apple Silicon and tauri build has no --target flag
GitHub Actions macos-15 runners use Apple Silicon (ARM64), unlike macos-13 which was Intel (x86_64). The tauri:build:macos-release script (package.json:30) runs tauri build --bundles app,dmg --no-sign without a --target flag, so it builds for the host architecture. On the previous macos-13 runner this naturally produced x86_64 binaries; on macos-15 it will produce ARM64 binaries instead. The matrix target: x86_64-apple-darwin field is only consumed by dtolnay/rust-toolchain and rust-cache — it is never passed to tauri build. As a result, the artifacts uploaded under the label codex-switch-macos-x64 will actually be ARM64 binaries, and the release will ship mislabeled architecture binaries (or the build will fail at link time when it finds the x86_64 toolchain doesn't match the host-default aarch64 compilation).
Contrast with the Windows matrix entry, where tauri:build:windows explicitly passes --target x86_64-pc-windows-msvc (package.json:25).
Prompt for agents
The root problem is that macos-15 GitHub Actions runners are ARM64 (Apple Silicon), but the matrix entry is meant to build x86_64 binaries. The tauri:build:macos-release script in package.json does not pass --target to tauri build, so it always builds for the host architecture.
There are two approaches to fix this:
1. Revert to macos-13 (if still available) which is the last Intel-native runner, so the build naturally targets x86_64 without needing --target.
2. Keep macos-15 but add cross-compilation support: either create a new tauri:build:macos-release-x64 script in package.json that passes --target x86_64-apple-darwin to tauri build, or update the workflow to pass the target differently. Note that cross-compiling Tauri apps requires the x86_64 system libraries to be available, which may need additional setup (e.g. installing Rosetta or x86_64 SDK dependencies).
The matrix target field at .github/workflows/build.yml:84 is currently only used for rust-toolchain installation and rust-cache keying — it needs to also be plumbed into the actual tauri build command for cross-compilation to work.
Was this helpful? React with 👍 or 👎 to provide feedback.
PR #42 switched to `macos-15`, but that label resolves to the `macos-15-arm64` image (per actions/runner-images README). The job "succeeded" only because it produced another aarch64 binary — verified by inspecting workflow run 26093996486: the macos-x64 artifact contained `codex_switch_1.5.10_aarch64.dmg` and the job log shows `Image: macos-15-arm64`. The correct free standard Intel runner is `macos-15-intel` (along with `macos-26-intel`); both are documented as standard runners separately from the paid `-large` / `-xlarge` tier. Refs: actions/runner-images README "Available Images" table — | macOS 15 | x64 | `macos-latest-large`, `macos-15-large`, or `macos-15-intel` |
Summary
PR #41 used
os: macos-13for the macOS Intel build matrix entry. GitHub fully retired the freemacos-13runner on 2025-12-04 (actions/runner-images#13046), so the Intel job queued for 24h with no runner pickup and was auto-cancelled — see workflow run 26013731604.Switching to
os: macos-15, which is the current free Intel runner image.How I verified the runner arch
actions/runner-imagesships separate readmes:macos-15-Readme.mdvsmacos-15-arm64-Readme.md.macos-15readme: ChromeDriver atchromedriver-mac-x64,JAVA_HOME_*_X64— Intel.macos-15-arm64readme: same tools underchromedriver-mac-arm64,JAVA_HOME_*_arm64— Apple Silicon.macos-15as the "x86" runner.Known caveat
actions/runner-images#12545 (still open, 2025-07-08) reports the
macos-15Intel runner is significantly slower than the retiredmacos-13was. Release builds will take longer (estimate +5–10 min per Intel matrix entry) but should still finish well under the 6h per-job ceiling.Test plan
workflow_dispatchonmainand confirm:Build macos-x64job actually starts (no infinite queue).macos-arm64,macos-x64,windows-x86_64) finish green._x64.dmgand_x64.pkg.