Skip to content

fix(mem): address memory leaks #3029

fix(mem): address memory leaks

fix(mem): address memory leaks #3029

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/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
PIXI_BETA_WARNING_OFF: true
jobs:
lint:
name: Check format
runs-on: ubuntu-latest
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
- uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
- name: Check Fortran source formatting
run: pixi run check-format
- name: Check MSVS project files
run: pixi run check-vfproj
- name: Check python lint
run: pixi run check-python-lint
- name: Check python format
run: pixi run check-python-format
- name: Check CITATION.cff
uses: dieghernan/cff-validator@v3
build:
name: Build
runs-on: ubuntu-22.04
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 }}
- uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
- name: Meson setup
run: pixi run setup -Dwerror=true builddir
- name: Meson compile
run: pixi run build builddir
- name: Show build log
if: failure()
run: cat builddir/meson-logs/meson-log.txt
- name: Meson test
run: pixi run test builddir
smoke_test:
name: Smoke test
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
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 pixi
uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
manifest-path: "modflow6/pixi.toml"
- name: Custom pixi install
working-directory: modflow6
run: pixi run install
- name: Build test-drive
working-directory: test-drive
run: |
pixi run --manifest-path=../modflow6/pixi.toml meson setup builddir --prefix=$(pwd) --libdir=lib
pixi run --manifest-path=../modflow6/pixi.toml meson install -C builddir
echo "PKG_CONFIG_PATH=$(pwd)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- name: Build modflow6
working-directory: modflow6
run: |
pixi run setup builddir
pixi run build 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: pixi run test builddir
- name: Update flopy
working-directory: modflow6
run: pixi run update-flopy
- name: Get executables
working-directory: modflow6
env:
GITHUB_TOKEN: ${{ github.token }}
run: pixi run get-exes
- name: Test programs
working-directory: modflow6
run: |
if [ "${{ github.ref_name }}" == "master" ]; then
pixi run autotest -m "not slow and not regression and not developmode"
else
pixi run autotest --smoke
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, macos-14, windows-2022 ]
defaults:
run:
shell: bash
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 }} ${{ contains(fromJSON('["macos-14"]'), matrix.os) && 12 || env.FC_V }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ contains(fromJSON('["macos-14"]'), matrix.os) && 12 || env.FC_V }}
- name: Setup pixi
uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
manifest-path: "modflow6/pixi.toml"
- name: Custom pixi install
working-directory: modflow6
run: pixi run install
- name: Set LDFLAGS (macOS)
if: matrix.os == 'macos-14'
run: |
os_ver=$(sw_vers -productVersion | cut -d'.' -f1)
if (( "$os_ver" > 12 )); then
ldflags="$LDFLAGS -Wl,-ld_classic"
echo "LDFLAGS=$ldflags" >> $GITHUB_ENV
fi
- name: Build modflow6
working-directory: modflow6
run: |
setupargs=""
if [[ "${{ matrix.os }}" == "macos-14" ]]; then
setupargs="-Doptimization=1"
fi
pixi run setup builddir $setupargs
pixi run build 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: pixi run test builddir
- name: Update flopy
working-directory: modflow6
run: pixi run update-flopy
- name: Get executables
working-directory: modflow6/autotest
env:
GITHUB_TOKEN: ${{ github.token }}
run: pixi run get-exes
- name: Test modflow6
working-directory: modflow6
env:
REPOS_PATH: ${{ github.workspace }}
run: |
markers=""
if [[ "${{ github.ref_name }}" == "master" ]]; then
markers="not large and not developmode"
else
markers="not large"
fi
filters=""
if [[ "${{ matrix.os }}" == "macos-14" ]]; then
# comparison fails on macos-14 with optimization=1
filters="not test028_sfr_rewet"
fi
pixi run autotest -m "$markers" -k "$filters"
- name: Install executables
if: runner.os == 'Linux'
uses: modflowpy/install-modflow-action@v1
- name: Test mf6 examples
if: runner.os == 'Linux'
working-directory: modflow6
shell: pixi run bash -e {0}
run: |
cp bin/mf6 $(which mf6)
cd ../modflow6-examples/autotest
pytest -v -n auto test_scripts.py
- 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
env:
GITHUB_TOKEN: ${{ github.token }}
run: pixi run test-dist-scripts
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
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 pixi
uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
manifest-path: "modflow6/pixi.toml"
- name: Custom pixi install
working-directory: modflow6
run: pixi run install
- 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
run: pixi run update-version
- name: Build modflow6
working-directory: modflow6
run: |
pixi run setup builddir
pixi run build 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: pixi run test builddir
- name: Update flopy
working-directory: modflow6
run: pixi run update-flopy
- name: Get executables
working-directory: modflow6
env:
GITHUB_TOKEN: ${{ github.token }}
run: pixi run get-exes
- name: Test programs
working-directory: modflow6
env:
REPOS_PATH: ${{ github.workspace }}
run: |
if [ "${{ github.ref_name }}" == "master" ]; then
pixi run autotest -m "not large and not developmode"
else
pixi run autotest -m "not large"
fi
- name: Install executables
if: runner.os == 'Linux'
uses: modflowpy/install-modflow-action@v1
- name: Test mf6 examples
if: runner.os == 'Linux'
working-directory: modflow6
shell: pixi run bash -e {0}
run: |
cp bin/mf6 $(which mf6)
cd ../modflow6-examples/autotest
pytest -v -n auto test_scripts.py
- 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
env:
GITHUB_TOKEN: ${{ github.token }}
run: pixi run test-dist-scripts
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
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Setup pixi
uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
manifest-path: "modflow6/pixi.toml"
- name: Custom pixi install
working-directory: modflow6
run: pixi run install
- name: Test parallel MF6
if: runner.os != 'Windows'
uses: ./modflow6/.github/actions/test-par
- name: Test parallel MF6 (Windows)
if: runner.os == 'Windows'
uses: ./modflow6/.github/actions/test-par-win
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}
path: modflow6/autotest/.failed
extended_test:
name: Extended executable testing
needs:
- lint
- build
- smoke_test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04, macos-12 ]
defaults:
run:
shell: bash
steps:
- name: Checkout modflow6
uses: actions/checkout@v4
with:
path: modflow6
- name: Setup pixi
uses: prefix-dev/[email protected]
with:
pixi-version: v0.24.2
manifest-path: "modflow6/pixi.toml"
- name: Custom pixi install
working-directory: modflow6
run: pixi run install
- name: Install additional netcdf testing packages
working-directory: modflow6
run: pixi run pip install xugrid xarray netcdf4
- name: Test Extended MF6
uses: ./modflow6/.github/actions/test-extended
- name: Upload failed test output
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{ matrix.os }}
path: modflow6/autotest/.failed