name: "node.js tests"

# Cancel previously started workflow runs
# when the branch is updated.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  pull_request:
  push:
    branches:
      - master

jobs:
  tests:
    name: Tests
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: "16"
      - name: System info
        run: |
          rustc -vV
          rustup -vV
          cargo -vV
          npm --version
          node --version

      - name: Cache node modules
        uses: actions/cache@v3
        with:
          path: |
            ${{ env.APPDATA }}/npm-cache
            ~/.npm
          key: ${{ matrix.os }}-node-${{ hashFiles('**/package.json') }}

      - name: Cache cargo index
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry/
            ~/.cargo/git
            target
          key: ${{ matrix.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}-2

      - name: Install dependencies & build
        if: steps.cache.outputs.cache-hit != 'true'
        run: |
          cd node
          npm install --verbose

      - name: Test
        timeout-minutes: 10
        if: runner.os != 'Windows'
        run: |
          cd node
          npm run test
        env:
          DCC_NEW_TMP_EMAIL: ${{ secrets.DCC_NEW_TMP_EMAIL }}
          NODE_OPTIONS: "--force-node-api-uncaught-exceptions-policy=true"
      - name: Run tests on Windows, except lint
        timeout-minutes: 10
        if: runner.os == 'Windows'
        run: |
          cd node
          npm run test:mocha
        env:
          DCC_NEW_TMP_EMAIL: ${{ secrets.DCC_NEW_TMP_EMAIL }}
          NODE_OPTIONS: "--force-node-api-uncaught-exceptions-policy=true"
