Skip to content

feat(idm): initial netcdf integration #2155

feat(idm): initial netcdf integration

feat(idm): initial netcdf integration #2155

Workflow file for this run

name: MODFLOW 6 continuous integration
on:
push:
paths-ignore:
- '**.md'
- '**.pdf'
- '**.tex'
- '**.jpg'
- '**.jpeg'
- '**.png'
- '**.bbl'
- '**.bib'
- 'doc/**.dat'
- 'doc/**.ipynb'
- 'doc/**.py'
- 'doc/**.sh'
- 'doc/**.xlsx'
- '.hpc/**'
pull_request:
branches:
- master
- develop
paths-ignore:
- '**.md'
- '**.pdf'
- '**.tex'
- '**.jpg'
- '**.jpeg'
- '**.png'
- '**.bbl'
- '**.bib'
- 'doc/**.dat'
- 'doc/**.ipynb'
- 'doc/**.py'
- 'doc/**.sh'
- 'doc/**.xlsx'
- '.hpc/**'
jobs:
lint:
name: Check format
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
- 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
- name: Check MSVS project files
run: python .github/common/msvs_vfproj_check.py
- name: Check CITATION.cff
uses: dieghernan/cff-validator@v3
build:
name: Build
runs-on: ubuntu-22.04
defaults:
run:
shell: bash -l {0}
env:
FC: gfortran
FC_V: 13
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
- name: Setup ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.FC_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
FC_V: 13
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Checkout test-drive
uses: actions/checkout@v4
with:
repository: fortran-lang/test-drive
path: test-drive
- name: Setup ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.FC_V }}
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment.yml
cache-environment: true
cache-downloads: true
- name: Build test-drive
working-directory: test-drive
run: |
meson setup builddir --prefix=$(pwd) --libdir=lib
meson install -C builddir
echo "PKG_CONFIG_PATH=$(pwd)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- 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" --keep-failed .failed
else
pytest -v -n auto --durations 0 -S --keep-failed .failed
fi
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-smoke-${{ runner.os }}-${{ env.FC }}-${{ env.FC_V }}
path: modflow6/autotest/.failed
test_gfortran:
name: Test gnu fortran
needs:
- lint
- build
- smoke_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
FC_V: 13
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Checkout modflow6-testmodels
uses: actions/checkout@v4
with:
repository: MODFLOW-USGS/modflow6-testmodels
path: modflow6-testmodels
- name: Checkout modflow6-examples
uses: actions/checkout@v4
with:
repository: MODFLOW-USGS/modflow6-examples
path: modflow6-examples
- name: Setup ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.FC_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
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 modflow6
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" --keep-failed .failed
else
pytest -v -n auto --durations 0 -m "not large" --keep-failed .failed
fi
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}-${{ env.FC }}-${{ env.FC_V }}
path: modflow6/autotest/.failed
- name: Checkout usgslatex
if: runner.os == 'Linux'
uses: actions/checkout@v4
with:
repository: MODFLOW-USGS/usgslatex
path: usgslatex
- name: Install TeX Live
if: 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: runner.os == 'Linux'
working-directory: usgslatex/usgsLaTeX
run: sudo ./install.sh --all-users
- name: Test distribution scripts
working-directory: modflow6/distribution
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0
test_intel_fortran:
name: Test intel fortran
needs:
- lint
- build
- smoke_test
runs-on: ${{ matrix.os }}
env:
FC: intel-classic
FC_V: "2021.7"
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-12, windows-2022]
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Checkout modflow6-testmodels
uses: actions/checkout@v4
with:
repository: MODFLOW-USGS/modflow6-testmodels
path: modflow6-testmodels
- name: Checkout modflow6-examples
uses: actions/checkout@v4
with:
repository: MODFLOW-USGS/modflow6-examples
path: modflow6-examples
- 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 ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: ${{ env.FC }}
version: ${{ env.FC_V }}
- 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
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: |
if [ "${{ github.ref_name }}" == "master" ]; then
pytest -v -n auto --durations 0 -m "not large and not developmode" --keep-failed .failed
else
pytest -v -n auto --durations 0 -m "not large" --keep-failed .failed
fi
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}-${{ env.FC }}-${{ env.FC_V }}
path: modflow6/autotest/.failed
- name: Test scripts
working-directory: modflow6/distribution
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0
parallel_test:
name: Parallel testing
needs:
- lint
- build
- smoke_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
FC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
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 ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.FC_V }}
- name: Cache PETSc
id: cache-petsc
uses: actions/cache@v4
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" --keep-failed .failed
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}-${{ env.FC }}-${{ env.FC_V }}
path: modflow6/autotest/.failed
netcdf_test:
name: NetCDF testing
needs:
- lint
- build
- smoke_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
FC_V: 12
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Setup ${{ env.FC }} ${{ env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.FC_V }}
- name: Cache PETSc
id: cache-petsc
uses: actions/cache@v4
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: 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: Install netcdf
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install build-essential \
libnetcdf-dev \
libnetcdff-dev \
netcdf-bin
nc-config --all
nf-config --all
- name: Install netcdf
if: runner.os == 'macOS'
run: |
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install netcdf-fortran
brew install gcc
nc-config --all
nf-config
- name: Setup Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: modflow6/environment-nctest.yml
create-args: >-
netcdf4
init-shell: >-
bash
powershell
cache-environment: true
cache-downloads: true
- name: Build modflow6
working-directory: modflow6
run: |
meson setup builddir -Ddebug=false -Dextended=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: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pytest -v --durations 0 get_exes.py
- name: Test programs (netcdf)
working-directory: modflow6/autotest
env:
REPOS_PATH: ${{ github.workspace }}
run: |
pytest -v -n auto -m netcdf --netcdf --parallel --durations 0 --keep-failed .failed
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}-${{ env.FC }}-${{ env.FC_V }}
path: modflow6/autotest/.failed