name: Node.js CI

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

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

permissions:
    contents: read #  to fetch code (actions/checkout)

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

    test:
        permissions:
            contents: read #  to fetch code (actions/checkout)
            checks: write #  to create new checks (coverallsapp/github-action)

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

        strategy:
            fail-fast: false
            matrix:
                node:
                    - 14
                    - 16
                    - 18
                    - lts/*

        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@v2.1.2
              if: matrix.node == env.NODE_COV
              continue-on-error: true
              with:
                  github-token: "${{ secrets.GITHUB_TOKEN }}"
