name: Build

on:
    push:
    pull_request:

env:
    PRIMARY_NODEJS_VERSION: 24

jobs:
    lint:
        name: Lint
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - name: Setup node ${{ env.PRIMARY_NODEJS_VERSION }}
              uses: actions/setup-node@v4
              with:
                node-version: ${{ env.PRIMARY_NODEJS_VERSION }}
                cache: "npm"
            - run: npm ci
            - run: npm run lint

    test-bundle:
        name: Test bundle
        runs-on: ${{ matrix.os }}
        strategy:
            matrix:
                os: [ubuntu-latest, windows-latest]
        steps:
            - uses: actions/checkout@v4
            - name: Setup node ${{ env.PRIMARY_NODEJS_VERSION }}
              uses: actions/setup-node@v4
              with:
                node-version: ${{ env.PRIMARY_NODEJS_VERSION }}
                cache: "npm"
            - run: npm ci
            - run: npm run bundle-and-test -- -- --reporter min

    unit-tests:
        name: Unit tests
        runs-on: ${{ matrix.os }}

        strategy:
            matrix:
                os: [ubuntu-latest]
                # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
                node_version:
                    - 10
                    - 12.20.0
                    - 14.13.0
                    - 16
                    - 18
                    - 20
                    - 22
                    - 24
                    - 25.6
                include:
                    - os: windows-latest
                      node: 10
                    - os: windows-latest
                      node: 24

        steps:
            - uses: actions/checkout@v4
            - name: Setup node ${{ matrix.node_version }}
              uses: actions/setup-node@v4
              with:
                node-version: ${{ matrix.node_version }}
                cache: "npm"
            - run: npm ci
            - run: npm run test -- --reporter min
              if: ${{ matrix.node_version != '10' }}
            - run: npm run esm-to-cjs-and-test -- -- --reporter min
            - run: npm run coverage
              if: ${{ matrix.node_version == env.PRIMARY_NODEJS_VERSION }}
            - name: Coveralls parallel
              if: ${{ matrix.node_version == env.PRIMARY_NODEJS_VERSION }}
              uses: coverallsapp/github-action@1.1.3
              with:
                github-token: ${{ secrets.GITHUB_TOKEN }}
                flag-name: node-${{ matrix.node_version }}
                parallel: true

    send-to-coveralls:
        name: Send coverage to Coveralls
        needs: unit-tests
        runs-on: ubuntu-latest
        steps:
            - name: Send coverage to Coveralls
              uses: coverallsapp/github-action@1.1.3
              with:
                github-token: ${{ secrets.GITHUB_TOKEN }}
                parallel-finished: true
