Make PETSc optional #27485
Workflow file for this run
This file contains 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: DOLFINx CI | |
on: | |
push: | |
branches: | |
- "**" | |
tags: | |
- "v*" | |
pull_request: | |
branches: | |
- main | |
merge_group: | |
branches: | |
- main | |
workflow_dispatch: | |
inputs: | |
ffcx_ref: | |
description: "FFCx branch or tag" | |
default: "main" | |
type: string | |
basix_ref: | |
description: "Basix branch or tag" | |
default: "main" | |
type: string | |
ufl_ref: | |
description: "UFL branch or tag" | |
default: "main" | |
type: string | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
container: ghcr.io/fenics/test-env:current-openmpi | |
steps: | |
- uses: actions/checkout@v4 | |
- name: ruff C++ .py file checks | |
run: | | |
cd cpp/ | |
ruff check . | |
ruff format --check . | |
- name: ruff Python interface checks | |
run: | | |
cd python/ | |
ruff check . | |
ruff format --check . | |
- name: mypy checks | |
run: | | |
cd python/ | |
mypy dolfinx | |
mypy demo | |
mypy test | |
- name: clang-format C++ checks (non-blocking) | |
continue-on-error: true | |
run: | | |
cd cpp | |
clang-format --version | |
find . -type f \( -name "*.cpp" -o -name "*.h" \) ! -name "loguru.cpp" | xargs clang-format --dry-run --Werror | |
- name: clang-format Python binding checks (non-blocking) | |
continue-on-error: true | |
run: | | |
cd python/dolfinx/wrappers | |
clang-format --version | |
find . -type f \( -name "*.cpp" -o -name "*.h" \) | xargs clang-format --dry-run --Werror | |
- name: cmake-format (non-blocking) | |
continue-on-error: true | |
run: | | |
find . -type f \( -name "*.cmake" -o -name "*.cmake.in" -o -name "CMakeLists.txt" \) | xargs cmake-format --check | |
build: | |
if: "!(contains(github.event.head_commit.message, '[ci skip]') || contains(github.event.head_commit.message, '[skip ci]'))" | |
runs-on: ubuntu-latest | |
container: ghcr.io/fenics/test-env:current-openmpi | |
env: | |
OMPI_ALLOW_RUN_AS_ROOT: 1 | |
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 | |
# SCOTCH_ROOT: ${{ vars.PETSC_DIR }}/linux-gnu-real64-32 | |
steps: | |
- name: Set SCOTCH dir | |
run: | | |
export SCOTCH_DIR=${PETSC_DIR}/linux-gnu-real64-32 | |
- name: Test arch (1) | |
run: | | |
echo "PETSC: ${PETSC_DIR}" | |
echo "SCOTCH-dir ${SCOTCH_DIR}" | |
- name: Install FEniCS Python components (default branches/tags) | |
if: github.event_name != 'workflow_dispatch' | |
run: | | |
python3 -m pip install git+https://github.com/FEniCS/ufl.git | |
python3 -m pip install git+https://github.com/FEniCS/basix.git | |
python3 -m pip install git+https://github.com/FEniCS/ffcx.git | |
- name: Install FEniCS Python components | |
if: github.event_name == 'workflow_dispatch' | |
run: | | |
python3 -m pip install git+https://github.com/FEniCS/ufl.git@${{ github.event.inputs.ufl_ref }} | |
python3 -m pip install git+https://github.com/FEniCS/basix.git@${{ github.event.inputs.basix_ref }} | |
python3 -m pip install git+https://github.com/FEniCS/ffcx.git@${{ github.event.inputs.ffcx_ref }} | |
- uses: actions/checkout@v4 | |
- name: Configure C++ | |
run: cmake -G Ninja -DDOLFINX_ENABLE_PETSC=false -DCMAKE_BUILD_TYPE=Developer -B build -S cpp/ | |
- name: Build and install C++ library | |
run: | | |
cmake --build build | |
cmake --install build | |
- name: Build Python interface | |
run: python3 -m pip -v install --check-build-dependencies --no-build-isolation --config-settings=cmake.build-type="Debug" python/ | |
- name: Test Python import | |
run: python3 -c "import dolfinx; print dolfinx.__version__" | |
build-with-petsc: | |
if: "!(contains(github.event.head_commit.message, '[ci skip]') || contains(github.event.head_commit.message, '[skip ci]'))" | |
runs-on: ubuntu-latest | |
container: ghcr.io/fenics/test-env:current-openmpi | |
env: | |
PETSC_ARCH: ${{ matrix.petsc_arch }} | |
OMPI_ALLOW_RUN_AS_ROOT: 1 | |
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 | |
strategy: | |
matrix: | |
petsc_arch: [linux-gnu-real32-32, linux-gnu-real64-32, linux-gnu-complex64-32, linux-gnu-complex128-32, linux-gnu-real64-64, linux-gnu-complex128-64] | |
name: Build and test (${{ matrix.petsc_arch }}) | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install FEniCS Python components (default branches/tags) | |
if: github.event_name != 'workflow_dispatch' | |
run: | | |
python3 -m pip install git+https://github.com/FEniCS/ufl.git | |
python3 -m pip install git+https://github.com/FEniCS/basix.git | |
python3 -m pip install git+https://github.com/FEniCS/ffcx.git | |
- name: Install FEniCS Python components | |
if: github.event_name == 'workflow_dispatch' | |
run: | | |
python3 -m pip install git+https://github.com/FEniCS/ufl.git@${{ github.event.inputs.ufl_ref }} | |
python3 -m pip install git+https://github.com/FEniCS/basix.git@${{ github.event.inputs.basix_ref }} | |
python3 -m pip install git+https://github.com/FEniCS/ffcx.git@${{ github.event.inputs.ffcx_ref }} | |
- name: Configure C++ | |
run: cmake -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build -S cpp/ | |
- name: Build and install C++ library | |
run: | | |
cmake --build build | |
cmake --install build | |
- name: Build C++ interface documentation | |
run: | | |
export DOLFINX_VERSION=`cmake -L build | grep DOXYGEN_DOLFINX_VERSION | cut -f2 -d "="` | |
echo $DOLFINX_VERSION | |
cd cpp/doc | |
doxygen Doxyfile | |
make html | |
- name: Build C++ unit tests | |
run: | | |
cmake -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/test/ -S cpp/test/ | |
cmake --build build/test --parallel 3 | |
- name: Run C++ unit tests (serial) | |
run: | | |
cd build/test | |
ctest -V --output-on-failure -R unittests | |
- name: Run C++ unit tests (MPI) | |
run: | | |
cd build/test | |
mpiexec -np 2 ctest -V --output-on-failure -R unittests | |
- name: Build and run C++ regression tests (serial and MPI (np=2)) | |
run: | | |
cmake -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/demo/ -S cpp/demo/ | |
cmake --build build/demo --parallel 3 | |
cd build/demo | |
ctest -V -R demo -R serial | |
ctest -V -R demo -R mpi_2 | |
- name: Build Python interface | |
run: | | |
python3 -m pip -v install --check-build-dependencies --no-build-isolation --config-settings=cmake.build-type="Debug" python/ | |
- name: Build Python interface documentation | |
run: | | |
cd python/doc | |
python3 -m sphinx -W -b html source/ build/html/ | |
- name: Set default DOLFINx JIT options | |
run: | | |
mkdir -p ~/.config/dolfinx | |
echo '{ "cffi_extra_compile_args": ["-g0", "-O0" ] }' > ~/.config/dolfinx/dolfinx_jit_options.json | |
- name: Run demos (Python, serial) | |
run: python3 -m pytest -n=2 -m serial --durations=10 python/demo/test.py | |
- name: Run demos (Python, MPI (np=2)) | |
run: python3 -m pytest -m mpi --num-proc=2 python/demo/test.py | |
- name: Run Python unit tests (serial) | |
run: python3 -m pytest -n=auto --durations=50 python/test/unit/ | |
- name: Run Python unit tests (MPI, np=2) | |
run: mpirun -np 2 python3 -m pytest python/test/unit/ | |
- name: Upload C++ documentation artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: doc-cpp-${{ matrix.petsc_arch }} | |
path: | | |
cpp/doc/html/ | |
cpp/doc/build/ | |
retention-days: 2 | |
if-no-files-found: error | |
- name: Upload Python documentation artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: doc-python-${{ matrix.petsc_arch }} | |
path: | | |
python/doc/build/html/ | |
retention-days: 2 | |
if-no-files-found: error | |
- name: Checkout FEniCS/docs | |
if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) && runner.os == 'Linux' }} | |
uses: actions/checkout@v4 | |
with: | |
repository: "FEniCS/docs" | |
path: "docs" | |
ssh-key: "${{ secrets.SSH_GITHUB_DOCS_PRIVATE_KEY }}" | |
- name: Set version name | |
if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) && runner.os == 'Linux' }} | |
run: | | |
echo "VERSION_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Copy documentation into repository | |
if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) && runner.os == 'Linux' }} | |
run: | | |
cd docs | |
git rm -r --ignore-unmatch dolfinx/${{ env.VERSION_NAME }}/cpp | |
git rm -r --ignore-unmatch dolfinx/${{ env.VERSION_NAME }}/python | |
mkdir -p dolfinx/${{ env.VERSION_NAME }}/cpp | |
mkdir -p dolfinx/${{ env.VERSION_NAME }}/cpp/doxygen | |
mkdir -p dolfinx/${{ env.VERSION_NAME }}/python | |
cp -r ../cpp/doc/build/html/* dolfinx/${{ env.VERSION_NAME }}/cpp/ | |
cp -r ../cpp/doc/html/* dolfinx/${{ env.VERSION_NAME }}/cpp/doxygen | |
cp -r ../python/doc/build/html/* dolfinx/${{ env.VERSION_NAME }}/python | |
- name: Commit and push documentation to FEniCS/docs | |
if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) && runner.os == 'Linux' && matrix.petsc_arch == 'linux-gnu-real64-32' }} | |
run: | | |
cd docs | |
git config --global user.email "[email protected]" | |
git config --global user.name "FEniCS GitHub Actions" | |
git add --all | |
git commit --allow-empty -m "C++/Python FEniCS/dolfinx@${{ github.sha }}" | |
git push |