Skip to content

Commit 0e0c4b7

Browse files
ci: separate into 3 jobs so tests can easily be re-run
1 parent d3d1f7b commit 0e0c4b7

File tree

1 file changed

+111
-36
lines changed

1 file changed

+111
-36
lines changed

.github/workflows/swiftui-auth.yml

Lines changed: 111 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,76 @@ permissions:
2222
contents: read
2323

2424
jobs:
25-
swiftui-auth:
25+
# Package Unit Tests (standalone, no emulator needed)
26+
unit-tests:
27+
name: Package Unit Tests
2628
runs-on: macos-15
27-
timeout-minutes: 60
29+
timeout-minutes: 10
2830
steps:
2931
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
32+
33+
- name: Install xcpretty
34+
run: gem install xcpretty
35+
36+
- name: Select Xcode version
37+
run: sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
38+
39+
- name: Run FirebaseSwiftUI Package Unit Tests
40+
run: |
41+
set -o pipefail
42+
xcodebuild test \
43+
-scheme FirebaseUI-Package \
44+
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
45+
-enableCodeCoverage YES \
46+
-resultBundlePath FirebaseSwiftUIPackageTests.xcresult | tee FirebaseSwiftUIPackageTests.log | xcpretty --test --color --simple
47+
48+
- name: Upload test logs
49+
if: failure()
50+
uses: actions/upload-artifact@v4
51+
with:
52+
name: unit-tests-logs
53+
path: FirebaseSwiftUIPackageTests.log
54+
55+
- name: Upload test results
56+
if: failure()
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: unit-tests-results
60+
path: FirebaseSwiftUIPackageTests.xcresult
61+
62+
# Integration Tests (requires emulator)
63+
integration-tests:
64+
name: Integration Tests
65+
runs-on: macos-15
66+
timeout-minutes: 20
67+
steps:
68+
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
69+
3070
- uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a
3171
name: Install Node.js 20
3272
with:
3373
node-version: '20'
74+
3475
- uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b
3576
with:
3677
distribution: 'temurin'
3778
java-version: '17'
79+
3880
- name: Install Firebase
39-
run: |
40-
sudo npm i -g firebase-tools
81+
run: sudo npm i -g firebase-tools
82+
4183
- name: Start Firebase Emulator
4284
run: |
43-
sudo chown -R 501:20 "/Users/runner/.npm" && cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample && ./start-firebase-emulator.sh
85+
sudo chown -R 501:20 "/Users/runner/.npm"
86+
cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample
87+
./start-firebase-emulator.sh
88+
4489
- name: Install xcpretty
4590
run: gem install xcpretty
91+
4692
- name: Select Xcode version
47-
run: |
48-
sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
49-
- name: Run FirebaseSwiftUI Package Unit Tests
50-
run: |
51-
set -o pipefail
52-
xcodebuild test -scheme FirebaseUI-Package -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -enableCodeCoverage YES -resultBundlePath FirebaseSwiftUIPackageTests.xcresult | tee FirebaseSwiftUIPackageTests.log | xcpretty --test --color --simple
53-
# Build for integration tests (builds app + integration test bundle)
93+
run: sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
94+
5495
- name: Build for Integration Tests
5596
run: |
5697
cd ./samples/swiftui/FirebaseSwiftUIExample
@@ -59,7 +100,7 @@ jobs:
59100
-scheme FirebaseSwiftUIExampleTests \
60101
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
61102
-enableCodeCoverage YES | xcpretty --color --simple
62-
# Run integration tests
103+
63104
- name: Run Integration Tests
64105
run: |
65106
cd ./samples/swiftui/FirebaseSwiftUIExample
@@ -69,7 +110,54 @@ jobs:
69110
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
70111
-enableCodeCoverage YES \
71112
-resultBundlePath FirebaseSwiftUIExampleTests.xcresult | tee FirebaseSwiftUIExampleTests.log | xcpretty --test --color --simple
72-
# Build for UI tests (reuses app build, builds UI test bundle)
113+
114+
- name: Upload test logs
115+
if: failure()
116+
uses: actions/upload-artifact@v4
117+
with:
118+
name: integration-tests-logs
119+
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log
120+
121+
- name: Upload test results
122+
if: failure()
123+
uses: actions/upload-artifact@v4
124+
with:
125+
name: integration-tests-results
126+
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult
127+
128+
# UI Tests (requires emulator)
129+
ui-tests:
130+
name: UI Tests
131+
runs-on: macos-15
132+
timeout-minutes: 30
133+
steps:
134+
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
135+
136+
- uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a
137+
name: Install Node.js 20
138+
with:
139+
node-version: '20'
140+
141+
- uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b
142+
with:
143+
distribution: 'temurin'
144+
java-version: '17'
145+
146+
- name: Install Firebase
147+
run: sudo npm i -g firebase-tools
148+
149+
- name: Start Firebase Emulator
150+
run: |
151+
sudo chown -R 501:20 "/Users/runner/.npm"
152+
cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample
153+
./start-firebase-emulator.sh
154+
155+
- name: Install xcpretty
156+
run: gem install xcpretty
157+
158+
- name: Select Xcode version
159+
run: sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
160+
73161
- name: Build for UI Tests
74162
run: |
75163
cd ./samples/swiftui/FirebaseSwiftUIExample
@@ -78,8 +166,8 @@ jobs:
78166
-scheme FirebaseSwiftUIExampleUITests \
79167
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
80168
-enableCodeCoverage YES | xcpretty --color --simple
81-
# Run UI tests
82-
- name: Run View UI Tests
169+
170+
- name: Run UI Tests
83171
run: |
84172
cd ./samples/swiftui/FirebaseSwiftUIExample
85173
set -o pipefail
@@ -90,30 +178,17 @@ jobs:
90178
-maximum-concurrent-test-simulator-destinations 2 \
91179
-enableCodeCoverage YES \
92180
-resultBundlePath FirebaseSwiftUIExampleUITests.xcresult | tee FirebaseSwiftUIExampleUITests.log | xcpretty --test --color --simple
181+
93182
- name: Upload test logs
94183
if: failure()
95184
uses: actions/upload-artifact@v4
96185
with:
97-
name: swiftui-auth-test-logs
98-
path: |
99-
FirebaseSwiftUIPackageTests.log
100-
samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log
101-
samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.log
102-
- name: Upload FirebaseSwiftUIExampleUITests.xcresult bundle
103-
if: failure()
104-
uses: actions/upload-artifact@v4
105-
with:
106-
name: FirebaseSwiftUIExampleUITests.xcresult
107-
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult
108-
- name: Upload FirebaseSwiftUIExampleTests.xcresult bundle
109-
if: failure()
110-
uses: actions/upload-artifact@v4
111-
with:
112-
name: FirebaseSwiftUIExampleTests.xcresult
113-
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult
114-
- name: Upload FirebaseSwiftUIPackageTests.xcresult bundle
186+
name: ui-tests-logs
187+
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.log
188+
189+
- name: Upload test results
115190
if: failure()
116191
uses: actions/upload-artifact@v4
117192
with:
118-
name: FirebaseSwiftUIPackageTests.xcresult
119-
path: FirebaseSwiftUIPackageTests.xcresult
193+
name: ui-tests-results
194+
path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult

0 commit comments

Comments
 (0)