name: QA

on:
  pull_request:
    branches: ["*"]

jobs:
  check-lock:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Validate lock file
        run: |
          npx lockfile-lint --path package-lock.json --allowed-hosts npm yarn

  tsc-and-linters:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: ~/.npm
          key: ${{ runner.os }}-qa-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-qa-${{ env.cache-name }}-
            ${{ runner.os }}-qa-
            ${{ runner.os }}-

      - name: Install dependencies
        run: |
          npm ci

      - name: Run tsc
        run: |
          npx tsc --noEmit

      - name: Run eslint
        run: |
          npm run lint

  jest-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: ~/.npm
          key: ${{ runner.os }}-qa-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-qa-${{ env.cache-name }}-
            ${{ runner.os }}-qa-
            ${{ runner.os }}-

      - name: Install dependencies
        run: |
          npm ci

      - name: Run jest
        run: |
          npm run test

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: ~/.npm
          key: ${{ runner.os }}-qa-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-qa-${{ env.cache-name }}-
            ${{ runner.os }}-qa-
            ${{ runner.os }}-

      - name: Install dependencies
        run: |
          npm ci

      - name: Run build
        run: |
          npm run build
