name: Quality checks

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

on:
  push:
    branches: [ master, release* ]
  pull_request:
    branches: [ master, release* ]

jobs:
  run-escheck:
    name: Run es-check
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

      - name: Setup node environment
        uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
        with:
          node-version: 20
          check-latest: true
          cache: npm

      - name: Install Node.js dependencies
        run: npm ci --no-audit

      - name: Run a production build
        run: npm run build:production

      - name: Run es-check
        run: npm run escheck

  run-eslint:
    name: Run eslint
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

      - name: Setup node environment
        uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
        with:
          node-version: 20
          check-latest: true
          cache: npm

      - name: Install Node.js dependencies
        run: npm ci --no-audit

      - name: Run eslint
        run: npx eslint --quiet "."

  run-stylelint:
    name: Run stylelint
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

      - name: Setup node environment
        uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
        with:
          node-version: 20
          check-latest: true
          cache: npm

      - name: Set up stylelint matcher
        uses: xt0rted/stylelint-problem-matcher@34db1b874c0452909f0696aedef70b723870a583 # tag=v1

      - name: Install Node.js dependencies
        run: npm ci --no-audit

      - name: Run stylelint
        run: npm run stylelint

  run-tsc:
    name: Run TypeScript build check
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

      - name: Setup node environment
        uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
        with:
          node-version: 20
          check-latest: true
          cache: npm

      - name: Install Node.js dependencies
        run: npm ci --no-audit

      - name: Run tsc
        run: npm run build:check

  run-test:
    name: Run tests
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

      - name: Setup node environment
        uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
        with:
          node-version: 20
          check-latest: true
          cache: npm

      - name: Install Node.js dependencies
        run: npm ci --no-audit

      - name: Run test suite
        run: npm run test
