name: Node.js package

on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-20.04, ubuntu-latest, macos-latest, windows-latest]
        node: [16, 18, 20]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - uses: actions/setup-python@v5
        with:
          python-version: '3.13'
      - name: Install dependencies (ubuntu-latest)
        if: ${{ matrix.os == 'ubuntu-latest' }}
        run: |
          sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
          sudo apt -qq update
          sudo apt install -y g++-9
          export CC="g++-9"
      - name: Install NPM packages
        run: |
          npm install
      - name: Run tests
        run: |
          npm test
      - name: Lint
        run: |
          npm run lint

  quality:
    name: Quality phase
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout code
        uses: actions/checkout@v3
      - name: 💽 Setup nodejs
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: 📇 Use npm cache
        uses: c-hive/gha-npm-cache@v1
      - name: Install dependencies (ubuntu-latest)
        run: |
          sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
          sudo apt -qq update
          sudo apt install -y g++-9
          export CC="g++-9"
      - name: 📦 Install NPM packages
        run: |
          npm install
      - name: ✅ Test with coverage
        run: |
          npm run coverage
      - name: 📄 Codecov report upload
        uses: codecov/codecov-action@v2
        with:
          fail_ci_if_error: true
          file: .nyc_output/lcov.info