name: ci

on:
  pull_request:
  push:
    branches:
    - master

jobs:
  TestMatrix:
    strategy:
      matrix:
        lua-version: ["5.4", "5.3", "5.2", "5.1", "luajit"]
        os: ["ubuntu-latest"]
        libflag: ["-shared --coverage"]
        include:
        - os: "macos-latest"
          lua-version: "5.4"
          libflag: "-bundle -undefined dynamic_lookup -all_load --coverage"
        - os: "windows-latest"
          toolchain: "msvc"
          lua-version: "5.4"
        - os: "windows-latest"
          lua-version: "luajit"
    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@master

    - name: Setup MSVC
      # 'luarocks/gh-actions-lua' step requires msvc to build PUC-Rio Lua
      # versions on Windows (LuaJIT will be built using MinGW/gcc).
      if: ${{ matrix.toolchain == 'msvc' }}
      uses: ilammy/msvc-dev-cmd@v1

    - uses: luarocks/gh-actions-lua@master
      with:
        luaVersion: ${{ matrix.lua-version }}

    - uses: luarocks/gh-actions-luarocks@master

    - name: Prep luacov
      run: |
        luarocks install luacov

    - name: Prep luacov-coveralls
      # TODO Windows coverage
      if: ${{ matrix.os != 'windows-latest' }}
      run: |
        pip install --user cpp-coveralls
        # install luacov-coveralls, but avoid installing luafilesystem
        luarocks install lua-path 
        luarocks install dkjson
        luarocks install luacov-coveralls --server=https://luarocks.org/dev --deps-mode=none

    - name: Unix Build
      if: ${{ matrix.os != 'windows-latest' }}
      run: |
        luarocks make CFLAGS="-O2 -fPIC -ftest-coverage -fprofile-arcs" LIBFLAG="${{ matrix.libflag }}"

    - name: Windows Build
      # TODO Windows coverage
      if: ${{ matrix.os == 'windows-latest' }}
      run: |
        luarocks make

    - name: Test
      run: |
        lua -lluacov tests/test.lua

    - name: Coverage
      # TODO Windows coverage
      if: ${{ matrix.os != 'windows-latest' }}
      run: |
        export MY_PYTHON_VER=$(python -c 'import sys; print(".".join(sys.version.split(".")[0:2]))')
        export PATH="/Users/runner/Library/Python/$MY_PYTHON_VER/bin:$PATH"
        coveralls -b . -i src --dump c.report.json
        luacov-coveralls -j c.report.json -v -t ${{ secrets.GITHUB_TOKEN }}
