name: Test

on:
  pull_request:
  push:
    branches:
      - master

jobs:
  test:
    strategy:
      matrix:
        env:
          - { NPROC: 2 }
        platform: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.platform }}
    env: ${{ matrix.env }}
    timeout-minutes: 60

    name: ${{ matrix.platform }} - ${{ matrix.env.NPROC }} processes

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

        # We need to do this because of how github cache works
        # I am not sure we can move the cache file, so if we do not do this
        # make update breaks because the cached compiler is there where the submodules
        # are meant to go.
      - name: Submodules
        run: |
          git submodule update --init --recursive

      - name: Cache nim
        uses: actions/cache@v1
        with:
          path: vendor/nimbus-build-system/vendor/Nim/bin
          key: ${{ runner.os }}-${{ matrix.env.NPROC }}-nim-${{ hashFiles('.gitmodules') }}

      - name: Install dependencies
        run: |
          make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 update 
          make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" LOG_LEVEL=TRACE

      - name: Run Tests
        run: |
          make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" test

  windows:
    strategy:
      matrix:
        env:
          - { NPROC: 2 }
    runs-on: windows-latest
    env: ${{ matrix.env }}
    timeout-minutes: 60

    name: windows - ${{ matrix.env.NPROC }} processes

    steps:
      - uses: eine/setup-msys2@v0
        with:
            msystem: MSYS
            update: true

      - name: Checkout code
        uses: actions/checkout@v2

        # We need to do this because of how github cache works
        # I am not sure we can move the cache file, so if we do not do this
        # make update breaks because the cached compiler is there where the submodules
        # are meant to go.
      - name: Submodules
        run: |
          git submodule update --init --recursive

      - name: Cache nim
        uses: actions/cache@v1
        with:
          path: vendor/nimbus-build-system/vendor/Nim/bin
          key: ${{ runner.os }}-${{ matrix.env.NPROC }}-nim-${{ hashFiles('.gitmodules') }}

      - name: Build
        run: |
          mingw32-make -j2 ARCH_OVERRIDE=%PLATFORM% CI_CACHE=NimBinaries update
          mingw32-make -j2 ARCH_OVERRIDE=%PLATFORM% fetch-dlls

      - name: Run Tests
        run: |
          mingw32-make -j2 ARCH_OVERRIDE=%PLATFORM% LOG_LEVEL=TRACE
          build\wakunode.exe --help
          mingw32-make -j2 ARCH_OVERRIDE=%PLATFORM% test