name: Tests on: pull_request: {} merge_group: types: [checks_requested] push: branches: [develop, master] repository_dispatch: types: [element-web-notify] workflow_call: inputs: disable_coverage: type: boolean required: false description: "Specify true to skip generating and uploading coverage for tests" matrix-js-sdk-sha: type: string required: false description: "The matrix-js-sdk SHA to use" concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} cancel-in-progress: true env: ENABLE_COVERAGE: ${{ github.event_name != 'merge_group' && inputs.disable_coverage != 'true' }} # fetchdep.sh needs to know our PR number PR_NUMBER: ${{ github.event.pull_request.number }} permissions: {} jobs: jest: name: Jest runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: # Run multiple instances in parallel to speed up the tests runner: [1, 2] steps: - name: Checkout code uses: actions/checkout@v4 with: repository: ${{ inputs.matrix-js-sdk-sha && 'element-hq/element-web' || github.repository }} - name: Yarn cache uses: actions/setup-node@v4 with: node-version: "lts/*" cache: "yarn" - name: Install Deps run: "./scripts/layered.sh" env: JS_SDK_GITHUB_BASE_REF: ${{ inputs.matrix-js-sdk-sha }} - name: Jest Cache uses: actions/cache@v4 with: path: /tmp/jest_cache key: ${{ hashFiles('**/yarn.lock') }} - name: Get number of CPU cores id: cpu-cores uses: SimenB/github-actions-cpu-cores@97ba232459a8e02ff6121db9362b09661c875ab8 # v2 - name: Run tests run: | yarn test \ --coverage=${{ env.ENABLE_COVERAGE }} \ --ci \ --max-workers ${{ steps.cpu-cores.outputs.count }} \ --shard ${{ matrix.runner }}/${{ strategy.job-total }} \ --cacheDirectory /tmp/jest_cache env: JEST_SONAR_UNIQUE_OUTPUT_NAME: true # tell jest to use coloured output FORCE_COLOR: true - name: Move coverage files into place if: env.ENABLE_COVERAGE == 'true' run: mv coverage/lcov.info coverage/${{ steps.setupNode.outputs.node-version }}-${{ matrix.runner }}.lcov.info - name: Upload Artifact if: env.ENABLE_COVERAGE == 'true' uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.runner }} path: | coverage !coverage/lcov-report complete: name: jest-tests needs: jest if: always() runs-on: ubuntu-24.04 permissions: statuses: write steps: - if: needs.jest.result != 'skipped' && needs.jest.result != 'success' run: exit 1 - name: Skip SonarCloud in merge queue if: github.event_name == 'merge_group' || inputs.disable_coverage == 'true' uses: guibranco/github-status-action-v2@66088c44e212a906c32a047529a213d81809ec1c with: authToken: ${{ secrets.GITHUB_TOKEN }} state: success description: SonarCloud skipped context: SonarCloud Code Analysis sha: ${{ github.sha }} target_url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}