name: Test

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build-wheel:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.11'

    - name: Build the wheel
      run: |
        python -m pip install build
        python -m build

    - name: Upload wheel
      uses: actions/upload-artifact@v4
      with:
        name: wheel
        path: dist/*.whl

    - name: Run the tests
      run: |
        python -m pip install numpy pyparsing pytest pytest-cov
        pytest -v

    - name: Build the docs
      run: |
        python -m pip install matplotlib sphinx
        python -m pip install dist/periodictable*.whl
        make -j 4 -C doc/sphinx SPHINXOPTS="-W --keep-going" html

  # Test the wheel on different platforms
  test:
    runs-on: ${{ matrix.cfg.os }}
    needs: build-wheel

    strategy:
      matrix:
        cfg:
          #- { os: ubuntu-20.04, py: 2.7 }
          #- { os: ubuntu-20.04, py: 3.6 }
          - { os: ubuntu-latest, py: 3.8 }
          - { os: ubuntu-latest, py: 3.11, doc: 1 }
          - { os: windows-latest, py: 3.11 }
          - { os: macos-latest, py: 3.11 }
      fail-fast: false

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python ${{ matrix.cfg.py }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.cfg.py }}

    - name: Download the wheel
      uses: actions/download-artifact@v4
      with:
        name: wheel
        path: dist

    - name: Install the wheel
      run: python -m pip install dist/periodictable*.whl
      shell: bash

    - name: Install Python dependencies
      run: |
        python -m pip install pytest pytest-cov

    # Change into the test directory to test the wheel so that the
    # source directory is not on the path. Full tests with coverage are
    # run before building the wheel.
    - name: Test wheel with pytest
      run: |
        cd test
        pytest -v --pyargs --import-mode=append periodictable . ../doc/sphinx/guide