name: CI



on:

  push:

    paths-ignore:

      - '**.md'

  pull_request:

    paths-ignore:

      - '**.md'



jobs:

  ci:

    runs-on: ${{ matrix.os }}

    timeout-minutes: 30

    strategy:

      fail-fast: false

      matrix:

        os:

          - ubuntu-latest

          - macos-latest

          - windows-latest

    name: Run on ${{ matrix.os }}

    steps:

      - uses: actions/checkout@v6



      - name: Setup node

        uses: actions/setup-node@v6

        with:

          node-version: 24



      - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0

        name: Install pnpm

        id: pnpm-install

        with:

          run_install: false



      - name: Build

        run: |

          pnpm i --frozen-lockfile

          pnpm run build

          pnpm run doc

          pnpm run bundle



      - name: Lint

        if: matrix.os == 'ubuntu-latest'

        run: pnpm run lint



      - name: Test

        if: matrix.os == 'windows-latest' || matrix.os == 'macos-latest'

        run: |

          set NODE_OPTIONS=--max_old_space_size=4096

          pnpm run test



      - name: Test & Coverage

        if: matrix.os == 'ubuntu-latest'

        run: |

          export NODE_OPTIONS=--max_old_space_size=4096

          pnpm run test-cov

          pnpm run check-format

          pnpm run merge-report && cat coverage/lcov.info



      - name: Upload Coveralls Report

        if: success() && matrix.os == 'ubuntu-latest'

        uses: coverallsapp/github-action@master

        with:

          github-token: ${{ secrets.GITHUB_TOKEN }}