name: QA

on: [pull_request]

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 deps
        run: |
          npm ci

      - name: Run tsc
        run: |
          npm run check-types

      - name: Run lint
        run: |
          npm run lint
          git diff --exit-code ./src

  jest-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v3
        with:
          node-version-file: '.nvmrc'
      - 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 deps
        run: |
          npm ci

      - name: Run jest
        run: |
          npm run test

  translation-messages:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version-file: ".nvmrc"
      - 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 deps
        run: |
          npm ci

      - name: Check message extraction
        run: |
          npm run extract-messages
          git diff --exit-code ./locale
