Skip to content

Commit 114bc6e

Browse files
authored
[CI] TestAllJobs - create separate jobs for Auth and Firestore (#7353)
Created separate jobs in the Test All workflow for both Auth and Firestore. These two tests have a history of flaking when execute in the same job as the other tests. Breaking them-out into their own jobs may reduce the flake and isolate re-attempts at executing the test. Also created a step to build the SDK. The various test domains (Auth, Firestore and the rest) no use the results from the build step to run the tests. This reduces the time needed to re-run flakey tests from 40 minutes to: Auth: ~8 minutes Firestore: ~15 minutes Others: ~15 minutes
1 parent aaf3fa3 commit 114bc6e

File tree

1 file changed

+137
-5
lines changed

1 file changed

+137
-5
lines changed

.github/workflows/test-all.yml

Lines changed: 137 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ on:
77
env:
88
# make chromedriver detect installed Chrome version and download the corresponding driver
99
DETECT_CHROMEDRIVER_VERSION: true
10+
artifactRetentionDays: 2
1011

1112
jobs:
12-
test:
13-
name: Node.js and Browser (Chrome) Tests
13+
build:
14+
name: Build the SDK
1415
runs-on: ubuntu-latest
15-
1616
steps:
17-
# install Chrome first, so the correct version of webdriver can be installed by chromedriver when setting up the repo
17+
# Install Chrome so the correct version of webdriver can be installed by chromedriver when
18+
# setting up the repo. This must be done to build and execute Auth properly.
1819
- name: install Chrome stable
1920
# Install Chrome version 110.0.5481.177-1 as some Auth tests start to fail on version 111.
2021
# Temporary: Auth team will explore what's going wrong with the auth tests.
@@ -36,11 +37,142 @@ jobs:
3637
yarn
3738
- name: yarn build
3839
run: yarn build
40+
- name: Archive build
41+
if: ${{ !cancelled() }}
42+
run: |
43+
tar -cf build.tar .
44+
gzip build.tar
45+
- name: Upload build archive
46+
if: ${{ !cancelled() }}
47+
uses: actions/upload-artifact@v3
48+
with:
49+
name: build.tar.gz
50+
path: build.tar.gz
51+
retention-days: ${{ env.artifactRetentionDays }}
52+
53+
# Auth and Firestore are built and executed in their own jobs in an attempt to reduce flakiness.
54+
test-the-rest:
55+
name: (bulk) Node.js and Browser (Chrome) Tests
56+
needs: build
57+
runs-on: ubuntu-latest
58+
steps:
59+
# install Chrome first, so the correct version of webdriver can be installed by chromedriver when setting up the repo
60+
- name: install Chrome stable
61+
run: |
62+
sudo apt-get update
63+
sudo apt-get install google-chrome-stable
64+
- name: Download build archive
65+
uses: actions/download-artifact@v3
66+
with:
67+
name: build.tar.gz
68+
- name: Unzip build artifact
69+
run: tar xf build.tar.gz
70+
- name: Set up Node (16)
71+
uses: actions/setup-node@v3
72+
with:
73+
node-version: 16.x
74+
- name: Bump Node memory limit
75+
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
76+
- name: Test setup and yarn install
77+
run: |
78+
cp config/ci.config.json config/project.json
79+
yarn
80+
- name: Set start timestamp env var
81+
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV
82+
- name: Run unit tests
83+
# Ignore auth and firestore since they're handled in their own separate jobs.
84+
run: |
85+
xvfb-run lerna run --ignore '{firebase-messaging-integration-test,@firebase/auth*,@firebase/firestore*,firebase-firestore-integration-test}' --concurrency 4 test:ci
86+
node scripts/print_test_logs.js
87+
env:
88+
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }}
89+
- name: Generate coverage file
90+
run: yarn ci:coverage
91+
- name: Run coverage
92+
uses: coverallsapp/github-action@master
93+
with:
94+
github-token: ${{ secrets.GITHUB_TOKEN }}
95+
path-to-lcov: ./lcov-all.info
96+
continue-on-error: true
97+
98+
test-auth:
99+
name: (Auth) Node.js and Browser (Chrome) Tests
100+
needs: build
101+
runs-on: ubuntu-latest
102+
steps:
103+
# install Chrome so the correct version of webdriver can be installed by chromedriver when setting up the repo
104+
- name: install Chrome stable
105+
# Install Chrome version 110.0.5481.177-1 as some Auth tests start to fail on version 111.
106+
# Temporary: Auth team will explore what's going wrong with the auth tests.
107+
run: |
108+
sudo apt-get update
109+
sudo apt-get install wget
110+
sudo wget http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_110.0.5481.177-1_amd64.deb
111+
sudo apt-get install -f ./google-chrome-stable_110.0.5481.177-1_amd64.deb --allow-downgrades
112+
- name: Download build archive
113+
uses: actions/download-artifact@v3
114+
with:
115+
name: build.tar.gz
116+
- name: Unzip build artifact
117+
run: tar xf build.tar.gz
118+
- name: Set up Node (16)
119+
uses: actions/setup-node@v3
120+
with:
121+
node-version: 16.x
122+
- name: Bump Node memory limit
123+
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
124+
- name: Test setup and yarn install
125+
run: |
126+
cp config/ci.config.json config/project.json
127+
yarn
128+
- name: Set start timestamp env var
129+
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV
130+
- name: Run unit tests
131+
run: |
132+
xvfb-run lerna run --concurrency 4 test:ci --scope '@firebase/auth*'
133+
node scripts/print_test_logs.js
134+
env:
135+
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }}
136+
- name: Generate coverage file
137+
run: yarn ci:coverage
138+
- name: Run coverage
139+
uses: coverallsapp/github-action@master
140+
with:
141+
github-token: ${{ secrets.GITHUB_TOKEN }}
142+
path-to-lcov: ./lcov-all.info
143+
continue-on-error: true
144+
145+
test-firestore:
146+
name: (Firestore) Node.js and Browser (Chrome) Tests
147+
needs: build
148+
runs-on: ubuntu-latest
149+
steps:
150+
# install Chrome so the correct version of webdriver can be installed by chromedriver when setting up the repo
151+
- name: install Chrome stable
152+
run: |
153+
sudo apt-get update
154+
sudo apt-get install google-chrome-stable
155+
- name: Download build archive
156+
uses: actions/download-artifact@v3
157+
with:
158+
name: build.tar.gz
159+
- name: Unzip build artifact
160+
run: tar xf build.tar.gz
161+
- name: Set up Node (16)
162+
uses: actions/setup-node@v3
163+
with:
164+
node-version: 16.x
165+
- name: Bump Node memory limit
166+
run: echo "NODE_OPTIONS=--max_old_space_size=4096" >> $GITHUB_ENV
167+
- name: Test setup and yarn install
168+
run: |
169+
cp config/ci.config.json config/project.json
170+
yarn
39171
- name: Set start timestamp env var
40172
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV
41173
- name: Run unit tests
42174
run: |
43-
xvfb-run yarn test:ci
175+
xvfb-run lerna run --concurrency 4 test:ci --scope '{@firebase/firestore*,firebase-firestore-integration-test}'
44176
node scripts/print_test_logs.js
45177
env:
46178
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }}

0 commit comments

Comments
 (0)