Skip to content

ci: build on macos-26 (Xcode 26) so the Python module map resolves#85

Merged
torlando-tech merged 2 commits into
mainfrom
fix/ci-xcode26-python-module-map
Jun 1, 2026
Merged

ci: build on macos-26 (Xcode 26) so the Python module map resolves#85
torlando-tech merged 2 commits into
mainfrom
fix/ci-xcode26-python-module-map

Conversation

@torlando-tech

Copy link
Copy Markdown
Owner

main's test workflow has been red since the dual-backend merge — every open PR inherits it (this is why #84's CI failed; it's not the CallKit change).

Root cause

The Build (Python backend — default) step fails precompiling ColumbaApp's bridging header:

error: module 'Python' in AST file … clang importer creation failed
SwiftGeneratePch … Compiling bridging header (ColumbaApp) Failed → exit code 65

The embedded-Python (Columba) scheme's Python.framework clang module map only resolves under Xcode 26.x, but the runner was pinned to macos-15 / Xcode 16. The fix was made on the combined #82 branch (feat/dual-backend-arch), which was closed, not merged — so it was stranded (same pattern as the interop-harness fixes in #83).

Fix (recovered verbatim from #82)

  • runs-on: macos-15macos-26 (carries Xcode 26.x)
  • Select Xcode: pick the newest Xcode_* instead of Xcode_16*
  • Add an explicit Resolve Swift packages step (fresh-runner resolution race for the test target)

No app/source changes. Merging this fixes main's CI; #83 and #84 should go green on re-run once this lands (their pull_request checks build the merge with main's fixed workflow).

…solves

main's CI has been red since the dual-backend merge: the Build (Python
backend) step fails precompiling ColumbaApp's bridging header with
'module Python … clang importer creation failed' (exit 65). The embedded-
Python (Columba) scheme's Python.framework clang module map only resolves
under Xcode 26.x; the runner was pinned to macos-15/Xcode 16. The fix lived
on the combined #82 branch, which was closed (not merged) — so it was
stranded, like the interop-harness fixes.

- runs-on: macos-15 -> macos-26 (Xcode 26.x).
- Select Xcode: pick newest (Xcode_*) instead of Xcode_16* so 26.x wins.
- Add an explicit 'Resolve Swift packages' step to avoid the fresh-runner
  package-resolution race for the test target.

Recovered verbatim from origin/feat/dual-backend-arch (#82). Fixes CI for
main and unblocks the other open PRs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This CI-only fix recovers the macos-26 / Xcode 26 runner change that was stranded on the closed #82 branch. It restores a green main by supplying the Xcode version that the embedded-Python scheme requires for its clang module map, and adds an upfront package-resolve step to eliminate a fresh-runner resolution race for the test target.

  • Runner & Xcoderuns-on is bumped from macos-15 to macos-26; the Select Xcode step now globs Xcode_*.app (instead of Xcode_16*.app) and version-sorts so Xcode 26.x wins even if an older installation is also present.
  • Package resolution – A new Resolve Swift packages step calls xcodebuild -resolvePackageDependencies for both Columba and Columba-Swift schemes before any build or test step, warming the shared project-level package cache for all downstream steps.

Confidence Score: 5/5

Safe to merge — this is a targeted CI infrastructure fix with no app source changes.

All three changes (runner label, Xcode glob, package-resolve step) are straightforward and well-commented. The Xcode sort -V | tail -1 pattern correctly handles version ordering, the two-scheme resolve step addresses the previous reviewer concern about the Swift-native scheme not being explicitly warmed, and there are no app or test source changes that could introduce regressions.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/tests.yml Runner bumped to macos-26, Xcode selection broadened to pick the newest installed version, and an explicit two-scheme package-resolve step added before any build; no logic regressions found.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[checkout] --> B[Clone sibling packages]
    B --> C[Fetch Python framework + wheels]
    C --> D[Select Xcode
macos-26 → pick newest Xcode_*.app]
    D --> E[Resolve Swift packages
-scheme Columba
-scheme Columba-Swift]
    E --> F[Find simulator]
    F --> G[Build — Python backend
-scheme Columba]
    F --> H[Build — Swift-native backend
-scheme Columba-Swift]
    G --> I[Build and run tests
-scheme Columba]
    H --> I
    I --> J[Export coverage report
lcov via xccov + python3]
    J --> K[Upload to Codecov]
Loading

Reviews (3): Last reviewed commit: "address greptile review feedback (greplo..." | Re-trigger Greptile

Comment thread .github/workflows/tests.yml
@torlando-tech

Copy link
Copy Markdown
Owner Author

@greptile review

@codecov

codecov Bot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Resolve Swift packages for both Columba and Columba-Swift schemes so the
Swift-native build step also benefits from the pre-warm (same sibling
packages, but explicit removes any doubt).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@torlando-tech torlando-tech merged commit f853b6d into main Jun 1, 2026
3 checks passed
@torlando-tech torlando-tech deleted the fix/ci-xcode26-python-module-map branch June 1, 2026 01:41
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