name: Run unit tests on: push: branches: - master - release - 'spring*' - 'summer*' - 'winter*' pull_request: branches: - master - release - 'spring*' - 'summer*' - 'winter*' env: PUPPETEER_SKIP_DOWNLOAD: 'true' # only needed for @best/runner-local, unused here jobs: run-unit-tests: runs-on: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: '20.18.1' cache: 'yarn' # Needed for perf smoke tests, matches the chromedriver version installed by tachometer (https://github.com/google/tachometer/blob/main/README.md#on-demand-dependencies) # chrome-version documentation can be found here: https://github.com/browser-actions/setup-chrome?tab=readme-ov-file#usage - name: Setup chrome uses: browser-actions/setup-chrome@v1 with: chrome-version: 130 id: setup-chrome - name: Install dependencies run: yarn install --frozen-lockfile # Pin chromedriver to the same version as Chrome above, so Tachometer uses this version. # See: https://github.com/google/tachometer#on-demand-dependencies - name: Install chromedriver run: yarn add -W chromedriver@^130 - name: Check package.json integrity run: node ./scripts/tasks/check-and-rewrite-package-json.js --test - name: Check licenses are up to date run: node ./scripts/tasks/generate-license-files.js --test - name: Verify @lwc/shared is tree-shakable run: node ./scripts/tasks/verify-treeshakable.js ./packages/@lwc/shared/dist/index.js - name: Verify that dependencies are declared run: node ./scripts/tasks/check-imports-are-declared-dependencies.js - name: Check formatting run: yarn prettier --check '{packages,scripts}/**/*.{js,ts,json,md}' - name: Run linter run: yarn lint - name: Check the size of the LWC bundle run: yarn bundlesize - name: Check types run: yarn test:types - name: Run unit tests run: yarn test:ci # TODO [#4815]: enable all SSR v2 tests - name: Run experimental SSR fixture tests run: TEST_SSR_COMPILER=1 yarn test packages/@lwc/ssr-compiler/src/__tests__/fixtures.spec.ts - name: Upload unit test coverage report uses: actions/upload-artifact@v4 with: name: test-coverage-report path: coverage/ - name: Run benchmark smoke tests run: CHROME_BINARY=${{ steps.setup-chrome.outputs.chrome-path }} BENCHMARK_SMOKE_TEST=1 yarn test:performance - name: Add step summary # 1. Remove leading/trailing "border" lines from output # 2. Wrap file names in backticks # 3. Convert leading whitespace to non-breaking to approximate plaintext output run: sed -E '$d;1d;4,$s/^( ?)([^ ]+)/\1`\2`/g;4,$s/^ /\ \ /g' coverage/coverage.txt >> "$GITHUB_STEP_SUMMARY"