Repository navigation
Commit 5a6b339
authored
ci: filter to SymbolTestsCore fixture tests + bump to macOS 26 + Xcode 26.4 (#65)
* Add CI test filter and macOS 26.2 upgrade spec
Documents the plan to restrict CI test runs to the four SymbolTestsCore
fixture test classes, build the fixture framework via xcodebuild in the
workflow, and bump both workflows to macOS 26.2 + Xcode 26.2.
* Refine CI filter spec to current state and add implementation plan
Spec now reflects that Build SymbolTestsCore fixture, DerivedData cache,
and SPM resolve steps already exist on main; only the --filter regex
and macOS 26.2 / Xcode 26.2 bumps remain. Plan walks through verification
of the regex locally followed by separate workflow commits and a PR.
* Correct CI filter spec/plan: actual class names + add coverage invariant
Snapshot test classes were renamed from MachOFile* to SymbolTestsCore*
on main; the spec/plan still referenced the old names. Adds the existing
SymbolTestsCoreCoverageInvariantTests (pure-Swift invariant over
fixture sources) to the CI whitelist. Also switches the verification
recipe from the deprecated `swift test --list-tests --filter` to
`swift test list` + local `grep -E`, which matches what current toolchains
support.
* ci(macOS): pin to macos-26 + Xcode 26.2 and filter to fixture tests
Restrict swift test runs to the five SymbolTestsCore-based test classes
(SymbolTestsCoreDumpSnapshotTests, SymbolTestsCoreInterfaceSnapshotTests,
SymbolTestsCoreCoverageInvariantTests, STCoreE2ETests, STCoreTests) so
the CI runner only executes tests that do not depend on a developer-
machine environment.
Spec: docs/superpowers/specs/2026-04-18-ci-test-filter-design.md
* ci(release): bump runner to macos-26 + Xcode 26.2
Aligns the release workflow with the macOS test workflow.
* ci(macOS): disable code signing for SymbolTestsCore fixture build
The CI runner doesn't have the developer certificate for team
D5Q73692VW that the SymbolTests xcodeproj requests. xcodebuild only
needs to produce the SymbolTestsCore.framework binary so swift test can
load it for snapshot/fixture tests; the framework does not need a valid
code signature for that. Pass CODE_SIGNING_ALLOWED=NO to skip signing
entirely.
Refs PR #65.
* ci(macOS): force arm64 slice and skip swiftinterface verify
Two follow-up fixes to make the SymbolTestsCore xcodebuild step succeed
on the macos-26 runner:
1. ARCHS=arm64 — `-destination generic/platform=macOS` defaults to a
universal build (arm64 + x86_64). The workflow's own comment notes
that snapshot tests assume the arm64 slice; an x86_64 slice would
drift snapshots. Restrict to arm64 to match the documented invariant.
2. SWIFT_VERIFY_EMITTED_MODULE_INTERFACE=NO — Swift 6.2.3 in
library-evolution mode emits a .swiftinterface that contains
`nonisolated(nonsending)` (from the NonisolatedNonsendingByDefault
upcoming feature) but then fails to verify its own output, with
"'nonisolated' may only be used on parameters" and friends. Skip the
verifier pass; the .swiftinterface is still emitted, and the Mach-O
binary that snapshot tests load is unaffected.
Refs PR #65.
* ci: bump Xcode pin from 26.2 to 26.4
Xcode 26.2 ships Swift 6.2.3, whose compiler emits a .swiftinterface
containing nonisolated(nonsending) syntax (auto-enabled by the macOS 26
SDK's default upcoming features) but then fails to verify its own
output ("'nonisolated' may only be used on parameters", etc.). Xcode
26.4 / Swift 6.3 fixed this — local builds with 26.4 succeed using the
identical xcodebuild command.
Refs PR #65.
* deps: bump swift-demangling pin from 0.1.0 to 0.1.1
0.1.1 adds DemangleOptions.removeReferenceStoragePrefix, which
SwiftDump's StructDumper and ClassDumper use. Local builds with
useLocalDemangling=1 picked up the new API from a sibling checkout, but
CI resolves the remote pin and was failing to compile against 0.1.0.
Refs PR #65.
* ci(macOS): symlink SymbolTestsCore fixture to expected path
xcodebuild on the macos-26 runner emits the fixture at
DerivedData/Build/Products/Release/SymbolTestsCore.framework, but
MachOFileName.SymbolTestsCore reads it from
DerivedData/SymbolTests/Build/Products/Release/SymbolTestsCore.framework
(the layout xcodebuild produces locally on Apple Silicon with Xcode
26.4). Add a step that finds the produced framework and symlinks it to
the expected path. Logs the discovered locations for future debugging.
Refs PR #65.
* docs: sync spec/plan with implementation outcome (Xcode 26.4 + 5 followups)
Spec now states the workflows pin Xcode 26.4 (with a note explaining
why the originally-targeted 26.2 didn't work — Swift 6.2.3
swiftinterface bug). Plan keeps the original Task 1-4 wording (which
matches the executed commits) and adds an "Implementation Outcome"
section listing the five follow-up commits CI feedback required.
* ci(macOS): drop SWIFT_VERIFY_EMITTED_MODULE_INTERFACE=NO workaround
Originally added to try to suppress the Swift 6.2.3 swiftinterface
emit/verify mismatch, but the flag never actually worked under Xcode
26's explicit-module pipeline (which uses a separate verifier path).
Now that the Xcode pin is 26.4 / Swift 6.3 — which fixed the underlying
emitter bug — the flag is dead code; keeping it would silently swallow
any future emit/verify regressions instead of letting them surface.
Also retitle the plan from "macOS 26.2 Upgrade" to "macOS 26 Upgrade"
to match the actual outcome (runner image macos-26, Xcode 26.4).
Refs PR #65.1 parent 4365e8e commit 5a6b339
5 files changed
Lines changed: 603 additions & 7 deletions
File tree
- .github/workflows
- docs/superpowers
- plans
- specs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
19 | | - | |
| 18 | + | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| 52 | + | |
| 53 | + | |
52 | 54 | | |
53 | 55 | | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
54 | 79 | | |
55 | 80 | | |
56 | 81 | | |
| |||
63 | 88 | | |
64 | 89 | | |
65 | 90 | | |
66 | | - | |
| 91 | + | |
| 92 | + | |
67 | 93 | | |
68 | 94 | | |
69 | 95 | | |
70 | 96 | | |
71 | 97 | | |
72 | | - | |
| 98 | + | |
| 99 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
230 | | - | |
| 230 | + | |
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
| |||
0 commit comments