Merge pull request #5523 from alphagov/upgrade-libsass-test #12892
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
name: Tests | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
- 'feature/**' | |
- 'support/**' | |
workflow_dispatch: | |
inputs: | |
types: | |
description: Check type declarations | |
type: boolean | |
concurrency: | |
group: tests-${{ inputs.runner || 'ubuntu-latest' }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
install: | |
name: Install | |
runs-on: ${{ matrix.runner }} | |
env: | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
- windows-latest | |
steps: | |
- name: Checkout code | |
uses: actions/[email protected] | |
- name: Install dependencies | |
uses: ./.github/workflows/actions/install-node | |
build: | |
name: Build | |
runs-on: ${{ matrix.runner }} | |
needs: [install] | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
- windows-latest | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Restore dependencies | |
uses: ./.github/workflows/actions/install-node | |
- name: Build | |
uses: ./.github/workflows/actions/build | |
- name: Type declarations (optional) | |
if: github.event.inputs.types == 'true' | |
run: npm run build:types | |
lint: | |
name: ${{ matrix.task.description }} (${{ matrix.runner }}) | |
runs-on: ${{ matrix.runner }} | |
needs: [install] | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
- windows-latest | |
task: | |
- description: Lint Sass | |
name: lint-scss | |
run: npm run lint:scss | |
cache: .cache/stylelint | |
- description: Lint JavaScript | |
name: lint-js | |
run: npm run lint:js | |
cache: .cache/eslint | |
- description: EditorConfig | |
name: lint-editorconfig | |
run: npm run lint:editorconfig | |
- description: Prettier | |
name: lint-prettier | |
run: npm run lint:prettier | |
cache: .cache/prettier | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Restore dependencies | |
uses: ./.github/workflows/actions/install-node | |
- name: Cache linter | |
if: ${{ matrix.task.cache }} | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: ${{ matrix.task.name }}-${{ runner.os }} | |
path: ${{ matrix.task.cache }} | |
- name: Run lint task | |
run: ${{ matrix.task.run }} | |
test: | |
name: ${{ matrix.task.description }} (${{ matrix.runner }}) | |
runs-on: ${{ matrix.runner }} | |
needs: [install, build] | |
env: | |
# Use 2x CPU cores unless on Windows (runs slower when concurrent) | |
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources | |
MAX_WORKERS: ${{ matrix.runner == 'windows-latest' && '1' || '2' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
- windows-latest | |
task: | |
- description: Nunjucks macro tests | |
name: test-macro | |
cache: .cache/jest | |
projects: | |
- Nunjucks macro tests | |
- description: JavaScript unit tests | |
name: test-unit | |
cache: .cache/jest | |
projects: | |
- JavaScript unit tests | |
- description: JavaScript behaviour tests | |
name: test-behaviour | |
cache: .cache/jest | |
projects: | |
- JavaScript behaviour tests | |
- description: JavaScript component tests | |
name: test-component | |
cache: | | |
.cache/jest | |
.cache/puppeteer | |
projects: | |
- JavaScript component tests | |
- description: Accessibility tests | |
name: test-accessibility | |
cache: | | |
.cache/jest | |
.cache/puppeteer | |
projects: | |
- Accessibility tests | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Restore dependencies | |
uses: ./.github/workflows/actions/install-node | |
- name: Restore build | |
uses: ./.github/workflows/actions/build | |
- name: Cache task | |
if: ${{ matrix.task.cache }} | |
uses: actions/[email protected] | |
with: | |
enableCrossOsArchive: true | |
key: ${{ matrix.task.name }}-${{ runner.os }} | |
path: ${{ matrix.task.cache }} | |
- name: Run test task | |
run: npx jest --color ${{ format('--maxWorkers={0} --selectProjects "{1}"', env.MAX_WORKERS, join(matrix.task.projects, '", "')) }} | |
- name: Save test coverage | |
uses: actions/[email protected] | |
with: | |
name: ${{ matrix.task.description }} coverage (${{ matrix.runner }}) | |
path: coverage | |
if-no-files-found: ignore | |
verify: | |
name: ${{ matrix.task.description }} (${{ matrix.runner }}) | |
runs-on: ${{ matrix.runner }} | |
needs: [install, build] | |
# Skip when scheduled or run manually | |
if: ${{ !inputs.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
- windows-latest | |
task: | |
- description: Verify package build | |
name: test-build-package | |
run: npm run build:package | |
- description: Verify distribution build | |
name: test-build-dist | |
run: npm run build:dist | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Restore dependencies | |
uses: ./.github/workflows/actions/install-node | |
- name: Restore build | |
uses: ./.github/workflows/actions/build | |
- name: Run verify task | |
run: ${{ matrix.task.run }} | |
package: | |
name: Export ${{ matrix.conditions }}, Node.js ${{ matrix.node-version }} | |
runs-on: ubuntu-latest | |
needs: [install, build] | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: | |
- 12.18 # Node.js 12.18 uses package exports with trailing slashes | |
- 12 # But Node.js 12.20+ uses package exports with subpath patterns | |
- 18 | |
conditions: | |
- require | |
- import | |
exclude: | |
- conditions: import | |
node-version: 12.18 | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Restore dependencies | |
uses: ./.github/workflows/actions/install-node | |
- name: Change Node.js version | |
uses: actions/[email protected] | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Export ${{ matrix.conditions }}, Node.js ${{ matrix.node-version }} | |
env: | |
# Node.js conditions override from "require" to "import" etc | |
# https://nodejs.org/api/cli.html#-c-condition---conditionscondition | |
FLAGS: ${{ matrix.conditions != 'require' && format(' --conditions {0}', matrix.conditions) || '' }} | |
run: | | |
node --eval "console.log(require.resolve('govuk-frontend'))"${{ env.FLAGS }} | |
node --eval "console.log(require.resolve('govuk-frontend/package.json'))"${{ env.FLAGS }} | |
node --eval "console.log(require.resolve('govuk-frontend/govuk/i18n.js'))"${{ env.FLAGS }} | |
node --eval "console.log(require.resolve('govuk-frontend/govuk-esm/i18n.mjs'))"${{ env.FLAGS }} | |
regression: | |
name: Percy | |
needs: [install, build] | |
# Skip when scheduled or run manually | |
if: ${{ !inputs.runner }} | |
# Run existing "Percy screenshots" workflow | |
# (after install and build have been cached) | |
uses: ./.github/workflows/screenshots.yml | |
secrets: inherit |