name: Node.js CI

on:
    push:
        branches-ignore:
            - "dependabot/**"
    pull_request:

env:
    CI: true
    FORCE_COLOR: 2
    NODE_COV: 16 # The Node.js version to run coveralls on

jobs:
    lint:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v3
            - uses: actions/setup-node@v3
              with:
                  node-version: 16
                  cache: npm
            - run: npm ci
            - run: npm run lint

    test:
        name: Node ${{ matrix.node }}
        runs-on: ubuntu-latest

        strategy:
            fail-fast: false
            matrix:
                node:
                    - 10
                    - 12
                    - 14
                    - 16

        steps:
            - uses: actions/checkout@v3
            - name: Use Node.js ${{ matrix.node }}
              uses: actions/setup-node@v3
              with:
                  node-version: ${{ matrix.node }}
                  cache: npm
            - run: npm ci
            - run: npm run build --if-present

            - name: Run Jest
              run: npm run test:jest
              if: matrix.node != env.NODE_COV

            - name: Run Jest with coverage
              run: npm run test:jest -- --coverage
              if: matrix.node == env.NODE_COV

            - name: Run Coveralls
              uses: coverallsapp/github-action@1.1.3
              if: matrix.node == env.NODE_COV
              continue-on-error: true
              with:
                  github-token: "${{ secrets.GITHUB_TOKEN }}"
