Add Testing Matrix #62
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test PyClaw | |
| on: | |
| push: | |
| branches: [ "master" ] | |
| pull_request: | |
| branches: [ "master" ] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| env: | |
| CLAW: ${{ github.workspace }} | |
| jobs: | |
| tests: | |
| name: > | |
| ${{ matrix.os }} - py ${{ matrix.python-version }} - ${{ matrix.toolchain.compiler }} ${{ matrix.build }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: true # Probably want to turn this off for a large matrix | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| python-version: ["3.12"] | |
| build: [debug, opt] | |
| toolchain: | |
| - {compiler: gcc, version: 14} | |
| - {compiler: gcc, version: 15} | |
| # - {compiler: intel, version: '2025.0'} | |
| # - {compiler: intel-classic, version: '2021.10'} | |
| # - {compiler: nvidia-hpc, version: '25.1'} # does not build python | |
| # - {compiler: lfortran, version: '0.45.0'} # lfortran not yet supported | |
| # - {compiler: flang, version: '20.1.0'} # flang not yet supported | |
| # include: | |
| # - os: ubuntu-latest | |
| # python-version: 3.10 | |
| # build: opt | |
| # toolchain: {compiler: gcc, version: 14} | |
| exclude: | |
| - os: ubuntu-latest | |
| toolchain: {compiler: gcc, version: 15} | |
| - os: macos-latest | |
| toolchain: {compiler: gcc, version: 14} | |
| steps: | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Set up compilers | |
| uses: fortran-lang/setup-fortran@v1 | |
| id: setup-fortran | |
| with: | |
| compiler: ${{ matrix.toolchain.compiler }} | |
| version: ${{ matrix.toolchain.version }} | |
| - name: Install python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| # pip install 'numpy<2.0' | |
| pip install numpy | |
| pip install matplotlib #Some imports require matplotlib | |
| pip install scipy #To not skip tests | |
| pip install flake8 meson-python ninja pytest coveralls | |
| # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi | |
| - name: Checkout Clawpack | |
| uses: actions/[email protected] | |
| with: | |
| repository: clawpack/clawpack | |
| submodules: true | |
| - name: Checkout PyClaw branch | |
| uses: actions/[email protected] | |
| with: | |
| path: pyclaw | |
| - name: Install clawpack | |
| run: | | |
| if [ "${{ matrix.toolchain.compiler }}" = "gcc" ]; then | |
| if [ "${{ matrix.build }}" = "debug" ]; then | |
| export FFLAGS="-O0 -g -fcheck=all -fbacktrace -fbounds-check -ffpe-trap=invalid,zero,overflow -finit-real=nan -finit-integer=nan -Wall -Wunderflow -Wextra -Wconversion -Wuninitialized -Warray-bounds -Wshadow -Wno-unused-function -Wno-unused-variable -Wno-unused-parameter -Wno-unused-label -Wno-unused-but-set-variable" | |
| export CFLAGS="" | |
| elif [ "${{ matrix.build }}" = "opt" ]; then | |
| # export FFLAGS="-O1 -funroll-loops -finline-functions -ftree-vectorize -fstack-protector-strong -flto -march=native" | |
| export FFLAGS="" | |
| export CFLAGS="" | |
| else | |
| echo "Unknown build type: ${{ matrix.build }}" | |
| exit 1 | |
| fi | |
| elif [ "${{ matrix.toolchain.compiler }}" = "intel" ] || [ "${{ matrix.toolchain.compiler }}" = "intel-classic" ]; then | |
| if [ "${{ matrix.build }}" = "debug" ]; then | |
| export FFLAGS="" | |
| export CFLAGS="" | |
| elif [ "${{ matrix.build }}" = "opt" ]; then | |
| export FFLAGS="" | |
| export CFLAGS="" | |
| else | |
| echo "Unknown build type: ${{ matrix.build }}" | |
| exit 1 | |
| fi | |
| else | |
| echo "Unknown compiler: ${{ matrix.toolchain.compiler }}" | |
| exit 1 | |
| fi | |
| echo "Using `$FC --version`" | |
| echo "FFLAGS: $FFLAGS" | |
| echo "CFLAGS: $CFLAGS" | |
| cd ${{ env.CLAW }} | |
| pip install --no-build-isolation --editable . | |
| - name: Lint with flake8 | |
| if: ${{ matrix.build == 'debug' }} | |
| run: | | |
| cd ${{ env.CLAW }} | |
| # stop the build if there are Python syntax errors or undefined names | |
| flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude "development","src/pyclaw/fileio/netcdf.py" | |
| # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide | |
| flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics | |
| - name: Test with pytest | |
| run: | | |
| cd ${{ env.CLAW }}/pyclaw | |
| coverage run --source=src -m pytest -vv --showlocals --ignore=development -k "not test_shallow_sphere" --junitxml=test-report.xml | |
| - name: Process test results | |
| uses: test-summary/[email protected] | |
| if: always() | |
| with: | |
| paths: ${{ env.CLAW }}/pyclaw/test_report.xml | |
| output: test-summary.md | |
| show: all | |
| - name: Upload test results | |
| # if: failure() | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test_results | |
| path: ${{ env.CLAW }}/pyclaw/test-summary.md | |
| if-no-files-found: ignore | |
| - name: Upload to Coveralls | |
| if: ${{ matrix.os == 'ubuntu-latest' && matrix.toolchain.compiler == 'gcc' && matrix.build == 'opt' && matrix.python-version == '3.12' }} | |
| run: | | |
| cd ${{ env.CLAW }}/pyclaw | |
| ls -l .coverage | |
| coveralls | |
| env: | |
| COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |