1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
name: Tests
on:
push:
pull_request:
schedule:
- cron: '0 6 * * 1'
jobs:
all:
if: github.event_name != 'schedule' || github.repository == 'libmbd/libmbd'
name: All
strategy:
fail-fast: false
matrix:
include:
- type: ubuntu
mpi-nodes: 2
- type: macos
mpi-nodes: 2
- type: conda
- type: conda
mpi: openmpi
mpi-nodes: 8
elsi: elsi
- type: conda
mpi: mpich
mpi-nodes: 2
- type: conda
python-version: =3.6
cmake-version: =3.14
gfortran-version: =8
mpi: openmpi
mpi-nodes: 8
- type: conda
python-version: =3.6
cmake-version: =3.14
gfortran-version: =8
mpi: mpich=3.4.3=\*_100
mpi-nodes: 2
elsi: elsi
runs-on: ${{ fromJSON('{"ubuntu":"ubuntu-latest","macos":"macos-latest","conda":"ubuntu-latest"}')[matrix.type] }}
env:
CONDA_ALWAYS_YES: "true"
CONDA_QUIET: "true"
steps:
- name: Set environment variables
run: |
case ${{ runner.os }} in
Linux)
XDG_CACHE_HOME=$HOME/.cache
;;
macOS)
XDG_CACHE_HOME=$HOME/Library/Caches
;;
esac
echo YEAR_MONTH=$(date +"%Y-%m") >>$GITHUB_ENV
echo XDG_CACHE_HOME="$XDG_CACHE_HOME" >>$GITHUB_ENV
if [[ "${{ matrix.mpi-nodes }}" ]]; then
echo MPI_NODES=${{ matrix.mpi-nodes }} >>$GITHUB_ENV
fi
if [[ "${{ matrix.mpi }}" == "openmpi" || "${{ matrix.type }}" == "ubuntu" ]]; then
echo MPIEXEC_EXTRA_FLAGS=--oversubscribe >>$GITHUB_ENV
fi
echo VIRTUAL_ENV=$HOME/env >>$GITHUB_ENV
echo CONDA_PKGS_DIRS="$XDG_CACHE_HOME/conda/pkgs" >>$GITHUB_ENV
echo $HOME/env/bin >>$GITHUB_PATH
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/cache@v2
with:
path: |
${{ env.XDG_CACHE_HOME }}/conda/pkgs
${{ env.XDG_CACHE_HOME }}/pip
key: ${{ matrix.type }}-${{ matrix.python-version }}-${{ matrix.cmake-version }}-${{ matrix.gfortran-version }}-${{ matrix.mpi }}-${{ env.YEAR_MONTH }}-${{ hashFiles('pyproject.toml') }}
- name: Install libMBD dependencies
if: matrix.type == 'ubuntu'
run: sudo apt-get install -yq --no-install-suggests --no-install-recommends gfortran libblas-dev liblapack-dev mpi-default-dev mpi-default-bin libscalapack-mpi-dev
- name: Install libMBD dependencies
if: matrix.type == 'macos'
run: brew install open-mpi scalapack
- name: Create Conda environment
if: matrix.type == 'conda'
run: conda create -p ${{ env.VIRTUAL_ENV }} -c conda-forge python${{ matrix.python-version }} cmake${{ matrix.cmake-version }} gfortran_linux-64${{ matrix.gfortran-version }} openblas ${{ matrix.mpi }} scalapack elsi numpy scipy mpi4py
- name: Create Python virtual environment
if: matrix.type != 'conda'
run: |
python3 -m venv ${{ env.VIRTUAL_ENV }}
${{ env.VIRTUAL_ENV }}/bin/pip install -U pip
- name: Install coverage Python package
run: pip install -U coverage
- name: Report environment
run: |
type python
type pip
python --version
cmake --version
pip --version
git describe --tags --dirty=.dirty
- name: Set CMAKE_ARGS
run: |
FFLAGS=('-fprofile-arcs' '-ftest-coverage')
CMAKE_ARGS=()
if [[ "${{ matrix.mpi-nodes }}" ]]; then
CMAKE_ARGS+=('-DENABLE_SCALAPACK_MPI=ON')
fi
if [[ "${{ matrix.elsi }}" == "elsi" ]]; then
CMAKE_ARGS+=('-DENABLE_ELSI=ON')
fi
if [[ "${{ matrix.type }}" == "macos" ]]; then
CMAKE_ARGS+=('-DCMAKE_Fortran_COMPILER=gfortran-12')
fi
if [[ "${{ matrix.type }}" == "ubuntu" ]]; then
CMAKE_ARGS+=('-DCMAKE_IGNORE_PATH="/usr/lib/cmake/scalapack-2.1.0.openmpi;/lib/cmake/scalapack-2.1.0.openmpi"')
fi
echo CMAKE_ARGS=${CMAKE_ARGS[@]}
echo CMAKE_ARGS=${CMAKE_ARGS[@]} >>$GITHUB_ENV
echo FFLAGS=${FFLAGS[@]}
echo FFLAGS=${FFLAGS[@]} >>$GITHUB_ENV
- name: Run Cmake
run: |
[[ "${{ matrix.type }}" != "conda" ]] || { source $CONDA/etc/profile.d/conda.sh && conda activate $HOME/env && export CMAKE_ARGS="$CONDA_BACKUP_CMAKE_ARGS"; }
make run_cmake
- name: Build libMBD
run: make build_libmbd -o run_cmake
- name: Install libMBD
run: make install_libmbd -o build_libmbd
- name: Build & install pyMBD
run: |
[[ "${{ matrix.type }}" != "conda" ]] || { source $CONDA/etc/profile.d/conda.sh && conda activate $HOME/env; }
make install -o install_libmbd
- run: pip list
- name: Test libMBD
run: make test_libmbd
- name: Test pyMBD
run: |
make test -o test_libmbd RUN_CMD="coverage run -m" | tee output
! grep failed output >/dev/null
- name: Upload to Codecov
run: bash <(curl -s https://codecov.io/bash) -f "!*#tests#*"
|