name: build

on:
  push:
    branches: [main, beta, alpha]
  pull_request:
    branches: [main, beta, alpha]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [20, 22]

    steps:
      - uses: actions/checkout@v4

      - name: Use Node.js ${{ matrix.node }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: "npm"

      - name: install dependencies
        run: npm ci

      - name: test
        env:
          CI_NODE_VERSION: ${{ matrix.node }}
        run: npm test

      - name: publish coverage
        uses: coverallsapp/github-action@v2
        continue-on-error: true
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          flag-name: nodejs-${{ matrix.node }}
          parallel: true

  coveralls_finished:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: coveralls finished
        uses: coverallsapp/github-action@v2
        continue-on-error: true
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          parallel-finished: true

  publish:
    if: ${{ github.event_name != 'pull_request' }}
    needs: [test]
    runs-on: ubuntu-latest
    environment: npm
    permissions:
      id-token: write # Required for npm provenance / OIDC
      contents: write # Required for semantic-release to push tags and create releases
      issues: write # Required for semantic-release to comment on referenced issues
      pull-requests: write # Required for semantic-release to comment on referenced PRs
    steps:
      - uses: actions/checkout@v4

      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24
          registry-url: "https://registry.npmjs.org"

      - name: publish to npm
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          npm ci
          npx semantic-release@25
