Skip to content

Commit e8d712d

Browse files
authored
ci(fdc): improve CI for FDC (#18238)
* ci(fdc): improve CI for FDC * try * more debug logs * fix that * improve tests
1 parent b9c8a9e commit e8d712d

4 files changed

Lines changed: 182 additions & 104 deletions

File tree

.github/workflows/e2e_tests_fdc.yaml

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,15 @@ jobs:
5252
- name: 'Install Tools'
5353
run: |
5454
sudo npm i -g firebase-tools
55-
echo "FIREBASE_TOOLS_VERSION=$(npm firebase --version)" >> $GITHUB_ENV
55+
echo "FIREBASE_TOOLS_VERSION=$(firebase --version)" >> $GITHUB_ENV
5656
- name: Firebase Emulator Cache
5757
id: firebase-emulator-cache
5858
uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7
5959
continue-on-error: true
6060
with:
61-
# The firebase emulators are pure javascript and java, OS-independent
62-
enableCrossOsArchive: true
6361
# Must match the save path exactly
6462
path: ~/.cache/firebase/emulators
65-
key: firebase-emulators-v3-${{ env.FIREBASE_TOOLS_VERSION }}
66-
restore-keys: firebase-emulators-v3
63+
key: firebase-emulators-v4-${{ runner.os }}-${{ env.FIREBASE_TOOLS_VERSION }}
6764
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff
6865
with:
6966
channel: 'stable'
@@ -81,6 +78,7 @@ jobs:
8178
- name: Start Firebase Emulator
8279
run: |
8380
cd ./packages/firebase_data_connect/firebase_data_connect/example
81+
pkill -x postgres || true
8482
unset PGSERVICEFILE
8583
firebase experiments:enable dataconnect
8684
./start-firebase-emulator.sh
@@ -136,8 +134,6 @@ jobs:
136134
uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7
137135
continue-on-error: true
138136
with:
139-
# The firebase emulators are pure javascript and java, OS-independent
140-
enableCrossOsArchive: true
141137
key: ${{ steps.firebase-emulator-cache.outputs.cache-primary-key }}
142138
# Must match the restore path exactly
143139
path: ~/.cache/firebase/emulators
@@ -179,18 +175,15 @@ jobs:
179175
- name: 'Install Tools'
180176
run: |
181177
sudo npm i -g firebase-tools
182-
echo "FIREBASE_TOOLS_VERSION=$(npm firebase --version)" >> $GITHUB_ENV
178+
echo "FIREBASE_TOOLS_VERSION=$(firebase --version)" >> $GITHUB_ENV
183179
- name: Firebase Emulator Cache
184180
id: firebase-emulator-cache
185181
uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7
186182
continue-on-error: true
187183
with:
188-
# The firebase emulators are pure javascript and java, OS-independent
189-
enableCrossOsArchive: true
190184
# Must match the save path exactly
191185
path: ~/.cache/firebase/emulators
192-
key: firebase-emulators-v3-${{ env.FIREBASE_TOOLS_VERSION }}
193-
restore-keys: firebase-emulators-v3
186+
key: firebase-emulators-v4-${{ runner.os }}-${{ env.FIREBASE_TOOLS_VERSION }}
194187
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff
195188
with:
196189
channel: 'stable'
@@ -218,6 +211,7 @@ jobs:
218211
run: |
219212
sudo chown -R 501:20 "/Users/runner/.npm"
220213
cd ./packages/firebase_data_connect/firebase_data_connect/example
214+
pkill -x postgres || true
221215
unset PGSERVICEFILE
222216
firebase experiments:enable dataconnect
223217
./start-firebase-emulator.sh
@@ -232,10 +226,9 @@ jobs:
232226
run: |
233227
# Uncomment following line to have simulator logs printed out for debugging purposes.
234228
# xcrun simctl spawn booted log stream --predicate 'eventMessage contains "flutter"' &
235-
# The iOS simulator sometimes fails to connect the VM Service, hanging for
236-
# 12 minutes before timing out. Use a 6-minute limit and retry once with
237-
# a simulator reboot. Normal connection takes 30s-5min.
238-
perl -e 'alarm 360; exec @ARGV' -- flutter test integration_test/e2e_test.dart -d "$SIMULATOR" --dart-define=CI=true --timeout 10x || {
229+
# The iOS simulator sometimes fails to connect the VM Service. Keep a
230+
# limit around the full test command and retry once with a simulator reboot.
231+
perl -e 'alarm 900; exec @ARGV' -- flutter test integration_test/e2e_test.dart -d "$SIMULATOR" --dart-define=CI=true --timeout 10x || {
239232
echo "First attempt failed or timed out. Rebooting simulator and retrying..."
240233
xcrun simctl shutdown "$SIMULATOR" || true
241234
xcrun simctl boot "$SIMULATOR"
@@ -248,8 +241,6 @@ jobs:
248241
uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7
249242
continue-on-error: true
250243
with:
251-
# The firebase emulators are pure javascript and java, OS-independent
252-
enableCrossOsArchive: true
253244
key: ${{ steps.firebase-emulator-cache.outputs.cache-primary-key }}
254245
# Must match the restore path exactly
255246
path: ~/.cache/firebase/emulators
@@ -295,22 +286,20 @@ jobs:
295286
- name: 'Install Tools'
296287
run: |
297288
sudo npm i -g firebase-tools
298-
echo "FIREBASE_TOOLS_VERSION=$(npm firebase --version)" >> $GITHUB_ENV
289+
echo "FIREBASE_TOOLS_VERSION=$(firebase --version)" >> $GITHUB_ENV
299290
- name: Firebase Emulator Cache
300291
id: firebase-emulator-cache
301292
uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7
302293
continue-on-error: true
303294
with:
304-
# The firebase emulators are pure javascript and java, OS-independent
305-
enableCrossOsArchive: true
306295
# Must match the save path exactly
307296
path: ~/.cache/firebase/emulators
308-
key: firebase-emulators-v3-${{ env.FIREBASE_TOOLS_VERSION }}
309-
restore-keys: firebase-emulators-v3
297+
key: firebase-emulators-v4-${{ runner.os }}-${{ env.FIREBASE_TOOLS_VERSION }}
310298
- name: Start Firebase Emulator
311299
run: |
312300
sudo chown -R 501:20 "/Users/runner/.npm"
313301
cd ./packages/firebase_data_connect/firebase_data_connect/example
302+
pkill -x postgres || true
314303
unset PGSERVICEFILE
315304
firebase experiments:enable dataconnect
316305
./start-firebase-emulator.sh
@@ -336,8 +325,6 @@ jobs:
336325
uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7
337326
continue-on-error: true
338327
with:
339-
# The firebase emulators are pure javascript and java, OS-independent
340-
enableCrossOsArchive: true
341328
key: ${{ steps.firebase-emulator-cache.outputs.cache-primary-key }}
342329
# Must match the restore path exactly
343330
path: ~/.cache/firebase/emulators
@@ -374,21 +361,19 @@ jobs:
374361
- name: 'Install Tools'
375362
run: |
376363
sudo npm i -g firebase-tools
377-
echo "FIREBASE_TOOLS_VERSION=$(npm firebase --version)" >> $GITHUB_ENV
364+
echo "FIREBASE_TOOLS_VERSION=$(firebase --version)" >> $GITHUB_ENV
378365
- name: Firebase Emulator Cache
379366
id: firebase-emulator-cache
380367
uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7
381368
continue-on-error: true
382369
with:
383-
# The firebase emulators are pure javascript and java, OS-independent
384-
enableCrossOsArchive: true
385370
# Must match the save path exactly
386371
path: ~/.cache/firebase/emulators
387-
key: firebase-emulators-v3-${{ env.FIREBASE_TOOLS_VERSION }}
388-
restore-keys: firebase-emulators-v3
372+
key: firebase-emulators-v4-${{ runner.os }}-${{ env.FIREBASE_TOOLS_VERSION }}
389373
- name: Start Firebase Emulator
390374
run: |
391375
cd ./packages/firebase_data_connect/firebase_data_connect/example
376+
pkill -x postgres || true
392377
unset PGSERVICEFILE
393378
firebase experiments:enable dataconnect
394379
./start-firebase-emulator.sh
@@ -415,8 +400,6 @@ jobs:
415400
uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7
416401
continue-on-error: true
417402
with:
418-
# The firebase emulators are pure javascript and java, OS-independent
419-
enableCrossOsArchive: true
420403
key: ${{ steps.firebase-emulator-cache.outputs.cache-primary-key }}
421404
# Must match the restore path exactly
422405
path: ~/.cache/firebase/emulators

packages/firebase_data_connect/firebase_data_connect/example/integration_test/e2e_test.dart

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,36 @@ import 'listen_e2e.dart';
1616
import 'query_e2e.dart';
1717
import 'websocket_e2e.dart';
1818

19+
Future<void> _signInTestUser() async {
20+
final auth = FirebaseAuth.instance;
21+
const password = 'password';
22+
final email = 'fdc-test-${DateTime.now().microsecondsSinceEpoch}@mail.com';
23+
24+
for (var attempt = 0; attempt < 5; attempt++) {
25+
try {
26+
await auth.createUserWithEmailAndPassword(
27+
email: email,
28+
password: password,
29+
);
30+
return;
31+
} on FirebaseAuthException catch (e) {
32+
if (e.code == 'email-already-in-use') {
33+
await auth.signInWithEmailAndPassword(
34+
email: email,
35+
password: password,
36+
);
37+
return;
38+
}
39+
40+
if (attempt == 4) {
41+
rethrow;
42+
}
43+
}
44+
45+
await Future<void>.delayed(Duration(seconds: attempt + 1));
46+
}
47+
}
48+
1949
void main() {
2050
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
2151

@@ -31,8 +61,7 @@ void main() {
3161
.useDataConnectEmulator('127.0.0.1', 9399);
3262
await FirebaseAuth.instance.useAuthEmulator('127.0.0.1', 9099);
3363

34-
await FirebaseAuth.instance.createUserWithEmailAndPassword(
35-
email: 'test@mail.com', password: 'password');
64+
await _signInTestUser();
3665
});
3766

3867
runInstanceTests();

0 commit comments

Comments
 (0)