name: Code Quality Checks

on: [workflow_dispatch, pull_request, push]

jobs:
  linting:
    name: ESLint
    timeout-minutes: 15
    runs-on: ubuntu-latest
    steps:
      - uses: styfle/cancel-workflow-action@0.8.0
      - uses: actions/checkout@v2
        with:
          fetch-depth: 1
          submodules: recursive
      - uses: actions/setup-node@v2
        with:
          node-version: 14
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache@v2
        name: Yarn Cache
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/package.json') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Yarn Install
        uses: nick-invision/retry@v2
        with:
          timeout_minutes: 3
          retry_wait_seconds: 30
          max_attempts: 3
          command: yarn --no-audit --prefer-offline
      - name: Lint
        run: yarn lint

  typescript:
    name: Types Build Validation
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - uses: styfle/cancel-workflow-action@0.8.0

      - uses: actions/checkout@v2
        with:
          fetch-depth: 1
          submodules: recursive

      - uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v2
        name: Yarn Cache
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/package.json') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Yarn Install
        uses: nick-invision/retry@v2
        with:
          timeout_minutes: 3
          retry_wait_seconds: 30
          max_attempts: 3
          command: yarn --no-audit --prefer-offline
      - name: Lint
        run: yarn lint
      - name: Typescript
        run: yarn typescript
