name: 'Tests: node.js'

on: [pull_request, push]

jobs:
  matrix:
    runs-on: ubuntu-latest
    outputs:
      latest: ${{ steps.set-matrix.outputs.requireds }}
    steps:
      - uses: ljharb/actions/node/matrix@main
        id: set-matrix
        with:
          versionsAsRoot: true
          type: 'majors'
          preset: '>=4'

  latest:
    needs: [matrix]
    name: 'latest majors'
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
        eslint:
          - 8
          - 7
          - 6
          - 5
          - 4
          - 3
        exclude:
          - node-version: 15
            eslint: 8
          - node-version: 13
            eslint: 8
          - node-version: 11
            eslint: 8
          - node-version: 11
            eslint: 7
          - node-version: 10
            eslint: 8
          - node-version: 9
            eslint: 8
          - node-version: 9
            eslint: 7
          - node-version: 8
            eslint: 8
          - node-version: 8
            eslint: 7
          - node-version: 7
            eslint: 8
          - node-version: 7
            eslint: 7
          - node-version: 7
            eslint: 6
          - node-version: 6
            eslint: 8
          - node-version: 6
            eslint: 7
          - node-version: 6
            eslint: 6
          - node-version: 5
            eslint: 8
          - node-version: 5
            eslint: 7
          - node-version: 5
            eslint: 6
          - node-version: 5
            eslint: 5
          - node-version: 5
            eslint: 4
          - node-version: 5 # TODO: fix
            eslint: 3
          - node-version: 4
            eslint: 8
          - node-version: 4
            eslint: 7
          - node-version: 4
            eslint: 6
          - node-version: 4
            eslint: 5
          - node-version: 4 # TODO: fix
            eslint: 4
          - node-version: 4 # TODO: fix
            eslint: 3

    steps:
      - uses: actions/checkout@v2
        with:
            fetch-depth: 0
      - uses: ljharb/actions/node/install@main
        name: 'nvm install ${{ matrix.node-version }} && npm install'
        env:
          NPM_CONFIG_LEGACY_PEER_DEPS: true
        with:
          after_install: npm uninstall --no-save eslint-config-airbnb-base && npm install --no-save "eslint@${{ matrix.eslint }}"
          node-version: ${{ matrix.node-version }}
          skip-ls-check: true
      - run: rm __tests__/src/util/getComputedRole-test.js
        if: ${{ matrix.node-version < 7 }}
      - run: npm run test:ci
      - uses: codecov/codecov-action@v2

  node:
    name: 'node 4+'
    needs: [latest]
    runs-on: ubuntu-latest
    steps:
      - run: 'echo tests completed'
