name: Build

on:
  push:
    branches: [master, release]
  pull_request:
    branches: [master, release]
    
jobs:
  build:

    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version: ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12', 'pypy3.9']
        os: [windows-latest, ubuntu-latest, macos-13, macos-latest]
        architecture: ['x86', 'x64']
        exclude:
          # Only test pypy on Linux
          - os: windows-latest
            python-version: pypy3.9
          - os: macos-latest
            python-version: pypy3.9
          - os: macos-13
            python-version: pypy3.9
          # no python builds available on macos 32 bit, arm or x64
          - os: macos-latest
            architecture: x86
          - os: macos-13
            architecture: x86
          # no python builds available on linux 32 bit
          - os: ubuntu-latest
            architecture: x86
          # 3.7 is oldest supported Python on ubuntu 22.04
          - os: ubuntu-latest
            python-version: 3.6
          # scipy dropped 32 bit windows builds 
          - os: windows-latest
            architecture: x86
            python-version: 3.8
          - os: windows-latest
            architecture: x86
            python-version: 3.9
          - os: windows-latest
            architecture: x86
            python-version: 3.10
          - os: windows-latest
            architecture: x86
            python-version: 3.11
          - os: windows-latest
            architecture: x86
            python-version: 3.12
          - os: windows-latest
            architecture: x86
            python-version: 3.13

          # These are arm - old versions of Python are not supported
          - os: macos-latest
            python-version: 3.6
          - os: macos-latest
            python-version: 3.7
          - os: macos-latest
            python-version: 3.8
          - os: macos-latest
            python-version: 3.9
          - os: macos-latest
            python-version: 3.10
    
          - os: macos-13
            python-version: 3.6 # missing cumulative_trapezoid too old SciPy
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }} ${{ matrix.architecture }}
      uses: actions/setup-python@v5 
      with:
        python-version: ${{ matrix.python-version }}
        architecture: ${{ matrix.architecture }}

    - name: cache Linux
      uses: actions/cache@v4
      if: startsWith(runner.os, 'Linux')
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements_test.txt') }}
        restore-keys: |
          ${{ runner.os }}-${{ runner.architecture }}-${{ runner.python-version }}pip-
    - name: cache MacOS
      uses: actions/cache@v4
      if: startsWith(runner.os, 'macOS')
      with:
        path: ~/Library/Caches/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements_test.txt') }}
        restore-keys: |
          ${{ runner.os }}-${{ runner.architecture }}-${{ runner.python-version }}pip-
    - name: cache Windows
      uses: actions/cache@v4
      if: startsWith(runner.os, 'Windows')
      with:
        path: ~\AppData\Local\pip\Cache
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements_test.txt') }}
        restore-keys: |
          ${{ runner.os }}-${{ runner.architecture }}-${{ runner.python-version }}pip-

    - name: Install Ubuntu dependencies
      if: startsWith(runner.os, 'Linux')
      run: |
        # Taken from scipy
        sudo apt-get update
        sudo apt-get install -y libopenblas-dev libatlas-base-dev liblapack-dev gfortran libgmp-dev libmpfr-dev libsuitesparse-dev ccache libmpc-dev
    
    - name: Install dependencies
      run: |
        python -c "import platform; print(platform.platform()); print(platform.architecture())"
        python -m pip install --upgrade pip
        python -m pip install wheel
        pip install -r requirements_test.txt
    - name: Add numba
      if: ${{ matrix.python-version == '3.6' || matrix.python-version == '3.7' || matrix.python-version == '3.8' || matrix.python-version == '3.9'  || matrix.python-version == '3.10'  || matrix.python-version == '3.11'  || matrix.python-version == '3.12' }}
      run: |
        pip install numba
    - name: Test with pytest
      run: |
        pytest . -v --cov-report html --cov=fluids --cov-report term-missing -m "not online and not thermo"
        coveralls
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.coveralls }}
        COVERALLS_PARALLEL: true
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  finish:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - name: Coveralls Finished
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.coveralls }}
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        curl https://coveralls.io/webhook?repo_token=${{ secrets.coveralls }} -d "payload[build_num]=${{ github.sha }}&payload[status]=done"
