Fix for 8474 - Prevent a possible condition of slow snapshots, caused by a rapid series of document update(s) followed by a delete. #20468
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright 2023 Google LLC | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
name: Test All Packages | |
on: pull_request | |
env: | |
# make chromedriver detect installed Chrome version and download the corresponding driver | |
DETECT_CHROMEDRIVER_VERSION: true | |
# The default behavior of chromedriver uses the older Chrome download URLs. We need to override | |
# the behavior to use the new URLs. | |
CHROMEDRIVER_CDNURL: https://googlechromelabs.github.io/ | |
CHROMEDRIVER_CDNBINARIESURL: https://storage.googleapis.com/chrome-for-testing-public | |
CHROME_VALIDATED_VERSION: linux-120.0.6099.71 | |
CHROME_VERSION_MISMATCH_MESSAGE: "The Chrome version doesn't match the previously validated version. Consider updating CHROME_VALIDATED_VERSION in the GitHub workflow if tests pass." | |
artifactRetentionDays: 14 | |
# Bump Node memory limit | |
NODE_OPTIONS: "--max_old_space_size=4096" | |
jobs: | |
build: | |
name: Build the SDK | |
runs-on: ubuntu-latest | |
steps: | |
# Install Chrome so the correct version of webdriver can be installed by chromedriver when | |
# setting up the repo. This must be done to build and execute Auth properly. | |
- name: install Chrome stable | |
run: | | |
npx @puppeteer/browsers install chrome@stable | |
- uses: actions/checkout@v3 | |
- name: Set up Node (20) | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Test setup and yarn install | |
run: | | |
cp config/ci.config.json config/project.json | |
yarn | |
- name: yarn build | |
run: yarn build | |
- name: Archive build | |
if: ${{ !cancelled() }} | |
run: | | |
tar -cf build.tar --exclude=.git . | |
gzip build.tar | |
- name: Upload build archive | |
if: ${{ !cancelled() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build.tar.gz | |
path: build.tar.gz | |
retention-days: ${{ env.artifactRetentionDays }} | |
# Auth and Firestore are built and executed in their own jobs in an attempt to reduce flakiness. | |
test-the-rest: | |
name: (bulk) Node.js and Browser (Chrome) Tests | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
# install Chrome first, so the correct version of webdriver can be installed by chromedriver when setting up the repo | |
- name: install Chrome stable | |
run: | | |
npx @puppeteer/browsers install chrome@stable | |
- name: Download build archive | |
uses: actions/download-artifact@v3 | |
with: | |
name: build.tar.gz | |
- name: Unzip build artifact | |
run: tar xf build.tar.gz | |
- name: Set up Node (20) | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Test setup and yarn install | |
run: | | |
cp config/ci.config.json config/project.json | |
yarn | |
- name: Set start timestamp env var | |
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV | |
- name: Run unit tests | |
# Ignore auth and firestore since they're handled in their own separate jobs. | |
run: | | |
xvfb-run yarn lerna run --ignore '{firebase-messaging-integration-test,@firebase/auth*,@firebase/firestore*,firebase-firestore-integration-test}' test:ci | |
node scripts/print_test_logs.js | |
env: | |
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} | |
- name: Generate coverage file | |
run: yarn ci:coverage | |
- name: Run coverage | |
uses: coverallsapp/github-action@master | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
path-to-lcov: ./lcov-all.info | |
continue-on-error: true | |
test-auth: | |
name: (Auth) Node.js and Browser (Chrome) Tests | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
# install Chrome first, so the correct version of webdriver can be installed by chromedriver | |
# when setting up the repo | |
- name: install Chrome stable | |
run: | | |
npx @puppeteer/browsers install chrome@stable | |
chromeVersionString=$(ls chrome) | |
if [ "$CHROME_VALIDATED_VERSION" != "$chromeVersionString" ]; then | |
echo "::warning ::The Chrome version doesn't match the previously validated version. Consider updating CHROME_VALIDATED_VERSION in the GitHub workflow if tests pass." | |
echo "::warning ::Previously validated version: ${CHROME_VALIDATED_VERSION} vs. Installed version: $chromeVersionString" | |
echo "CHROME_VERSION_NOTES=$CHROME_VERSION_MISMATCH_MESSAGE" >> "$GITHUB_ENV" | |
fi | |
- name: Test Evn TEMP | |
run: | | |
echo $CHROME_VERSION_NOTES=$CHROME_VERSION_MISMATCH_MESSAGE | |
- name: Download build archive | |
uses: actions/download-artifact@v3 | |
with: | |
name: build.tar.gz | |
- name: Unzip build artifact | |
run: tar xf build.tar.gz | |
- name: Set up Node (20) | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Test setup and yarn install | |
run: | | |
cp config/ci.config.json config/project.json | |
yarn | |
- name: Set start timestamp env var | |
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV | |
- name: Run unit tests | |
run: | | |
xvfb-run yarn lerna run test:ci --scope '@firebase/auth*' | |
node scripts/print_test_logs.js | |
env: | |
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} | |
- name: Generate coverage file | |
run: yarn ci:coverage | |
- name: Run coverage | |
uses: coverallsapp/github-action@master | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
path-to-lcov: ./lcov-all.info | |
continue-on-error: true | |
test-firestore: | |
name: (Firestore) Node.js and Browser (Chrome) Tests | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
# install Chrome so the correct version of webdriver can be installed by chromedriver when setting up the repo | |
- name: install Chrome stable | |
run: | | |
npx @puppeteer/browsers install chrome@stable | |
- name: Download build archive | |
uses: actions/download-artifact@v3 | |
with: | |
name: build.tar.gz | |
- name: Unzip build artifact | |
run: tar xf build.tar.gz | |
- name: Set up Node (20) | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Test setup and yarn install | |
run: | | |
cp config/ci.config.json config/project.json | |
yarn | |
- name: Set start timestamp env var | |
run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV | |
- name: Run unit tests | |
run: | | |
xvfb-run yarn lerna run test:ci --scope '@firebase/firestore*' | |
node scripts/print_test_logs.js | |
env: | |
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} | |
EXPERIMENTAL_MODE: true | |
- name: Generate coverage file | |
run: yarn ci:coverage | |
- name: Run coverage | |
uses: coverallsapp/github-action@master | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
path-to-lcov: ./lcov-all.info | |
continue-on-error: true | |
test-firestore-integration: | |
strategy: | |
fail-fast: false | |
matrix: | |
persistence: ['memory', 'persistence'] | |
name: Firestore Integration Tests (${{ matrix.persistence }}) | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
# install Chrome so the correct version of webdriver can be installed by chromedriver when setting up the repo | |
- name: install Chrome stable | |
run: | | |
npx @puppeteer/browsers install chrome@stable | |
- name: Download build archive | |
uses: actions/download-artifact@v3 | |
with: | |
name: build.tar.gz | |
- name: Unzip build artifact | |
run: tar xf build.tar.gz | |
- name: Set up Node (20) | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- run: cp config/ci.config.json config/project.json | |
- run: yarn | |
- run: yarn build:${{ matrix.persistence }} | |
working-directory: integration/firestore | |
- run: xvfb-run yarn karma:singlerun | |
working-directory: integration/firestore | |
env: | |
FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} |