1313 - " Source/**"
1414 - " Tests/**"
1515
16+ permissions :
17+ contents : read
18+
19+ concurrency :
20+ group : typhoon-${{ github.head_ref }}
21+ cancel-in-progress : true
22+
23+ env :
24+ SCHEME_NAME : " Typhoon"
25+
1626jobs :
1727 SwiftLint :
1828 runs-on : ubuntu-latest
2434 args : --strict
2535 env :
2636 DIFF_BASE : ${{ github.base_ref }}
27- macOS :
28- name : ${{ matrix.name }}
29- runs-on : ${{ matrix.runsOn }}
30- env :
31- DEVELOPER_DIR : " /Applications/${{ matrix.xcode }}.app/Contents/Developer"
32- timeout-minutes : 20
33- strategy :
34- fail-fast : false
35- matrix :
36- include :
37- - xcode : " Xcode_26.0.1"
38- runsOn : macOS-26
39- name : " macOS 26, Xcode 26.0, Swift 6.2.0"
40- - xcode : " Xcode_16.1"
41- runsOn : macOS-14
42- name : " macOS 14, Xcode 16.1, Swift 6.0.2"
43- - xcode : " Xcode_15.4"
44- runsOn : macOS-14
45- name : " macOS 14, Xcode 15.4, Swift 5.10"
46- steps :
47- - uses : actions/checkout@v5
48- - name : ${{ matrix.name }}
49- run : xcodebuild test -scheme "Typhoon" -destination "platform=macOS" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
50- - name : Upload test coverage reports to Codecov
51- uses : space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
52- with :
53- scheme_name : Typhoon
54- filename : ${{ matrix.name }}
55- token : ${{ secrets.CODECOV_TOKEN }}
5637
57- iOS :
38+ test-apple-platforms :
5839 name : ${{ matrix.name }}
5940 runs-on : ${{ matrix.runsOn }}
6041 env :
@@ -64,100 +45,45 @@ jobs:
6445 fail-fast : false
6546 matrix :
6647 include :
67- - destination : " OS=26.0.1,name=iPhone 17 Pro"
68- xcode : " Xcode_26.0.1"
69- runsOn : macOS-26
70- name : " OS=26.0, Xcode 26.0, Swift 6.2.0"
71- - destination : " OS=18.1,name=iPhone 16 Pro"
72- name : " iOS 18.1"
73- xcode : " Xcode_16.1"
74- runsOn : macOS-14
75- - destination : " OS=17.4,name=iPhone 15 Pro"
76- name : " iOS 17.4"
77- xcode : " Xcode_15.3"
78- runsOn : macos-14
79- steps :
80- - uses : actions/checkout@v5
81- - name : ${{ matrix.name }}
82- run : xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
83- - name : Upload test coverage reports to Codecov
84- uses : space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
85- with :
86- scheme_name : Typhoon
87- filename : ${{ matrix.name }}
88- token : ${{ secrets.CODECOV_TOKEN }}
48+ # macOS
49+ - { platform: macOS, name: "macOS 26, Xcode 26.0, Swift 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "platform=macOS" }
50+ - { platform: macOS, name: "macOS 14, Xcode 16.1, Swift 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "platform=macOS" }
51+ - { platform: macOS, name: "macOS 14, Xcode 15.4, Swift 5.10", xcode: "Xcode_15.4", runsOn: macOS-14, destination: "platform=macOS" }
8952
90- tvOS :
91- name : ${{ matrix.name }}
92- runs-on : ${{ matrix.runsOn }}
93- env :
94- DEVELOPER_DIR : " /Applications/${{ matrix.xcode }}.app/Contents/Developer"
95- timeout-minutes : 20
96- strategy :
97- fail-fast : false
98- matrix :
99- include :
100- - destination : " OS=26.0,name=Apple TV"
101- xcode : " Xcode_26.0.1"
102- runsOn : macOS-26
103- name : " tvOS 26.0"
104- - destination : " OS=18.1,name=Apple TV"
105- name : " tvOS 18.1"
106- xcode : " Xcode_16.1"
107- runsOn : macOS-14
108- - destination : " OS=17.4,name=Apple TV"
109- name : " tvOS 17.4"
110- xcode : " Xcode_15.3"
111- runsOn : macos-14
112- steps :
113- - uses : actions/checkout@v5
114- - name : ${{ matrix.name }}
115- run : xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
116- - name : Upload test coverage reports to Codecov
117- uses : space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
118- with :
119- scheme_name : Typhoon
120- filename : ${{ matrix.name }}
121- token : ${{ secrets.CODECOV_TOKEN }}
53+ # iOS
54+ - { platform: iOS, name: "iOS 26.0, Xcode 26.0, Swift 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0.1,name=iPhone 17 Pro" }
55+ - { platform: iOS, name: "iOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=iPhone 16 Pro" }
56+ - { platform: iOS, name: "iOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=iPhone 15 Pro" }
12257
123- watchOS :
124- name : ${{ matrix.name }}
125- runs-on : ${{ matrix.runsOn }}
126- env :
127- DEVELOPER_DIR : " /Applications/${{ matrix.xcode }}.app/Contents/Developer"
128- timeout-minutes : 20
129- strategy :
130- fail-fast : false
131- matrix :
132- include :
133- - destination : " OS=26.0,name=Apple Watch Ultra 3 (49mm)"
134- xcode : " Xcode_26.0.1"
135- runsOn : macOS-26
136- name : " watchOS 26.0"
137- - destination : " OS=11.1,name=Apple Watch Series 10 (46mm)"
138- name : " watchOS 11.1"
139- xcode : " Xcode_16.1"
140- runsOn : macOS-14
141- - destination : " OS=10.5,name=Apple Watch Series 9 (45mm)"
142- name : " watchOS 10.5"
143- xcode : " Xcode_15.3"
144- runsOn : macOS-14
145- - destination : " OS=10.4,name=Apple Watch Series 9 (45mm)"
146- name : " watchOS 10.4"
147- xcode : " Xcode_15.3"
148- runsOn : macos-14
58+ # tvOS
59+ - { platform: tvOS, name: "tvOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple TV" }
60+ - { platform: tvOS, name: "tvOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=Apple TV" }
61+ - { platform: tvOS, name: "tvOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=Apple TV" }
62+
63+ # watchOS
64+ - { platform: watchOS, name: "watchOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple Watch Ultra 3 (49mm)" }
65+ - { platform: watchOS, name: "watchOS 11.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=11.1,name=Apple Watch Series 10 (46mm)" }
66+ - { platform: watchOS, name: "watchOS 10.5", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.5,name=Apple Watch Series 9 (45mm)" }
67+ - { platform: watchOS, name: "watchOS 10.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.4,name=Apple Watch Series 9 (45mm)" }
14968 steps :
150- - uses : actions/checkout@v5
151- - name : ${{ matrix.name }}
152- run : xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
153- - name : Upload test coverage reports to Codecov
69+ - name : Checkout code
70+ uses : actions/checkout@v5
71+ - name : Run tests - ${{ matrix.name }}
72+ run : |
73+ xcodebuild test \
74+ -scheme "${{ env.SCHEME_NAME }}" \
75+ -destination "${{ matrix.destination }}" \
76+ -enableCodeCoverage YES \
77+ -resultBundlePath "test_output/${{ matrix.name }}.xcresult" \
78+ clean || exit 1
79+ - name : Upload test coverage to Codecov
15480 uses : space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
15581 with :
156- scheme_name : Typhoon
82+ scheme_name : ${{ env.SCHEME_NAME }}
15783 filename : ${{ matrix.name }}
15884 token : ${{ secrets.CODECOV_TOKEN }}
15985
160- spm :
86+ spm-build :
16187 name : ${{ matrix.name }}
16288 runs-on : ${{ matrix.runsOn }}
16389 env :
@@ -167,37 +93,33 @@ jobs:
16793 fail-fast : false
16894 matrix :
16995 include :
170- - destination : " macOS 26, SPM 6.2.0 Test"
171- xcode : " Xcode_26.0.1"
172- runsOn : macOS-26
173- - destination : " macOS 15, SPM 6.0.2 Test"
174- xcode : " Xcode_16.0"
175- runsOn : macOS-15
176- - name : " macOS 14, SPM 6.0.2 Test"
177- xcode : " Xcode_16.1"
178- runsOn : macOS-14
179- - name : " macOS 14, SPM 5.10.0 Test"
180- xcode : " Xcode_15.3"
181- runsOn : macos-14
96+ - { name: "macOS 26, SPM 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26 }
97+ - { name: "macOS 15, SPM 6.0.2", xcode: "Xcode_16.0", runsOn: macOS-15 }
98+ - { name: "macOS 14, SPM 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14 }
99+ - { name: "macOS 14, SPM 5.10.0", xcode: "Xcode_15.3", runsOn: macOS-14 }
182100 steps :
183- - uses : actions/checkout@v5
184- - name : ${{ matrix.name }}
101+ - name : Checkout code
102+ uses : actions/checkout@v5
103+ - name : Build with Swift Package Manager - ${{ matrix.name }}
185104 run : swift build -c release
186105
187106 merge-test-reports :
188- needs : [iOS, macOS, watchOS, tvOS]
107+ needs : test-apple-platforms
189108 runs-on : macos-15
190109 steps :
191110 - name : Download artifacts
192111 uses : actions/download-artifact@v6
193112 with :
194113 path : test_output
114+
195115 - run : xcrun xcresulttool merge test_output/**/*.xcresult --output-path test_output/final/final.xcresult
196- - name : Upload Merged Artifact
116+
117+ - name : Upload merged test results
197118 uses : actions/upload-artifact@v5
198119 with :
199- name : MergedResult
120+ name : MergedTestResults
200121 path : test_output/final
122+ retention-days : 30
201123
202124 discover-typos :
203125 name : Discover Typos
0 commit comments