name: Node.js CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [22.x, 24.x, 26.x]

    steps:
      - name: Checkout
        uses: actions/checkout@v7

# [PM_SETUP]

      - name: Setup Node.js
        uses: actions/setup-node@v7
        with:
          node-version: ${{ matrix.node-version }}
          cache: "{{packageManager}}"

      - name: Verify {{packageManager}}
        run: {{packageManager}} --version

      - name: Install dependencies
        run: {{installCommand}}

# [PLAYWRIGHT_SETUP]

      - name: Lint
        run: {{packageManager}} run lint

      - name: Build
        run: {{packageManager}} run build

      - name: Unit test (with coverage)
        run: {{packageManager}} run test

      - name: Coveralls
        uses: coverallsapp/github-action@v2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          file: coverage/lcov.info
          format: lcov
          flag-name: node-${{ matrix.node-version }}
          parallel: true

      - name: Integration test
        run: {{packageManager}} run integration-test

  finish:
    needs: build
    if: ${{ always() }}
    runs-on: ubuntu-latest
    steps:
      - name: Coveralls Finished
        uses: coverallsapp/github-action@v2
        with:
          parallel-finished: true
          carryforward: "node-22.x,node-24.x,node-26.x"
