name: Testing on: workflow_dispatch: push: branches: - "main" - "rc" - "hotfix-rc-*" pull_request: types: [opened, synchronize] jobs: test: name: Run tests runs-on: ubuntu-22.04 permissions: checks: write contents: read pull-requests: write steps: - name: Check out repo uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - 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@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 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 # We use isolatedModules: true which disables typechecking in tests # Tests in apps/ are typechecked when their app is built, so we just do it here for libs/ # See https://bitwarden.atlassian.net/browse/EC-497 - name: Run typechecking run: npm run test:types - name: Run tests # 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 - name: Report test results uses: dorny/test-reporter@eaa763f6ffc21c7a37837f56cd5f9737f27fc6c8 # v1.8.0 if: always() with: name: Test Results path: "junit.xml" reporter: jest-junit fail-on-error: true - name: Check for Codecov secret id: check-codecov-secret run: | if [ "${{ secrets.CODECOV_TOKEN }}" != '' ]; then echo "available=true" >> $GITHUB_OUTPUT; else echo "available=false" >> $GITHUB_OUTPUT; fi - name: Upload to codecov.io uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0 if: steps.check-codecov-secret.outputs.available == 'true' env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} rust: name: Run Rust tests on ${{ matrix.os }} runs-on: ${{ matrix.os || 'ubuntu-latest' }} permissions: contents: read strategy: matrix: os: - ubuntu-latest - macos-latest - windows-latest steps: - name: Check Rust version run: rustup --version - name: Install gnome-keyring if: ${{ matrix.os=='ubuntu-latest' }} run: | sudo apt-get update sudo apt-get install -y gnome-keyring dbus-x11 - name: Check out repo uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Build working-directory: ./apps/desktop/desktop_native run: cargo build - name: Test Ubuntu if: ${{ matrix.os=='ubuntu-latest' }} working-directory: ./apps/desktop/desktop_native run: | eval "$(dbus-launch --sh-syntax)" mkdir -p ~/.cache mkdir -p ~/.local/share/keyrings eval "$(printf '\n' | gnome-keyring-daemon --unlock)" eval "$(printf '\n' | /usr/bin/gnome-keyring-daemon --start)" cargo test -- --test-threads=1 - name: Test Windows / macOS if: ${{ matrix.os!='ubuntu-latest' }} working-directory: ./apps/desktop/desktop_native run: cargo test -- --test-threads=1