name: CI
on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master
    tags: '*'
jobs:
  test-unix:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
    steps:
      - uses: actions/checkout@v4
      - run: make
      - run: make test
  windows:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - { sys: mingw64, env: x86_64 }
          - { sys: mingw32, env: i686 }
          - { sys: ucrt64,  env: ucrt-x86_64 }  # Experimental!
          - { sys: clang64, env: clang-x86_64 } # Experimental!
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - uses: actions/checkout@v4
      - name: Set up the desired MSYS2 environment
        uses: msys2/setup-msys2@v2
        with:
          msystem: ${{matrix.sys}}
          install: base-devel mingw-w64-${{matrix.env}}-toolchain
      - run: make
      - run: make test
  code-coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup LCOV
        uses: hrishikesh-kadam/setup-lcov@v1
      - name: Build and Run tests
        run: make coverage -j
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          files: ./cov-html/libopenlibm.info
      - uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: ./cov-html/