Skip to content

Tests

Tests #4114

Workflow file for this run

name: Tests
on:
push:
pull_request:
schedule:
# run sunday moring
- cron: '30 6 * * 0'
defaults:
run:
shell: bash
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
standard_tests:
timeout-minutes: 60
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
env:
BOUT_TEST_TIMEOUT: "6m"
PETSC_DIR: /usr/lib/petscdir/petsc3.12/x86_64-linux-gnu-real
PETSC_ARCH: ""
SLEPC_DIR: /usr/lib/slepcdir/slepc3.12/x86_64-linux-gnu-real/
SLEPC_ARCH: ""
OMP_NUM_THREADS: ${{ matrix.config.omp_num_threads }}
PYTHONPATH: ${{ github.workspace }}/tools/pylib
OMPI_MCA_rmaps_base_oversubscribe: yes
PRTE_MCA_rmaps_default_mapping_policy: ":oversubscribe"
MPIRUN: mpiexec -np
strategy:
fail-fast: true
matrix:
# Need this to be able to exclude the coverage job
is_master_or_next:
- ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/next' || github.base_ref == 'master' || github.base_ref == 'next' }}
is_cron:
- ${{ github.event_name == 'cron' }}
config:
- name: "CMake, PETSc unreleased, ADIOS2"
os: ubuntu-20.04
cmake_options: "-DBUILD_SHARED_LIBS=ON
-DBOUT_ENABLE_METRIC_3D=ON
-DBOUT_ENABLE_OPENMP=ON
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DBOUT_USE_ADIOS2=ON
-DBOUT_ENABLE_PYTHON=ON
-DADIOS2_ROOT=/home/runner/local/adios2
-DSUNDIALS_ROOT=/home/runner/local
-DPETSC_DIR=/home/runner/local/petsc
-DSLEPC_DIR=/home/runner/local/slepc"
build_petsc: -petsc-main
build_petsc_branch: main
build_adios2: true
on_cron: true
- name: "Default options, Ubuntu 20.04"
os: ubuntu-20.04
cmake_options: ""
on_cron: false
- name: "Optimised, static"
os: ubuntu-20.04
cmake_options: "-DCHECK=0
-DBUILD_SHARED_LIBS=OFF
-DCMAKE_CXX_FLAGS=-Ofast
-DBOUT_ENABLE_SIGNAL=OFF
-DBOUT_ENABLE_TRACK=OFF
-DBOUT_ENABLE_BACKTRACE=OFF
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DSUNDIALS_ROOT=/home/runner/local"
on_cron: false
- name: "Debug, shared"
os: ubuntu-20.04
cmake_options: "-DCHECK=3
-DCMAKE_BUILD_TYPE=Debug
-DBOUT_ENABLE_SIGNAL=ON
-DBOUT_ENABLE_TRACK=ON
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DSUNDIALS_ROOT=/home/runner/local"
on_cron: false
- name: "Shared, release, Ubuntu 20.04"
os: ubuntu-20.04
cmake_options: "-DBUILD_SHARED_LIBS=ON
-DBOUT_ENABLE_OPENMP=ON
-DCMAKE_BUILD_TYPE=Release
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DBOUT_BUILD_DOCS=OFF
-DSUNDIALS_ROOT=/home/runner/local"
omp_num_threads: 2
on_cron: false
- name: "Shared, OpenMP, 3D metrics"
os: ubuntu-latest
cmake_options: "-DBUILD_SHARED_LIBS=ON
-DBOUT_ENABLE_METRIC_3D=ON
-DBOUT_ENABLE_OPENMP=ON
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DBOUT_ENABLE_PYTHON=ON
-DSUNDIALS_ROOT=/home/runner/local"
omp_num_threads: 2
on_cron: false
- name: "CMake, new PETSc"
os: ubuntu-20.04
cmake_options: "-DBUILD_SHARED_LIBS=ON
-DBOUT_ENABLE_METRIC_3D=ON
-DBOUT_ENABLE_OPENMP=ON
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_SUNDIALS=ON
-DBOUT_ENABLE_PYTHON=ON
-DSUNDIALS_ROOT=/home/runner/local
-DPETSC_DIR=/home/runner/local/petsc
-DSLEPC_DIR=/home/runner/local/slepc"
build_petsc: -petsc
on_cron: false
- name: "Coverage"
os: ubuntu-20.04
cmake_options: "-DBUILD_SHARED_LIBS=ON
-DCMAKE_BUILD_TYPE=Debug
-DCHECK=3
-DENABLE_COVERAGE=ON
-DBOUT_USE_PETSC=ON
-DBOUT_USE_SLEPC=ON
-DBOUT_USE_HDF5=ON
-DBOUT_USE_SUNDIALS=ON
-DBOUT_ENABLE_PYTHON=ON
-DSUNDIALS_ROOT=/home/runner/local"
unit_only: YES
on_cron: false
exclude:
# Don't run the coverage tests if the branch isn't master or next
- is_master_or_next: false
config:
name: "Coverage"
- is_cron: true
config:
on_cron: false
steps:
- name: Job information
run: |
echo Build: ${{ matrix.config.name }}, ${{ matrix.config.os }}
echo CMake options: ${{ matrix.config.cmake_options }}
- name: Install dependencies
run: sudo apt update &&
sudo apt install -y
libfftw3-dev
libnetcdf-dev
libnetcdf-c++4-dev
netcdf-bin
python3
python3-pip
python3-pytest
python3-numpy
python3-scipy
lcov
openmpi-bin
libopenmpi-dev
petsc-dev
slepc-dev
liblapack-dev
libparpack2-dev
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install pip packages
run: |
python -m pip install --upgrade pip setuptools
python -m pip install -r requirements.txt
- name: Cache SUNDIALS build
uses: actions/cache@v3
with:
path: /home/runner/local
key: bout-sundials-${{ matrix.config.os }}${{ matrix.config.build_petsc }}
- name: Build SUNDIALS
run: ./.build_sundials_for_ci.sh
- name: Build PETSc
run: BUILD_PETSC=${{ matrix.config.build_petsc }} ./.build_petsc_for_ci.sh ${{ matrix.config.build_petsc_branch }}
- name: Build ADIOS2
run: BUILD_ADIOS2=${{ matrix.config.build_adios2 }} ./.build_adios2_for_ci.sh
- name: Build BOUT++
run: UNIT_ONLY=${{ matrix.config.unit_only }} ./.ci_with_cmake.sh ${{ matrix.config.cmake_options }}
- name: Capture coverage
if: ${{ matrix.config.name == 'Coverage' }}
# Explicitly run the coverage capture target, because
# ci_script.sh also does the upload, and we're going to do
# that ourselves in the next step
run: |
# Ensure that there is a corresponding .gcda file for every .gcno file
# This is to try and make the coverage report slightly more accurate
# It still won't include, e.g. any solvers we don't build with though
find . -name "*.gcno" -exec sh -c 'touch -a "${1%.gcno}.gcda"' _ {} \;
make -C build code-coverage-capture
- name: Upload coverage
if: ${{ matrix.config.name == 'Coverage' }}
uses: codecov/codecov-action@v3
Fedora:
# This is its own job as it doesn't use most of the steps of the
# standard_tests
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Build Fedora rawhide
run: ./.ci_fedora.sh setup openmpi rawhide
shell: bash
env:
TRAVIS_BUILD_DIR: ${{ github.workspace }}
CUDA:
timeout-minutes: 60
runs-on: ubuntu-latest
container: ghcr.io/ggeorgakoudis/boutdev-cuda:latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Build minimal CUDA 12.2 @ GCC9.4.0 @ Ubuntu 20.04
run: |
. /spack/share/spack/setup-env.sh
spack env activate -p /spack-env
git config --global --add safe.directory $GITHUB_WORKSPACE
rm -rf build
cmake -S $GITHUB_WORKSPACE -B build \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DBOUT_ENABLE_RAJA=on \
-DBOUT_ENABLE_UMPIRE=on \
-DBOUT_ENABLE_CUDA=on \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCUDA_ARCH=compute_80,code=sm_80 \
-DBOUT_ENABLE_WARNINGS=off \
-DBOUT_USE_SYSTEM_FMT=on
cd build
make -j 4