Skip to content

ci: support macOS 27 (Xcode 27 SDK) - #26

Merged
gregnazario merged 1 commit into
mainfrom
ci/macos-27
Sep 23, 2026
Merged

gregnazario merged 1 commit into
mainfrom
ci/macos-27

Conversation

@gregnazario

Copy link
Copy Markdown
Owner

What

  • CI matrix gains a macos-26 leg: clippy, tests, and a release build run against the Xcode 27 toolchain (macOS 27 SDK) alongside the existing macos-15 floor.
  • Release packaging moves to macos-26: published DMG/zip artifacts are built with the newest SDK. The universal binary still deploys to older systems — LSMinimumSystemVersion stays 13.0 and the rust target minimum is unchanged.
  • README + BUILDING.md note macOS 27 support.

Verification

  • Locally on macOS 27.0 / Xcode 27.0 (the actual new OS): full test suite passes (196 tests), and scripts/package-macos.sh — the exact release pipeline: universal build, ad-hoc codesign, styled DMG — runs end to end.
  • The PR's own CI run is the existence check for the macos-26 runner label: if GitHub hasn't shipped that image yet, the job will sit queued and this PR should not merge.

The CI matrix gains a macos-26 leg so clippy/tests run against the
Xcode 27 toolchain alongside the macos-15 floor, and the release
workflow packages the macOS universal bundle on it — published
artifacts are built with the newest SDK while LSMinimumSystemVersion
(13.0) keeps older systems working. Verified locally on macOS 27.0:
full test suite passes and the packaging pipeline (universal build,
codesign, DMG) runs end to end.

@hedgehog-pr-bot hedgehog-pr-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pi code review

The PR adds a macos-26 leg to the CI matrix, moves macOS release packaging from macos-15 to macos-26, and updates README/BUILDING.md to advertise macOS 27 (Xcode 27 SDK) support. I checked the workflow changes for runner-label validity, toolchain selection, artifact impact, concurrency/trigger interactions, and doc consistency, and the doc edits for consistency with the CI changes. No functional code or security issues. The main concern: both workflows assert that the macos-26 image carries the Xcode 27 toolchain (macOS 27 SDK), but nothing in either workflow selects or verifies an Xcode version — the builds will silently use whatever the image's default toolchain is, and GitHub's image naming has consistently paired macos-N images with Xcode N as the default (e.g. macos-15 → Xcode 16). If macos-26 defaults to Xcode 26, the shipped DMG/zip and the CI "newest-SKU" leg are built with the macOS 26 SDK, contradicting the title, the inline comments, README, and BUILDING.md. Secondary: the BUILDING.md sentence "Builds with Xcode 26 or 27" doesn't describe the CI floor (macos-15 builds with an older default Xcode), and these unpinned version claims will drift as images update.

ℹ️ 1 Medium · ℹ️ 2 Low


Reviewed 867a23f with Pi 0.85.1 using zai/glm-5.3:high.

# Build with the newest macOS/Xcode SDK: the published universal
# binary then carries the macOS 27 SDK's platforms support while
# still deploying to older systems (LSMinimumSystemVersion 13.0).
runs-on: macos-26

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: This job claims to package with "the newest macOS/Xcode SDK" (and the title/README/BUILDING.md say Xcode 27 / macOS 27 SDK), but nothing here selects or verifies an Xcode version — the build uses the runner image's default toolchain. Per GitHub's image convention (macos-15 → Xcode 16, macos-14 → Xcode 15), a macos-26 image most likely defaults to Xcode 26 with the macOS 26 SDK, so the published universal binary may be built with a different SDK than every doc in this PR asserts, with no signal. Suggest explicitly selecting the toolchain (e.g. sudo xcode-select -s /Applications/Xcode_27.app, or maxim-lobanov/setup-xcode@v1 with xcode-version: '27') and adding a step that prints xcodebuild -version and xcrun --show-sdk-version --sdk macosx (failing if it isn't the expected one) so the SDK baked into release artifacts is guaranteed and auditable.

Comment thread .github/workflows/ci.yml
fail-fast: false
matrix:
os: [macos-15, ubuntu-24.04, windows-2025]
# macos-26 carries the Xcode 27 toolchain (macOS 27 SDK): the

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Low: The comment states as fact that macos-26 "carries the Xcode 27 toolchain (macOS 27 SDK)", but nothing pins or checks that — the leg exercises whatever the image default is. If the default is Xcode 26, the "newest-SKU" leg is not testing the Xcode 27 toolchain the PR claims, and the comment will go stale as images update. Either select Xcode explicitly (see the release job) or add a cheap xcodebuild -version / xcrun --show-sdk-version --sdk macosx log step, and phrase the comment as "newest available runner image" rather than a specific Xcode version.

Comment thread docs/BUILDING.md

### macOS

Builds with Xcode 26 or 27 (macOS 26/27 SDK); the universal package is

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Low: "Builds with Xcode 26 or 27 (macOS 26/27 SDK)" doesn't match what CI actually does: the macOS floor leg (macos-15) builds with that image's default Xcode, and no workflow pins Xcode 26 vs 27, so these specific version claims will silently drift as GitHub updates images. Consider wording it as "builds with the runner image's default Xcode — CI covers the oldest supported image (macos-15) and the newest (macos-26), and release packaging uses the newest SDK" — or pin the versions so the sentence is enforceable.

@gregnazario
gregnazario merged commit db74960 into main Sep 23, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant