Skip to content

Workflow file for this run

name: MODFLOW 6 continuous integration
on:
push:
branches:
- master
- develop
- ci-diagnose*
- netcdf-ci
paths-ignore:
- '**.md'
- 'doc/**'
pull_request:
branches:
- master
- develop
paths-ignore:
- '**.md'
- 'doc/**'
jobs:
lint:
name: Check format
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: environment.yml
cache-environment: true
cache-downloads: true
- name: Check Fortran source formatting
run: python .github/common/fortran_format_check.py
build:
name: Build
runs-on: ubuntu-22.04
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 13
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
- name: Setup gfortran ${{ env.GCC_V }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ env.GCC_V }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: environment.yml
cache-environment: true
cache-downloads: true
- name: Meson setup
run: meson setup builddir -Ddebug=false -Dwerror=true
- name: Meson compile
run: meson compile -C builddir
- name: Show build log
if: failure()
run: cat builddir/meson-logs/meson-log.txt
- name: Meson test
run: meson test --verbose --no-rebuild -C builddir
smoke_test:
name: Smoke test
runs-on: ubuntu-22.04
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 13
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Setup GNU Fortran ${{ env.GCC_V }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ env.GCC_V }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin
meson install -C builddir
- name: Show build log
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Unit test programs
working-directory: modflow6
run: meson test --verbose --no-rebuild -C builddir
- name: Update flopy
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs
working-directory: modflow6/autotest
run: |
if [ "${{ github.ref_name }}" == "master" ]; then
pytest -v -n auto --durations 0 -m "not slow and not regression and not developmode"
else
pytest -v -n auto --durations 0 -S
fi
netcdf_test:
name: netcdf4 testing
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04 ]
hdf5: [ 1.12.2 ]
#netcdf: [ v4.7.4, v4.8.1, v4.9.0, main ]
netcdf: [ v4.9.0, main ]
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Setup GNU Fortran ${{ env.GCC_V }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ env.GCC_V }}
# - name: Configure environment
# if: runner.os == 'Linux'
# run: |
# echo "PKG_CONFIG_PATH=$GITHUB_WORKSPACE/petsc/linux-gnu/lib/pkgconfig" >> $GITHUB_ENV
# echo "$GITHUB_WORKSPACE/petsc/linux-gnu/bin" >> $GITHUB_PATH
# - name: Configure PETSc
# if: runner.os == 'Linux'
# working-directory: petsc
# run: |
# sudo ./configure PETSC_ARCH=linux-gnu --download-fblaslapack --download-openmpi
# sudo make all
- name: Install System dependencies
shell: bash -l {0}
run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev libzstd-dev gfortran
# run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev gfortran
###
# Set Environmental Variables
###
- name: Install System dependencies
shell: bash -l {0}
run: |
echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
###
# Installing libhdf4 and libhdf5
###
- name: Cache libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
id: cache-hdf5
uses: actions/cache@v2
with:
path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
- name: Build libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
if: steps.cache-hdf5.outputs.cache-hit != 'true'
run: |
#pushd $HOME
cd $HOME
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2
tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2
#pushd hdf5-${{ matrix.hdf5 }}
cd hdf5-${{ matrix.hdf5 }}
./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --enable-hl --with-szlib
make -j
make install -j
#popd
- name: Build step 2 libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
if: steps.cache-hdf5.outputs.cache-hit != 'true'
run: |
if [[ ${{ matrix.netcdf }} != "main" ]]; then
git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
#pushd netcdf-c
cd netcdf-c
autoreconf -if
CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
make -j install
#popd
fi
#popd
- name: Install System dependencies
shell: bash -l {0}
run: |
echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
echo "CMAKE_PREFIX_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf}}" >> $GITHUB_ENV
echo "HDF5_PLUGIN_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
echo "HDF5_PLUGIN_DIR=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
###
# Fetch Cache
###
# - name: Fetch HDF Cache
# id: cache-hdf5
# uses: actions/cache@v2
# with:
# path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
#
# - name: Check Cache
# shell: bash -l {0}
# run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{matrix.netcdf}}/lib
###
# Configure and build
###
- name: Build netcdf-c if main
run: |
#pushd $HOME
find . | grep -i CMakeLists.txt
cd $HOME
git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
#pushd netcdf-c
cd netcdf-c
autoreconf -if
CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --with-plugin-dir=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib
make -j install
#popd
#popd
if: ${{ matrix.netcdf }} == "main"
- name: Perform out-of-directory build
shell: bash -l {0}
run: |
#ls -l
#ls -l ${CMAKE_PREFIX_PATH}
#mkdir build
#cd build
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake $(pwd)/../ -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Create build directory and run CMake"
pwd
find . | grep -i CMakeLists.txt
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake -S netcdf-c -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Build Project"
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake --build build --target all --config Release -- -j4
- name: Print Summary
shell: bash -l {0}
run: |
#cd build
#cat libnetcdff.settings
find . | grep -i libnetcdff.settings
- name: Build All
shell: bash -l {0}
run: |
cd build
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12
if: ${{ success() }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin
meson install -C builddir
- name: Show Meson logs
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Update flopy
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
branch="${{ github.ref_name }}"
marker="not large"
markers=$([ "$branch" == "master" ] && echo "$marker and not developmode" || echo "$marker")
pytest -v -n auto --durations 0 -m "$markers"
netcdf_test_win:
name: netcdf4 testing
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ windows-2022 ]
hdf5: [ 1.12.2 ]
#netcdf: [ v4.7.4, v4.8.1, v4.9.0, main ]
netcdf: [ v4.9.0, main ]
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
update: true
install: |
git
make
mingw-w64-x86_64-gcc
mingw-w64-x86_64-python
mingw-w64-x86_64-python-pip
mingw-w64-x86_64-python-pytest
# - name: Setup MPI
# if: runner.os == 'Windows'
# uses: mpi4py/setup-mpi@v1
# with:
# mpi: msmpi
- name: Setup GNU Fortran ${{ env.GCC_V }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ env.GCC_V }}
# - name: Configure PETSc
# if: runner.os == 'Windows'
# shell: msys2 {0}
# working-directory: petsc
# run: |
# pacman -Syu
# pacman -Sy --noconfirm autoconf automake-wrapper bison bsdcpio make git \
# mingw-w64-x86_64-toolchain patch python flex \
# pkg-config pkgfile tar unzip mingw-w64-x86_64-cmake \
# mingw-w64-x86_64-msmpi mingw-w64-x86_64-openblas mingw-w64-x86_64-jq
# /usr/bin/python ./configure --with-mpiexec='/C/Program\ Files/Microsoft\ MPI/Bin/mpiexec' --with-shared-libraries=0
# make all
- name: Install System dependencies
shell: msys2 {0}
run: |
pacman -Syu
#pacman -Sy --noconfirm libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev libzstd-dev
pacman -Sy --noconfirm --needed automake autoconf libxml2 libtool git wget curl bzip2 m4 flex bison cmake tar base-devel
#pacman -Sy --noconfirm --needed base-devel automake autoconf m4 flex bison cmake base-devel
###
# Installing libhdf4 and libhdf5
###
# - name: Cache libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# id: cache-hdf5
# uses: actions/cache@v2
# with:
# path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
- name: Build libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
if: steps.cache-hdf5.outputs.cache-hit != 'true'
shell: msys2 {0}
run: |
#pacman -Sy --noconfirm mingw-w64-x86_64-hdf5
pacman -Sy --noconfirm mingw-w64-x86_64-netcdf
# #pushd $HOME
# cd $HOME
# wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2
# tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2
# #pushd hdf5-${{ matrix.hdf5 }}
# cd hdf5-${{ matrix.hdf5 }}
# ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --enable-hl --with-szlib
# make -j
# make install -j
# #popd
# - name: Make libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# if: steps.cache-hdf5.outputs.cache-hit != 'true'
# shell: msys2 {0}
# run: |
# if [[ ${{ matrix.netcdf }} != "main" ]]; then
# git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
# #pushd netcdf-c
# cd netcdf-c
# autoreconf -if
# CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# make -j install
# #popd
# fi
# #popd
###
# Set Environmental Variables
###
###
# Fetch Cache
###
# - name: Fetch HDF Cache
# id: cache-hdf5
# uses: actions/cache@v2
# with:
# path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
#
# - name: Check Cache
# shell: bash -l {0}
# run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{matrix.netcdf}}/lib
###
# Configure and build
###
# - name: Build netcdf-c if main
# shell: msys2 {0}
# run: |
# #pushd $HOME
# cd $HOME
# git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
# #pushd netcdf-c
# cd netcdf-c
# autoreconf -if
# CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --with-plugin-dir=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib
# make -j install
# #popd
# #popd
# if: ${{ matrix.netcdf }} == "main"
- name: Perform out-of-directory build
#shell: bash -l {0}
shell: msys2 {0}
run: |
#ls -l
#ls -l ${CMAKE_PREFIX_PATH}
#mkdir build
#cd build
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake $(pwd)/../ -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Create build directory and run CMake"
pwd
find . | grep -i CMakeLists.txt
git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
#pushd netcdf-c
cd netcdf-c
autoreconf -if
CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --with-plugin-dir=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib
make -j install
cd ..
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake -S netcdf-c -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Build Project"
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake --build build --target all --config Release -- -j4
- name: Print Summary
shell: msys2 {0}
#shell: bash -l {0}
run: |
#cd build
#cat libnetcdff.settings
find . | grep -i libnetcdff.settings
- name: Build All
shell: msys2 {0}
#shell: bash -l {0}
run: |
cd build
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12
if: ${{ success() }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin
meson install -C builddir
- name: Show Meson logs
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Update flopy
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
branch="${{ github.ref_name }}"
marker="not large"
markers=$([ "$branch" == "master" ] && echo "$marker and not developmode" || echo "$marker")
pytest -v -n auto --durations 0 -m "$markers"
netcdf_test_mac:
name: netcdf4 testing
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ macos-12 ]
hdf5: [ 1.12.2 ]
#netcdf: [ v4.7.4, v4.8.1, v4.9.0, main ]
netcdf: [ v4.9.0, main ]
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
###
# Set Environmental Variables
###
- run: echo "FCFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "FFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "CPPFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
- run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
- run: echo "DYLD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
- run: echo "PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/bin:${PATH}" >> $GITHUB_ENV
- run: brew install automake libaec
###
# Installing libhdf4 and libhdf5
###
- name: Cache libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
id: cache-hdf5
uses: actions/cache@v2
with:
path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
- name: Build libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
if: steps.cache-hdf5.outputs.cache-hit != 'true'
run: |
#pushd $HOME
cd $HOME
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2
tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2
#pushd hdf5-${{ matrix.hdf5 }}
cd hdf5-${{ matrix.hdf5 }}
./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --enable-hl --with-szlib
make -j
make install -j
#popd
- name: Build 2 libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
if: steps.cache-hdf5.outputs.cache-hit != 'true'
run: |
git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
#pushd netcdf-c
cd netcdf-c
autoreconf -if
CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
make -j
make install -j
#popd
#popd
###
# Set Environmental Variables
###
- run: echo "FCFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "FFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
- run: echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
- run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
- run: echo "CMAKE_PREFIX_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf}}" >> $GITHUB_ENV
- run: brew install automake
###
# Fetch Cache
###
# - name: Fetch HDF Cache
# id: cache-hdf5
# uses: actions/cache@v2
# with:
# path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
# - name: Check Cache
# shell: bash -l {0}
# run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{matrix.netcdf}}/lib
###
# Configure and build
###
- name: Perform out-of-directory build
shell: bash -l {0}
run: |
#mkdir build
#cd build
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Create build directory and run CMake"
pwd
find . | grep -i CMakeLists.txt
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake -S netcdf-c -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
#- name: "Build Project"
#LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake --build build --target all --config Release -- -j4
- name: Print Summary
shell: bash -l {0}
run: |
#cd build
#cat libnetcdff.settings
find . | grep -i libnetcdff.settings
- name: Build All
shell: bash -l {0}
run: |
cd build
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12
if: ${{ success() }}
- name: Run Tests
shell: bash -l {0}
run: |
cd build
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 1 .
if: ${{ success() }}
- name: Look at LastTest.log if error
shell: bash -l {0}
run: |
cat /home/runner/work/netcdf-fortran/netcdf-fortran/build/Testing/Temporary/LastTest.log
cd build
LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest --rerun-failed --output-on-failure
if: ${{ failure() }}
test_gfortran:
name: Test (gfortran)
needs:
- lint
- build
- smoke_test
- netcdf_test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# compatible combinations from https://github.com/awvwgk/setup-fortran#runner-compatibility
include:
- {os: ubuntu-20.04, gcc_v: 7, test: false}
- {os: ubuntu-20.04, gcc_v: 8, test: false}
- {os: ubuntu-20.04, gcc_v: 9, test: false}
- {os: ubuntu-20.04, gcc_v: 10, test: false}
- {os: ubuntu-20.04, gcc_v: 11, test: false}
- {os: ubuntu-22.04, gcc_v: 12, test: false}
# only run autotests on latest version on each platform
- {os: ubuntu-22.04, gcc_v: 13, test: true}
- {os: macos-12, gcc_v: 7, test: false}
- {os: macos-12, gcc_v: 8, test: false}
- {os: macos-12, gcc_v: 9, test: false}
- {os: macos-12, gcc_v: 10, test: false}
- {os: macos-12, gcc_v: 11, test: false}
- {os: macos-12, gcc_v: 12, test: false}
- {os: macos-12, gcc_v: 13, test: true}
- {os: windows-2022, gcc_v: 9, test: false}
- {os: windows-2022, gcc_v: 10, test: false}
- {os: windows-2022, gcc_v: 11, test: false}
- {os: windows-2022, gcc_v: 12, test: true}
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Checkout modflow6-testmodels
uses: actions/checkout@v3
with:
repository: MODFLOW-USGS/modflow6-testmodels
path: modflow6-testmodels
- name: Checkout modflow6-examples
uses: actions/checkout@v3
with:
repository: MODFLOW-USGS/modflow6-examples
path: modflow6-examples
- name: Setup GNU Fortran ${{ matrix.gcc_v }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ matrix.gcc_v }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin
meson install -C builddir
- name: Show build log
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Unit test programs
working-directory: modflow6
run: meson test --verbose --no-rebuild -C builddir
- name: Update flopy
if: matrix.test
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
if: matrix.test
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
pytest -v --durations 0 get_exes.py
- name: Test modflow6
if: matrix.test
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
if [ "${{ github.ref_name }}" == "master" ]; then
pytest -v -n auto --durations 0 -m "not large and not developmode"
else
pytest -v -n auto --durations 0 -m "not large"
fi
- name: Checkout usgslatex
if: matrix.test && runner.os == 'Linux'
uses: actions/checkout@v3
with:
repository: MODFLOW-USGS/usgslatex
path: usgslatex
- name: Install TeX Live
if: matrix.test && runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt install texlive-science \
texlive-latex-extra \
texlive-font-utils \
texlive-fonts-recommended \
texlive-fonts-extra
- name: Install USGS LaTeX style files and Univers font
if: matrix.test && runner.os == 'Linux'
working-directory: usgslatex/usgsLaTeX
run: sudo ./install.sh --all-users
- name: Test distribution scripts
if: matrix.test
working-directory: modflow6/distribution
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0
test_intel_fortran:
name: Test (Intel)
needs:
- lint
- build
- smoke_test
- netcdf_test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
### ifx
## 2022.2.x autotests disabled
# - mf5to6 test_evt: failure to converge
# - mf6 Keating_[disu_]dev: bad head comparison
- {os: ubuntu-22.04, compiler: intel, version: 2022.2.1, test: false}
- {os: ubuntu-22.04, compiler: intel, version: 2022.2, test: false}
## 2021.1 segfault in meson serial sim test
# - {os: ubuntu-22.04, compiler: intel, version: 2022.1, test: false}
## 2022.0 & 2021.[1,2,4] segfault at compile time
# - {os: ubuntu-22.04, compiler: intel, version: "2022.0", test: false}
# - {os: ubuntu-22.04, compiler: intel, version: 2021.4, test: false}
# - {os: ubuntu-22.04, compiler: intel, version: 2021.2, test: false}
# - {os: ubuntu-22.04, compiler: intel, version: 2021.1, test: false}
## ifx not yet supported on macOS
# - {os: macos-12, compiler: intel, version: 2023.2, test: true}
## 2023.[0,1] fail to compile
# - {os: windows-2022, compiler: intel, version: 2023.1, test: false}
# - {os: windows-2022, compiler: intel, version: "2023.0", test: false}
- {os: windows-2022, compiler: intel, version: 2022.2, test: false}
## 2022.1 fail to link
# - {os: windows-2022, compiler: intel, version: 2022.1, test: false}
### ifort
## only autotest latest on each platform
- {os: ubuntu-22.04, compiler: intel-classic, version: "2021.10", test: false}
- {os: ubuntu-22.04, compiler: intel-classic, version: 2021.9, test: false}
- {os: ubuntu-22.04, compiler: intel-classic, version: 2021.8, test: false}
- {os: ubuntu-22.04, compiler: intel-classic, version: 2021.7, test: true}
- {os: ubuntu-22.04, compiler: intel-classic, version: 2021.6, test: false}
- {os: macos-12, compiler: intel-classic, version: "2021.10", test: false}
- {os: macos-12, compiler: intel-classic, version: 2021.9, test: false}
- {os: macos-12, compiler: intel-classic, version: 2021.8, test: false}
- {os: macos-12, compiler: intel-classic, version: 2021.7, test: true}
- {os: macos-12, compiler: intel-classic, version: 2021.6, test: false}
- {os: windows-2022, compiler: intel-classic, version: "2021.10", test: false}
- {os: windows-2022, compiler: intel-classic, version: 2021.9, test: false}
- {os: windows-2022, compiler: intel-classic, version: 2021.8, test: false}
- {os: windows-2022, compiler: intel-classic, version: 2021.7, test: true}
- {os: windows-2022, compiler: intel-classic, version: 2021.6, test: false}
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Checkout modflow6-testmodels
uses: actions/checkout@v3
with:
repository: MODFLOW-USGS/modflow6-testmodels
path: modflow6-testmodels
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Setup Intel Fortran
uses: awvwgk/setup-fortran@main
with:
compiler: ${{ matrix.compiler }}
version: ${{ matrix.version }}
- name: Update version files
working-directory: modflow6/distribution
run: python update_version.py
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin
meson install -C builddir
- name: Show build log
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Unit test programs
working-directory: modflow6
run: meson test --verbose --no-rebuild -C builddir
- name: Update flopy
if: matrix.test
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
if: matrix.test
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs
if: matrix.test
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
if [ "${{ github.ref_name }}" == "master" ]; then
pytest -v -n auto --durations 0 -m "not large and not developmode"
else
pytest -v -n auto --durations 0 -m "not large"
fi
- name: Test scripts
if: matrix.test
working-directory: modflow6/distribution
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0
parallel_test:
name: Parallel testing
needs:
- lint
- build
- smoke_test
- netcdf_test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04, macos-12 ] #, windows-2022 ]
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
GCC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v3
with:
path: modflow6
- name: Setup MSYS2
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
update: true
install: |
git
make
mingw-w64-x86_64-gcc
mingw-w64-x86_64-python
mingw-w64-x86_64-python-pip
mingw-w64-x86_64-python-pytest
- name: Setup MPI
if: runner.os == 'Windows'
uses: mpi4py/setup-mpi@v1
with:
mpi: msmpi
- name: Setup GNU Fortran ${{ env.GCC_V }}
uses: awvwgk/setup-fortran@main
with:
compiler: gcc
version: ${{ env.GCC_V }}
- name: Cache PETSc
id: cache-petsc
uses: actions/cache@v3
with:
path: petsc
key: ${{ runner.os }}-petsc
- name: Clone PETSc
if: runner.os != 'Windows' && steps.cache-petsc.outputs.cache-hit != 'true'
run: git clone -b release https://gitlab.com/petsc/petsc.git petsc
- name: Download PETSc
if: runner.os == 'Windows'
run: |
curl https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.18.4.tar.gz -O -J
mkdir petsc
tar -xzf petsc-3.18.4.tar.gz -C petsc --strip-components=1
- name: Configure environment
if: runner.os == 'Linux'
run: |
echo "PKG_CONFIG_PATH=$GITHUB_WORKSPACE/petsc/linux-gnu/lib/pkgconfig" >> $GITHUB_ENV
echo "$GITHUB_WORKSPACE/petsc/linux-gnu/bin" >> $GITHUB_PATH
- name: Configure environment
if: runner.os == 'macOS'
run: |
echo "PKG_CONFIG_PATH=$GITHUB_WORKSPACE/petsc/arch-darwin-gcc-debug/lib/pkgconfig" >> $GITHUB_ENV
echo "$GITHUB_WORKSPACE/petsc/arch-darwin-gcc-debug/bin" >> $GITHUB_PATH
- name: Configure PETSc
if: runner.os == 'Linux'
working-directory: petsc
run: |
sudo ./configure PETSC_ARCH=linux-gnu --download-fblaslapack --download-openmpi
sudo make all
- name: Configure PETSc
if: runner.os == 'macOS'
working-directory: petsc
run: |
sudo ./configure PETSC_DIR="$GITHUB_WORKSPACE/petsc" PETSC_ARCH=arch-darwin-gcc-debug --download-fblaslapack --download-openmpi
sudo make all
- name: Configure PETSc
if: runner.os == 'Windows'
shell: msys2 {0}
working-directory: petsc
run: |
pacman -Syu
pacman -Sy --noconfirm autoconf automake-wrapper bison bsdcpio make git \
mingw-w64-x86_64-toolchain patch python flex \
pkg-config pkgfile tar unzip mingw-w64-x86_64-cmake \
mingw-w64-x86_64-msmpi mingw-w64-x86_64-openblas mingw-w64-x86_64-jq
/usr/bin/python ./configure --with-mpiexec='/C/Program\ Files/Microsoft\ MPI/Bin/mpiexec' --with-shared-libraries=0
make all
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false -Dparallel=true --prefix=$(pwd) --libdir=bin
meson install -C builddir
meson test --verbose --no-rebuild -C builddir
- name: Show Meson logs
if: failure()
working-directory: modflow6
run: cat builddir/meson-logs/meson-log.txt
- name: Update flopy
working-directory: modflow6/autotest
run: python update_flopy.py
- name: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs (parallel)
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
branch="${{ github.ref_name }}"
marker="not large"
markers=$([ "$branch" == "master" ] && echo "$marker and not developmode" || echo "$marker")
pytest -v -n auto --parallel --durations 0 -m "$markers"