Skip to content

Commit 16d82a8

Browse files
committed
chore(ci): update workflow to run tests and build project
1 parent 69b4e9d commit 16d82a8

File tree

1 file changed

+63
-146
lines changed

1 file changed

+63
-146
lines changed

.github/workflows/ci.yml

Lines changed: 63 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
name: network-layer
1+
name: "network-layer"
22

33
on:
44
push:
55
branches:
66
- main
7-
- dev
7+
paths:
8+
- '.swiftlint.yml'
9+
- ".github/workflows/**"
10+
- "Package.swift"
11+
- "Source/**"
12+
- "Tests/**"
813
pull_request:
914
paths:
1015
- '.swiftlint.yml'
@@ -13,8 +18,18 @@ on:
1318
- "Source/**"
1419
- "Tests/**"
1520

21+
permissions:
22+
contents: read
23+
24+
concurrency:
25+
group: network-layer-${{ github.head_ref }}
26+
cancel-in-progress: true
27+
28+
env:
29+
SCHEME_NAME: "NetworkLayer"
30+
1631
jobs:
17-
macOS:
32+
test-apple-platforms:
1833
name: ${{ matrix.name }}
1934
runs-on: ${{ matrix.runsOn }}
2035
env:
@@ -24,141 +39,45 @@ jobs:
2439
fail-fast: false
2540
matrix:
2641
include:
27-
- xcode: "Xcode_16.1"
28-
runsOn: macOS-14
29-
name: "macOS 14, Xcode 16.1, Swift 6.0.2"
30-
- xcode: "Xcode_15.4"
31-
runsOn: macOS-14
32-
name: "macOS 14, Xcode 15.4, Swift 5.10"
33-
- xcode: "Xcode_15.0"
34-
runsOn: macos-13
35-
name: "macOS 13, Xcode 15.0, Swift 5.9.0"
36-
- xcode: "Xcode_14.3.1"
37-
runsOn: macos-13
38-
name: "macOS 13, Xcode 14.3.1, Swift 5.8.0"
39-
steps:
40-
- uses: actions/checkout@v4
41-
- name: ${{ matrix.name }}
42-
run: xcodebuild test -scheme "NetworkLayer" -destination "platform=macOS" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
43-
- name: Upload test coverage reports to Codecov
44-
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
45-
with:
46-
scheme_name: NetworkLayer
47-
filename: ${{ matrix.name }}
48-
token: ${{ secrets.CODECOV_TOKEN }}
42+
# macOS
43+
- { platform: macOS, name: "macOS 26, Xcode 26.0, Swift 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "platform=macOS" }
44+
- { platform: macOS, name: "macOS 14, Xcode 16.1, Swift 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "platform=macOS" }
45+
- { platform: macOS, name: "macOS 14, Xcode 15.4, Swift 5.10", xcode: "Xcode_15.4", runsOn: macOS-14, destination: "platform=macOS" }
4946

50-
iOS:
51-
name: ${{ matrix.name }}
52-
runs-on: ${{ matrix.runsOn }}
53-
env:
54-
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
55-
timeout-minutes: 20
56-
strategy:
57-
fail-fast: false
58-
matrix:
59-
include:
60-
- destination: "OS=18.1,name=iPhone 16 Pro"
61-
name: "iOS 18.1"
62-
xcode: "Xcode_16.1"
63-
runsOn: macOS-14
64-
- destination: "OS=17.5,name=iPhone 15 Pro"
65-
name: "iOS 17.5"
66-
xcode: "Xcode_15.4"
67-
runsOn: macOS-14
68-
- destination: "OS=17.0.1,name=iPhone 14 Pro"
69-
name: "iOS 17.0.1"
70-
xcode: "Xcode_15.0"
71-
runsOn: macos-13
72-
- destination: "OS=16.4,name=iPhone 14 Pro"
73-
name: "iOS 16.4"
74-
xcode: "Xcode_14.3.1"
75-
runsOn: macos-13
76-
steps:
77-
- uses: actions/checkout@v4
78-
- name: ${{ matrix.name }}
79-
run: xcodebuild test -scheme "NetworkLayer" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
80-
- name: Upload test coverage reports to Codecov
81-
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
82-
with:
83-
scheme_name: NetworkLayer
84-
filename: ${{ matrix.name }}
85-
token: ${{ secrets.CODECOV_TOKEN }}
47+
# iOS
48+
- { 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" }
49+
- { platform: iOS, name: "iOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=iPhone 16 Pro" }
50+
- { platform: iOS, name: "iOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=iPhone 15 Pro" }
8651

87-
tvOS:
88-
name: ${{ matrix.name }}
89-
runs-on: ${{ matrix.runsOn }}
90-
env:
91-
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
92-
timeout-minutes: 20
93-
strategy:
94-
fail-fast: false
95-
matrix:
96-
include:
97-
- destination: "OS=18.1,name=Apple TV"
98-
name: "tvOS 18.1"
99-
xcode: "Xcode_16.1"
100-
runsOn: macOS-14
101-
- destination: "OS=17.5,name=Apple TV"
102-
name: "tvOS 17.5"
103-
xcode: "Xcode_15.4"
104-
runsOn: macOS-14
105-
- destination: "OS=17.0,name=Apple TV"
106-
name: "tvOS 17.0"
107-
xcode: "Xcode_15.0"
108-
runsOn: macos-13
109-
- destination: "OS=16.4,name=Apple TV"
110-
name: "tvOS 16.4"
111-
xcode: "Xcode_14.3.1"
112-
runsOn: macos-13
113-
steps:
114-
- uses: actions/checkout@v4
115-
- name: ${{ matrix.name }}
116-
run: xcodebuild test -scheme "NetworkLayer" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
117-
- name: Upload test coverage report to Codecov
118-
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
119-
with:
120-
scheme_name: NetworkLayer
121-
filename: ${{ matrix.name }}
122-
token: ${{ secrets.CODECOV_TOKEN }}
52+
# tvOS
53+
- { platform: tvOS, name: "tvOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple TV" }
54+
- { platform: tvOS, name: "tvOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=Apple TV" }
55+
- { platform: tvOS, name: "tvOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=Apple TV" }
12356

124-
watchOS:
125-
name: ${{ matrix.name }}
126-
runs-on: ${{ matrix.runsOn }}
127-
env:
128-
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
129-
timeout-minutes: 20
130-
strategy:
131-
fail-fast: false
132-
matrix:
133-
include:
134-
- destination: "OS=11.1,name=Apple Watch Series 10 (46mm)"
135-
name: "watchOS 11.1"
136-
xcode: "Xcode_16.1"
137-
runsOn: macOS-14
138-
- destination: "OS=10.5,name=Apple Watch Series 9 (45mm)"
139-
name: "watchOS 10.5"
140-
xcode: "Xcode_15.4"
141-
runsOn: macOS-14
142-
- destination: "OS=10.0,name=Apple Watch Series 9 (45mm)"
143-
name: "watchOS 10.0"
144-
xcode: "Xcode_15.0"
145-
runsOn: macos-13
146-
- destination: "OS=9.4,name=Apple Watch Series 8 (45mm)"
147-
name: "watchOS 9.4"
148-
xcode: "Xcode_14.3.1"
149-
runsOn: macos-13
57+
# watchOS
58+
- { platform: watchOS, name: "watchOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple Watch Ultra 3 (49mm)" }
59+
- { platform: watchOS, name: "watchOS 11.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=11.1,name=Apple Watch Series 10 (46mm)" }
60+
- { platform: watchOS, name: "watchOS 10.5", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.5,name=Apple Watch Series 9 (45mm)" }
61+
- { platform: watchOS, name: "watchOS 10.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.4,name=Apple Watch Series 9 (45mm)" }
15062
steps:
151-
- uses: actions/checkout@v4
152-
- name: ${{ matrix.name }}
153-
run: xcodebuild test -scheme "NetworkLayer" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
154-
- name: Upload test coverage reports to Codecov
63+
- name: Checkout code
64+
uses: actions/checkout@v4
65+
- name: Run tests - ${{ matrix.name }}
66+
run: |
67+
xcodebuild test \
68+
-scheme "${{ env.SCHEME_NAME }}" \
69+
-destination "${{ matrix.destination }}" \
70+
-enableCodeCoverage YES \
71+
-resultBundlePath "test_output/${{ matrix.name }}.xcresult" \
72+
clean || exit 1
73+
- name: Upload test coverage to Codecov
15574
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
15675
with:
157-
scheme_name: NetworkLayer
76+
scheme_name: ${{ env.SCHEME_NAME }}
15877
filename: ${{ matrix.name }}
15978
token: ${{ secrets.CODECOV_TOKEN }}
16079

161-
spm:
80+
spm-build:
16281
name: ${{ matrix.name }}
16382
runs-on: ${{ matrix.runsOn }}
16483
env:
@@ -168,45 +87,43 @@ jobs:
16887
fail-fast: false
16988
matrix:
17089
include:
171-
- name: "macOS 14, SPM 6.0.2 Test"
172-
xcode: "Xcode_16.1"
173-
runsOn: macOS-14
174-
- name: "macOS 14, SPM 5.9.0 Test"
175-
xcode: "Xcode_15.0"
176-
runsOn: macos-14
177-
- name: "macOS 13, SPM 5.8.1 Test"
178-
xcode: "Xcode_14.3.1"
179-
runsOn: macos-13
90+
- { name: "macOS 26, SPM 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26 }
91+
- { name: "macOS 15, SPM 6.0.2", xcode: "Xcode_16.0", runsOn: macOS-15 }
92+
- { name: "macOS 14, SPM 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14 }
93+
- { name: "macOS 14, SPM 5.10.0", xcode: "Xcode_15.3", runsOn: macOS-14 }
18094
steps:
181-
- uses: actions/checkout@v4
182-
- name: ${{ matrix.name }}
95+
- name: Checkout code
96+
uses: actions/checkout@v4
97+
- name: Build with Swift Package Manager - ${{ matrix.name }}
18398
run: swift build -c release --target NetworkLayer
18499

185100
merge-test-reports:
186-
needs: [iOS, macOS, watchOS, tvOS]
101+
needs: test-apple-platforms
187102
runs-on: macos-13
188103
steps:
189104
- name: Download artifacts
190105
uses: actions/download-artifact@v4
191106
with:
192107
path: test_output
193108
- run: xcrun xcresulttool merge test_output/**/*.xcresult --output-path test_output/final/final.xcresult
194-
- name: Upload Merged Artifact
109+
- name: Upload merged test results
195110
uses: actions/upload-artifact@v4
196111
with:
197-
name: MergedResult
112+
name: MergedTestResults
198113
path: test_output/final
114+
retention-days: 30
199115

200116
discover-typos:
201117
name: Discover Typos
202-
runs-on: macOS-13
118+
runs-on: macos-13
203119
env:
204120
DEVELOPER_DIR: /Applications/Xcode_14.1.app/Contents/Developer
205121
steps:
206-
- uses: actions/checkout@v4
122+
- name: Checkout code
123+
uses: actions/checkout@v4
207124
- name: Discover typos
208125
run: |
209126
export PATH="$PATH:/Library/Frameworks/Python.framework/Versions/3.11/bin"
210127
python3 -m pip install --upgrade pip
211128
python3 -m pip install codespell
212-
codespell --ignore-words-list="hart,inout,msdos,sur" --skip="./.build/*,./.git/*"
129+
codespell --ignore-words-list="hart,inout,msdos,sur" --skip="./.build/*,./.git/*"

0 commit comments

Comments
 (0)