[Equil] Handle mixtures where element potentials are indeterminate #608
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: Post-merge Tests | |
| on: | |
| workflow_dispatch: # allow manual triggering of this workflow | |
| inputs: | |
| outgoing_ref: | |
| description: "The ref to be built. Can be a tag, commit hash, or branch name" | |
| required: true | |
| default: "main" | |
| push: | |
| # Run when the main branch is pushed to | |
| branches: | |
| - main | |
| # Run on pull requests when this file is modified | |
| pull_request: | |
| branches: | |
| - main | |
| paths: | |
| - .github/workflows/post-merge-tests.yml | |
| permissions: | |
| contents: read | |
| env: | |
| UV_INDEX: https://pypi.anaconda.org/scientific-python-nightly-wheels/simple | |
| REQUIREMENTS_TXT_FILE: "platform/ci_support/post_merge_reqs.txt" | |
| jobs: | |
| prerelease-dependencies: | |
| name: Pre-release ${{ matrix.name }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| name: [cython, eigen, libfmt, SUNDIALS, yaml-cpp, HighFive, SCons] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v7 | |
| name: Checkout the repository | |
| with: | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: Setup Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: 3.13 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 | |
| with: | |
| python-version: 3.13 | |
| cache-dependency-glob: | | |
| ${{ env.REQUIREMENTS_TXT_FILE }} | |
| enable-cache: true | |
| - name: Install Apt dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install libboost-dev libopenblas-dev libhdf5-dev doxygen | |
| - name: Install Python dependencies | |
| run: | | |
| uv venv --python 3.13 --seed | |
| uv pip install -r "${REQUIREMENTS_TXT_FILE}" | |
| - name: Install pre-release Cython | |
| if: matrix.name == 'cython' | |
| run: | | |
| uv pip uninstall cython | |
| uv pip install --prerelease=allow --only-binary=":all:" cython | |
| - name: Install pre-release Eigen | |
| if: matrix.name == 'eigen' | |
| run: | | |
| git fetch origin | |
| git reset --hard origin/HEAD | |
| working-directory: ext/eigen | |
| - name: Build prerelease libfmt | |
| if: matrix.name == 'libfmt' | |
| run: | | |
| echo "system_fmt = 'y'" >> cantera.conf | |
| echo "extra_inc_dirs = 'fmt/install/include'" >> cantera.conf | |
| echo "extra_lib_dirs = 'fmt/install/lib'" >> cantera.conf | |
| git clone https://github.com/fmtlib/fmt | |
| mkdir fmt/build | |
| cd fmt/build | |
| cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_SHARED_LIBS=Y .. | |
| make -j4 | |
| make install | |
| - name: Build prerelease SUNDIALS | |
| if: matrix.name == 'SUNDIALS' | |
| run: | | |
| echo "system_sundials = 'y'" >> cantera.conf | |
| echo "extra_inc_dirs = 'sundials/install/include'" >> cantera.conf | |
| echo "extra_lib_dirs = 'sundials/install/lib'" >> cantera.conf | |
| git clone https://github.com/LLNL/sundials | |
| cd sundials | |
| git switch develop | |
| mkdir build | |
| cd build | |
| cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_SHARED_LIBS=Y .. | |
| make -j4 | |
| make install | |
| - name: Build prerelease yaml-cpp | |
| if: matrix.name == 'yaml-cpp' | |
| run: | | |
| echo "system_yamlcpp = 'y'" >> cantera.conf | |
| echo "extra_inc_dirs = 'yaml-cpp/install/include'" >> cantera.conf | |
| echo "extra_lib_dirs = 'yaml-cpp/install/lib'" >> cantera.conf | |
| git clone https://github.com/jbeder/yaml-cpp | |
| cd yaml-cpp | |
| mkdir build | |
| cd build | |
| cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_SHARED_LIBS=Y .. | |
| make -j4 | |
| make install | |
| - name: Build prerelease HighFive | |
| if: matrix.name == 'HighFive' | |
| run: | | |
| echo "system_highfive = 'y'" >> cantera.conf | |
| echo "extra_inc_dirs = 'highfive/install/include'" >> cantera.conf | |
| git clone --recursive https://github.com/highfive-devs/highfive | |
| cd highfive | |
| mkdir build | |
| cd build | |
| cmake -DCMAKE_INSTALL_PREFIX=../install -DHIGHFIVE_EXAMPLES=N \ | |
| -DHIGHFIVE_UNIT_TESTS=N -DHIGHFIVE_BUILD_DOCS=N .. | |
| make | |
| make install | |
| - name: Install prerelease SCons | |
| if: matrix.name == 'SCons' | |
| run: | | |
| uv pip uninstall scons | |
| git clone https://github.com/SCons/scons | |
| cd scons | |
| uv pip install -e . | |
| - name: Build Cantera | |
| run: uv run scons build env_vars=all f90_interface=n -j4 debug=n | |
| --debug=time logging=debug python_package=y | |
| - name: Build Tests | |
| run: uv run scons -j4 build-tests | |
| - name: Run compiled tests | |
| run: uv run scons test-gtest test-legacy --debug=time | |
| - name: Run Python tests | |
| run: uv run pytest -raP -v -n auto --durations=50 test/python | |
| env: | |
| LD_LIBRARY_PATH: "${LD_LIBRARY_PATH}:build/lib" | |
| PYTHONPATH: build/python | |
| debuntu-docker: | |
| name: Docker '${{ matrix.image }}' image with Sundials MPI ${{ matrix.mpi }} | |
| strategy: | |
| matrix: | |
| include: | |
| - image: "ubuntu:devel" | |
| options: "" | |
| mpi: override # fall back to bundled Sundials (system_sundials=default) | |
| - image: "ubuntu:rolling" | |
| options: "system_sundials=y CC=mpicc CXX=mpicxx FORTRAN=mpifort" | |
| mpi: enabled # use MPI compiler wrappers | |
| - image: "debian:stable" | |
| options: "system_sundials=y CC=mpicc CXX=mpicxx FORTRAN=mpifort" | |
| mpi: enabled # use MPI compiler wrappers | |
| - image: "debian:testing" | |
| options: "system_sundials=y CC=mpicc CXX=mpicxx FORTRAN=mpifort" | |
| mpi: enabled # use MPI compiler wrappers | |
| - image: "debian:unstable" | |
| options: "system_sundials=y CC=mpicc CXX=mpicxx FORTRAN=mpifort" | |
| mpi: enabled # use MPI compiler wrappers | |
| fail-fast: false | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| container: | |
| image: ${{ matrix.image }} # zizmor: ignore[unpinned-images] | |
| steps: | |
| - name: Install git on ${{ matrix.image }} | |
| run: | | |
| apt update -y | |
| apt install -y --no-install-recommends git ca-certificates | |
| git config --global init.defaultBranch main | |
| git config --global --add safe.directory /__w/cantera/cantera | |
| - uses: actions/checkout@v7 | |
| name: Checkout the repository | |
| with: | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: Install Apt dependencies | |
| # Use packages from ubuntu image when possible | |
| run: | | |
| apt install -y --no-install-recommends python3 python3-pip pipenv scons \ | |
| build-essential libboost-dev gfortran libopenmpi-dev libpython3-dev \ | |
| libblas-dev liblapack-dev libhdf5-dev libfmt-dev libyaml-cpp-dev \ | |
| libgtest-dev libgmock-dev libeigen3-dev libsundials-dev \ | |
| openmpi-bin libopenmpi-dev \ | |
| cython3 python3-numpy python3-pandas python3-pint python3-graphviz \ | |
| python3-ruamel.yaml python3-setuptools python3-wheel python3-pytest \ | |
| python3-pytest-xdist doxygen python3-jinja2 | |
| gcc --version | |
| - name: Install Python dependencies | |
| run: | | |
| pipenv install pytest-github-actions-annotate-failures | |
| - name: Build Cantera | |
| run: | | |
| scons build env_vars=all -j4 debug=n --debug=time logging=debug \ | |
| system_eigen=y system_fmt=y ${{ matrix.options }} \ | |
| system_yamlcpp=y system_blas_lapack=y hdf_support=y \ | |
| cc_flags=-D_GLIBCXX_ASSERTIONS python_package=y f90_interface=y | |
| - name: Build Tests | |
| run: scons -j4 build-tests | |
| - name: Run compiled tests | |
| run: scons test-gtest test-legacy --debug=time | |
| - name: Run Python tests | |
| run: python3 -m pytest -raP -v -n auto --durations=50 test/python | |
| env: | |
| LD_LIBRARY_PATH: "${LD_LIBRARY_PATH}:build/lib" | |
| PYTHONPATH: build/python | |
| fedora-docker: | |
| name: Docker 'fedora:${{ matrix.image }}' image | |
| strategy: | |
| matrix: | |
| image: [rawhide, latest] | |
| fail-fast: false | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| container: | |
| image: fedora:${{ matrix.image }} | |
| steps: | |
| - name: Install git on fedora:${{ matrix.image }} | |
| run: | | |
| dnf install -y git | |
| git config --global init.defaultBranch main | |
| git config --global --add safe.directory /__w/cantera/cantera | |
| - uses: actions/checkout@v7 | |
| name: Checkout the repository | |
| with: | |
| persist-credentials: false | |
| - name: Install dependencies | |
| # Use packages from Fedora | |
| run: | | |
| dnf install -y boost-devel eigen3-devel fmt-devel gcc gcc-c++ \ | |
| gcc-fortran gmock-devel gtest-devel python3 python3-cython \ | |
| python3-devel python3-numpy python3-pandas python3-pint python3-pip \ | |
| python3-pytest python3-pytest-xdist python3-ruamel-yaml python3-scipy \ | |
| python3-scons python3-wheel sundials-devel yaml-cpp-devel hdf5-devel \ | |
| highfive-devel python3-graphviz python3-packaging python3-setuptools \ | |
| python3-jinja2 doxygen | |
| - name: Build Cantera | |
| run: | | |
| scons build -j4 debug=n --debug=time logging=debug python_package=y \ | |
| f90_interface=y extra_inc_dirs=/usr/include/eigen3 libdirname=/usr/lib64 \ | |
| system_eigen=y system_fmt=y system_blas_lapack=y system_sundials=y \ | |
| system_yamlcpp=y system_blas_lapack=y hdf_support=y | |
| # note: 'system_highfive=y' is omitted as the current packaged version is too old; | |
| # once newer version is available in 'latest', this should be tested as well | |
| - name: Build Tests | |
| run: scons -j4 build-tests | |
| - name: Run compiled tests | |
| run: scons test-gtest test-legacy --debug=time | |
| - name: Run Python tests | |
| run: python3 -m pytest -raP -v -n auto --durations=50 test/python | |
| env: | |
| LD_LIBRARY_PATH: build/lib | |
| PYTHONPATH: build/python | |
| ubuntu-python-prerelease: | |
| name: ${{ matrix.os }} with Python ${{ matrix.python-version }} | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 60 | |
| strategy: | |
| matrix: | |
| python-version: ['3.14'] | |
| os: ['ubuntu-24.04'] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v7 | |
| name: Checkout the repository | |
| with: | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: Setup Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| allow-prereleases: true | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| enable-cache: true | |
| cache-dependency-glob: | | |
| ${{ env.REQUIREMENTS_TXT_FILE }} | |
| - name: Install Apt dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install libboost-dev gfortran libopenmpi-dev \ | |
| libblas-dev liblapack-dev libhdf5-dev libfmt-dev doxygen \ | |
| libopenblas-dev | |
| gcc --version | |
| - name: Install Python dependencies | |
| run: | | |
| uv venv --python ${{ matrix.python-version }} --seed | |
| sed -i 's/cython.*\|pandas\|numpy\|scipy//g' "${REQUIREMENTS_TXT_FILE}" | |
| uv pip install -r "${REQUIREMENTS_TXT_FILE}" | |
| uv pip install --prerelease=allow numpy cython pandas scipy | |
| - name: Build Cantera | |
| run: | | |
| uv run scons build env_vars=all -j4 debug=n --debug=time logging=debug \ | |
| system_fmt=y system_blas_lapack=y hdf_support=y cc_flags=-D_GLIBCXX_ASSERTIONS \ | |
| python_package=y | |
| - name: Build Tests | |
| run: uv run scons -j4 build-tests | |
| - name: Run compiled tests | |
| run: uv run scons test-gtest test-legacy --debug=time | |
| - name: Run Python tests | |
| run: uv run pytest -raP -v -n auto --durations=50 test/python | |
| env: | |
| LD_LIBRARY_PATH: "${LD_LIBRARY_PATH}:build/lib" | |
| PYTHONPATH: build/python | |
| macos-homebrew: | |
| name: Homebrew Python/GCC on ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 90 | |
| strategy: | |
| matrix: | |
| os: ['macos-14', 'macos-15'] | |
| fail-fast: false | |
| steps: | |
| - uses: actions/checkout@v7 | |
| name: Checkout the repository | |
| with: | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: Setup uv | |
| uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: | | |
| ${{ env.REQUIREMENTS_TXT_FILE }} | |
| # - NumPy is installed here for the Python custom rate tests. | |
| # - Do not install brew SUNDIALS because it requires open-mpi and the brew open-mpi | |
| # package uses the system Clang to provide mpicc/mpicxx. | |
| # - Do not install brew dependencies for C++ because these are built with libc++ | |
| # while GCC will use libstdc++, and combining these will lead to linker errors | |
| - name: Install Brew dependencies | |
| run: | |
| brew install --display-times boost libomp hdf5 python numpy doxygen gcc eigen | |
| # This is necessary because of PEP 668 https://peps.python.org/pep-0668/ | |
| # PEP 668 prohibits installation to system Python packages via pip | |
| - name: Create a virtualenv for dependencies | |
| run: | | |
| uv venv --python "$(brew --prefix)/bin/python3" --seed | |
| - name: Install Python dependencies | |
| # SCons must be installed into the virtualenv because packaging is a dependency | |
| # and we can't install packaging for the homebrew Python | |
| run: | | |
| uv pip install -r "${REQUIREMENTS_TXT_FILE}" | |
| - name: Build Cantera | |
| run: | | |
| BREW_PREFIX=`brew --prefix` | |
| GCC_VER=`brew info gcc --json | jq -r '.[0]["installed"][0]["version"] | split(".")[0]'` | |
| echo "CC = '$BREW_PREFIX/bin/gcc-$GCC_VER'" >> cantera.conf | |
| echo "CXX = '$BREW_PREFIX/bin/g++-$GCC_VER'" >> cantera.conf | |
| echo "AR = '$BREW_PREFIX/bin/gcc-ar-$GCC_VER'" >> cantera.conf | |
| echo "extra_inc_dirs = '${BREW_PREFIX}/include'" >> cantera.conf | |
| echo "extra_lib_dirs = '${BREW_PREFIX}/lib'" >> cantera.conf | |
| uv run scons build env_vars=all -j3 debug=n --debug=time logging=debug \ | |
| python_package=y system_eigen=y | |
| - name: Build Tests | |
| run: uv run scons -j3 build-tests | |
| - name: Run compiled tests | |
| run: uv run scons test-gtest test-legacy --debug=time | |
| - name: Run Python tests | |
| run: uv run pytest -raP -v -n auto --durations=50 test/python | |
| env: | |
| DYLD_LIBRARY_PATH: "${DYLD_LIBRARY_PATH}:build/lib" | |
| PYTHONPATH: build/python |