@@ -12,7 +12,11 @@ concurrency:
1212
1313jobs :
1414 test :
15- runs-on : macos-15
15+ # macos-26 carries Xcode 26.x, which the embedded-Python (Columba) scheme
16+ # needs — the Python.framework clang module map fails to resolve under
17+ # Xcode 16.x ("module 'Python' … not defined in any loaded module map"),
18+ # which is what devs build with locally (26.x). See the Select Xcode step.
19+ runs-on : macos-26
1620 steps :
1721 - uses : actions/checkout@v4
1822
@@ -32,11 +36,31 @@ jobs:
3236
3337 - name : Select Xcode
3438 run : |
35- XCODE=$(ls -d /Applications/Xcode_16*.app 2>/dev/null | sort -V | tail -1)
39+ echo "Available Xcodes:"; ls -d /Applications/Xcode_*.app 2>/dev/null || true
40+ # Pick the newest Xcode on the runner (was pinned to 16.x, which can't
41+ # build the Python scheme — see runs-on comment). Version-sort so 26.x
42+ # wins over 16.x regardless of exact point release.
43+ XCODE=$(ls -d /Applications/Xcode_*.app 2>/dev/null | sort -V | tail -1)
3644 echo "Using $XCODE"
3745 sudo xcode-select -s "$XCODE"
3846 xcodebuild -version
3947
48+ # Resolve the local Swift packages (reticulum-swift / LXMF-swift / LXST-swift)
49+ # once, up front. Without this the `xcodebuild test` action can intermittently
50+ # fail to resolve LXMFSwift/ReticulumSwift for the ColumbaAppTests target even
51+ # though the app build steps resolved them fine — a fresh-runner resolution
52+ # race. One explicit resolve makes every later build/test step reuse it.
53+ - name : Resolve Swift packages
54+ run : |
55+ # Pre-warm both schemes' package deps (same sibling packages, same
56+ # .xcodeproj, but be explicit so the Swift-native build benefits too).
57+ xcodebuild -resolvePackageDependencies \
58+ -project Columba.xcodeproj \
59+ -scheme Columba
60+ xcodebuild -resolvePackageDependencies \
61+ -project Columba.xcodeproj \
62+ -scheme Columba-Swift
63+
4064 - name : Find simulator
4165 id : sim
4266 run : |
0 commit comments