mirror of
https://github.com/bitwarden/browser
synced 2026-01-30 16:23:53 +00:00
GH Testing workflow separation to fix OOM kill, timeout issues (#18594)
* testing workflow oom kill fix
* testing workflow oom kill fix
* Adding job to verify all tests complete successfully
(cherry picked from commit 845bafeb95)
* needs code cov
---------
Co-authored-by: Andy Pixley <3723676+pixman20@users.noreply.github.com>
This commit is contained in:
147
.github/workflows/test.yml
vendored
147
.github/workflows/test.yml
vendored
@@ -14,13 +14,11 @@ permissions: {}
|
||||
|
||||
jobs:
|
||||
|
||||
testing:
|
||||
name: Run tests
|
||||
typecheck:
|
||||
name: Run typechecking
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
checks: write
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
@@ -56,17 +54,81 @@ jobs:
|
||||
- name: Run typechecking
|
||||
run: npm run test:types
|
||||
|
||||
- name: Run tests
|
||||
testing:
|
||||
name: Run tests - ${{ matrix.test-group.name }}
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
checks: write
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-group:
|
||||
- name: Browser
|
||||
paths: apps/browser bitwarden_license/bit-browser
|
||||
artifact: jest-coverage-browser
|
||||
junit: junit-browser.xml
|
||||
- name: Web
|
||||
paths: apps/web bitwarden_license/bit-web
|
||||
artifact: jest-coverage-web
|
||||
junit: junit-web.xml
|
||||
- name: Desktop
|
||||
paths: apps/desktop
|
||||
artifact: jest-coverage-desktop
|
||||
junit: junit-desktop.xml
|
||||
- name: CLI
|
||||
paths: apps/cli bitwarden_license/bit-cli
|
||||
artifact: jest-coverage-cli
|
||||
junit: junit-cli.xml
|
||||
- name: Libs
|
||||
paths: libs bitwarden_license/bit-common
|
||||
artifact: jest-coverage-libs
|
||||
junit: junit-libs.xml
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get Node Version
|
||||
id: retrieve-node-version
|
||||
run: |
|
||||
NODE_NVMRC=$(cat .nvmrc)
|
||||
NODE_VERSION=${NODE_NVMRC/v/''}
|
||||
echo "node_version=$NODE_VERSION" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
||||
with:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: '**/package-lock.json'
|
||||
node-version: ${{ steps.retrieve-node-version.outputs.node_version }}
|
||||
|
||||
- name: Print environment
|
||||
run: |
|
||||
node --version
|
||||
npm --version
|
||||
|
||||
- name: Install Node dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run tests - ${{ matrix.test-group.name }}
|
||||
# maxWorkers is a workaround for a memory leak that crashes tests in CI:
|
||||
# https://github.com/facebook/jest/issues/9430#issuecomment-1149882002
|
||||
run: npm test -- --coverage --maxWorkers=3
|
||||
# Reduced to 2 workers and split tests across parallel jobs to prevent OOM kills
|
||||
run: npm test -- ${{ matrix.test-group.paths }} --coverage --maxWorkers=2
|
||||
env:
|
||||
JEST_JUNIT_OUTPUT_NAME: ${{ matrix.test-group.junit }}
|
||||
|
||||
- name: Report test results
|
||||
uses: dorny/test-reporter@b082adf0eced0765477756c2a610396589b8c637 # v2.5.0
|
||||
if: ${{ github.event.pull_request.head.repo.full_name == github.repository && !cancelled() }}
|
||||
with:
|
||||
name: Test Results
|
||||
path: "junit.xml"
|
||||
name: Test Results - ${{ matrix.test-group.name }}
|
||||
path: ${{ matrix.test-group.junit }}
|
||||
reporter: jest-junit
|
||||
fail-on-error: true
|
||||
|
||||
@@ -78,7 +140,7 @@ jobs:
|
||||
- name: Upload test coverage
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
name: jest-coverage
|
||||
name: ${{ matrix.test-group.artifact }}
|
||||
path: ./coverage/lcov.info
|
||||
|
||||
rust:
|
||||
@@ -183,11 +245,35 @@ jobs:
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Download jest coverage
|
||||
- name: Download Browser coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: jest-coverage
|
||||
path: ./
|
||||
name: jest-coverage-browser
|
||||
path: ./jest-coverage-browser
|
||||
|
||||
- name: Download Web coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: jest-coverage-web
|
||||
path: ./jest-coverage-web
|
||||
|
||||
- name: Download Desktop coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: jest-coverage-desktop
|
||||
path: ./jest-coverage-desktop
|
||||
|
||||
- name: Download CLI coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: jest-coverage-cli
|
||||
path: ./jest-coverage-cli
|
||||
|
||||
- name: Download Libs coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
with:
|
||||
name: jest-coverage-libs
|
||||
path: ./jest-coverage-libs
|
||||
|
||||
- name: Download rust coverage
|
||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
||||
@@ -199,5 +285,40 @@ jobs:
|
||||
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
||||
with:
|
||||
files: |
|
||||
./lcov.info
|
||||
./jest-coverage-browser/lcov.info
|
||||
./jest-coverage-web/lcov.info
|
||||
./jest-coverage-desktop/lcov.info
|
||||
./jest-coverage-cli/lcov.info
|
||||
./jest-coverage-libs/lcov.info
|
||||
./apps/desktop/desktop_native/lcov.info
|
||||
|
||||
run-tests: # Verifies all required tests complete successfully
|
||||
name: Run tests
|
||||
runs-on: ubuntu-24.04
|
||||
if: always()
|
||||
needs:
|
||||
- typecheck
|
||||
- testing
|
||||
- rust
|
||||
- rust-coverage
|
||||
- upload-codecov
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Check job results
|
||||
env:
|
||||
NEEDS: ${{ toJSON(needs) }}
|
||||
run: |
|
||||
# Print status of all jobs
|
||||
echo "$NEEDS" | jq -r 'to_entries[] | "\(.key): \(.value.result)"'
|
||||
|
||||
# Collect failed jobs
|
||||
failed_jobs=$(echo "$NEEDS" | jq -r 'to_entries[] | select(.value.result != "success") | .key' | tr '\n' ' ')
|
||||
|
||||
if [ -n "$failed_jobs" ]; then
|
||||
echo "::error::The following jobs failed:$failed_jobs"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "All required jobs passed successfully!"
|
||||
|
||||
Reference in New Issue
Block a user