name: Node.js CI

on: [push, pull_request]

jobs:
  test:
    timeout-minutes: 30
    strategy:
      matrix:
        node-version:
          - node/10
          - node/12
          - node/14
          - node/15
        compiler:
          - gcc
          - clang
        os:
          - ubuntu-16.04 # ubuntu-18.04/ubuntu-latest missing package g++-4.9
          - macos-latest
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v2
    - name: Install system dependencies
      run: |
        if [ "${{ matrix.compiler }}" = "gcc" -a "${{ matrix.os }}" = ubuntu-* ]; then
          sudo add-apt-repository ppa:ubuntu-toolchain-r/test
          sudo apt-get update
          sudo apt-get install g++-4.9
        fi
    - name: Use Node.js ${{ matrix.node-version }}
      run: |
        git clone --branch v1.4.2 --depth 1 https://github.com/jasongin/nvs ~/.nvs
        . ~/.nvs/nvs.sh
        nvs --version
        nvs add ${{ matrix.node-version }}
        nvs use ${{ matrix.node-version }}
        node --version
        npm --version
        npm install
    - name: npm test
      run: |
        if [ "${{ matrix.compiler }}" = "gcc" ]; then
          export CC="gcc" CXX="g++"
        fi
        if [ "${{ matrix.compiler }}" = "gcc" -a "${{ matrix.os }}" = ubuntu-* ]; then
          export CC="gcc-4.9" CXX="g++-4.9" AR="gcc-ar-4.9" RANLIB="gcc-ranlib-4.9" NM="gcc-nm-4.9"
        fi
        if [ "${{ matrix.compiler }}" = "clang" ]; then
          export CC="clang" CXX="clang++"
        fi
        export CFLAGS="$CFLAGS -O3 --coverage" LDFLAGS="$LDFLAGS --coverage"
        echo "CFLAGS=\"$CFLAGS\" LDFLAGS=\"$LDFLAGS\""
        npm run pretest -- --verbose
        node test
