Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
79ba03e
ci(release): set version to 1.9.0.dev0
wpbonelli Oct 29, 2025
de4751a
Merge pull request #256 from MODFLOW-ORG/post-release-1.8.0-reset
wpbonelli Oct 29, 2025
910a1f1
feat(misc): add verbose option to set_dir (#258)
wpbonelli Nov 6, 2025
00116ba
docs: plan models api improvements (#264)
wpbonelli Dec 22, 2025
54fdfd0
draft Programs API plan (#267)
wpbonelli Jan 4, 2026
7adce08
draft DFNs API plan (#269)
wpbonelli Jan 4, 2026
c8a1368
feat(models): improve models API (#268)
wpbonelli Jan 15, 2026
5e85417
feat(programs): add programs API (#270)
wpbonelli Jan 16, 2026
d736dfd
fix(models): backwards-compatibility adjustments (#272)
wpbonelli Jan 20, 2026
a149779
fix(models): miscellaneous fixes (#273)
wpbonelli Jan 21, 2026
5dce2af
fix(models): check env var before auto-sync, fix tests (#275)
wpbonelli Jan 23, 2026
f6cc9bb
fix(models): exclude output files from registries (#274)
wpbonelli Jan 23, 2026
bb76dc1
refactor(programs): multiple programs api improvements (#276)
wpbonelli Feb 9, 2026
5aa9248
fix(models): auto-sync only on api commands (#277)
wpbonelli Feb 10, 2026
813a9c3
docs: update models/programs api sections, add dev docs to rtd site (…
wpbonelli Feb 10, 2026
75c6909
refactor(registries): leaner model/program registry file contents (#279)
wpbonelli Feb 10, 2026
91404bd
docs(programs): update programs api dev docs (#280)
wpbonelli Feb 11, 2026
2674176
fix(programs): exe path at program or dist level, add tests, update d…
wpbonelli Feb 11, 2026
a958401
fix(programs): multiple fixes/improvements (#282)
wpbonelli Feb 12, 2026
18af51a
fix: more fixes/improvements (#283)
wpbonelli Feb 12, 2026
f9e26de
feat(version): add project version management tool (#284)
wpbonelli Feb 13, 2026
a593a14
Revert "feat(version): add project version management tool (#284)"
wpbonelli Feb 15, 2026
4489935
fix: multiple fixes (#285)
wpbonelli Feb 20, 2026
7e5ff21
chore: fix update version script (#286)
wpbonelli Feb 20, 2026
67e5b8b
chore: actually fix version update script (#287)
wpbonelli Feb 20, 2026
fa8c8d9
refactor(dependencies): introduce ecosystem group (#289)
wpbonelli Feb 22, 2026
02ab50d
fix(models): fix model registry generation from release assets (#290)
wpbonelli Feb 23, 2026
aa99c56
feat(dfns): improve DFNs API (#271)
wpbonelli Feb 23, 2026
ebaffb9
fix(dfn): restore dfn module and tests (#291)
wpbonelli Feb 23, 2026
d83dfa9
fix(tests): fix test branch (#292)
wpbonelli Feb 24, 2026
9dfa972
fix(models): don't exclude .obs files when copying input files (#293)
wpbonelli Feb 25, 2026
a65c267
ci(release): set version to 1.9.0, update changelog
github-actions[bot] Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 39 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,33 @@ jobs:
uses: actions/checkout@v4
with:
path: modflow-devtools


- name: Checkout modflow6 for DFN autodiscovery
uses: actions/checkout@v4
with:
repository: MODFLOW-ORG/modflow6
path: modflow6

- name: Setup uv
uses: astral-sh/setup-uv@v5
with:
cache-dependency-glob: "**/pyproject.toml"
python-version: ${{ matrix.python }}

- name: Setup Fortran
if: runner.os != 'Windows'
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: ${{ env.GCC_V }}

- name: Setup Fortran (Windows)
if: runner.os == 'Windows'
uses: fortran-lang/setup-fortran@v1
with:
compiler: intel
version: 2025.2

- name: Install project
working-directory: modflow-devtools
run: uv sync --all-extras
Expand All @@ -104,9 +124,11 @@ jobs:
working-directory: modflow-devtools/autotest
env:
REPOS_PATH: ${{ github.workspace }}
MODFLOW_DEVTOOLS_NO_AUTO_SYNC: 1
TEST_DFN_PATH: ${{ github.workspace }}/modflow6/doc/mf6io/mf6ivar/dfn
# use --dist loadfile to so tests requiring pytest-virtualenv run on the same worker
run: uv run pytest -v -n auto --dist loadfile --durations 0 --ignore test_download.py
run: uv run pytest -v -n auto --dist loadfile --durations 0 --ignore test_download.py --ignore test_models.py --ignore test_dfns_registry.py

- name: Run network-dependent tests
# only invoke the GH API on one OS and Python version
# to avoid rate limits (1000 rqs / hour / repository)
Expand All @@ -116,7 +138,20 @@ jobs:
env:
REPOS_PATH: ${{ github.workspace }}
GITHUB_TOKEN: ${{ github.token }}
run: uv run pytest -v -n auto --durations 0 test_download.py
# TODO: switch to upstream when dfn registry file added
TEST_DFNS_REPO: wpbonelli/modflow6
TEST_DFNS_REF: registry
TEST_DFNS_SOURCE: modflow6
# Models API
TEST_MODELS_REPO: MODFLOW-ORG/modflow6-testmodels
TEST_MODELS_REF: develop
TEST_MODELS_SOURCE: modflow6-testmodels
TEST_MODELS_SOURCE_NAME: mf6/test
# Programs API
TEST_PROGRAMS_REPO: MODFLOW-ORG/modflow6
TEST_PROGRAMS_REF: develop
TEST_PROGRAMS_SOURCE: modflow6
run: uv run pytest -v -n auto --dist loadgroup --durations 0 test_download.py test_models.py test_dfns_registry.py

rtd:
name: Docs
Expand Down
32 changes: 32 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
### Version 1.9.0

#### New features

* [feat(misc)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/910a1f1d201c262e218da27865b7e9487271e4d2): Add verbose option to set_dir (#258). Committed by wpbonelli on 2025-11-06.
* [feat(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/c8a136872198e1d9f36be74e958d003cdc75f6eb): Improve models API (#268). Committed by wpbonelli on 2026-01-15.
* [feat(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/5e85417270cea1b4e5081d531c8c98b072acc371): Add programs API (#270). Committed by wpbonelli on 2026-01-16.
* [feat(version)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/f9e26de1efdda95d509c0cc0cb1cf886a3f6c278): Add project version management tool (#284). Committed by wpbonelli on 2026-02-13.
* [feat(dfns)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/aa99c56f5bc5fc2e846262d5bb5c6d80dc9d69b9): Improve DFNs API (#271). Committed by wpbonelli on 2026-02-23.

#### Bug fixes

* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/d736dfd881cbc39d2fe82180d98d1d2a0130f146): Backwards-compatibility adjustments (#272). Committed by wpbonelli on 2026-01-20.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/a1497797fc9b1a7cf4ed7cd72e43f0b290fd49d4): Miscellaneous fixes (#273). Committed by wpbonelli on 2026-01-21.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/5dce2af85369063d037c58a3bfc12a2e32c74770): Check env var before auto-sync, fix tests (#275). Committed by wpbonelli on 2026-01-23.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/f6cc9bbbcc8577a4384e18159597c128181e3ecf): Exclude output files from registries (#274). Committed by wpbonelli on 2026-01-23.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/5aa924836fe700bb7ccf4c56faeea52b72368bb5): Auto-sync only on api commands (#277). Committed by wpbonelli on 2026-02-10.
* [fix(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/2674176f6151814fa158269478015b1b175ba884): Exe path at program or dist level, add tests, update docs (#281). Committed by wpbonelli on 2026-02-11.
* [fix(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/a9584012258e5ca52be86a7d631da2f0bf10b75c): Multiple fixes/improvements (#282). Committed by wpbonelli on 2026-02-12.
* [fix](https://github.com/MODFLOW-ORG/modflow-devtools/commit/18af51ae53bf1c8fb877620b0fa26e7be28ea210): More fixes/improvements (#283). Committed by wpbonelli on 2026-02-12.
* [fix](https://github.com/MODFLOW-ORG/modflow-devtools/commit/448993522772773ea650206e94185ad8ec72bb83): Multiple fixes (#285). Committed by wpbonelli on 2026-02-20.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/02ab50dac6540191914506329dcc9ef52820f7ff): Fix model registry generation from release assets (#290). Committed by wpbonelli on 2026-02-23.
* [fix(dfn)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/ebaffb9e2d364210789cd003a5654f4d6741436d): Restore dfn module and tests (#291). Committed by wpbonelli on 2026-02-23.
* [fix(tests)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/d83dfa9470c619693c36da2aacd526916141aec1): Fix test branch (#292). Committed by wpbonelli on 2026-02-24.
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/9dfa972efffe310f5de79fa31cdc0235716edc2c): Don't exclude .obs files when copying input files (#293). Committed by wpbonelli on 2026-02-25.

#### Refactoring

* [refactor(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/bb76dc1c36f235b3e8bd5b10231661081dda7fe9): Multiple programs api improvements (#276). Committed by wpbonelli on 2026-02-09.
* [refactor(registries)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/75c6909a6202da02b30a1b7b5743e75498aa26a7): Leaner model/program registry file contents (#279). Committed by wpbonelli on 2026-02-10.
* [refactor(dependencies)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/fa8c8d9753da38a9a400c0f7d736944d08a3a059): Introduce ecosystem group (#289). Committed by wpbonelli on 2026-02-22.

### Version 1.8.0

#### New features
Expand Down
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,10 @@ Python development tools for MODFLOW 6 and related projects.

Python3.10+, dependency-free by default.

Several optional dependency groups are available, oriented around specific use cases:
Two main dependency groups are available, oriented around specific use cases:

- `dfn`: MF6 definition file parsing
- `test`: pytest fixtures/extensions
- `models`: example model access
- `test`: pytest fixtures, markers, and extensions
- `ecosystem`: program/model management, definition file utilities

## Installation

Expand Down
Empty file removed autotest/mf6examples.zip.lock
Empty file.
11 changes: 4 additions & 7 deletions autotest/test_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,11 @@
_modflow6_repo_path = _repos_path / "modflow6"
_system = platform.system()
_exe_ext = ".exe" if _system == "Windows" else ""
_lib_ext = (
".so" if _system == "Linux" else (".dylib" if _system == "Darwin" else ".dll")
)
_lib_ext = ".so" if _system == "Linux" else (".dylib" if _system == "Darwin" else ".dll")


@requires_exe("meson", "ninja")
@pytest.mark.skipif(
not _modflow6_repo_path.is_dir(), reason="modflow6 repository not found"
)
@pytest.mark.skipif(not _modflow6_repo_path.is_dir(), reason="modflow6 repository not found")
def test_meson_build(tmp_path):
build_path = tmp_path / "builddir"
bin_path = tmp_path / "bin"
Expand All @@ -32,5 +28,6 @@ def test_meson_build(tmp_path):

assert (bin_path / f"mf6{_exe_ext}").is_file()
assert (bin_path / f"zbud6{_exe_ext}").is_file()
assert (bin_path / f"mf5to6{_exe_ext}").is_file()
# mf5to6 is no longer built by default in modflow6 meson.build
# assert (bin_path / f"mf5to6{_exe_ext}").is_file()
assert (bin_path / f"libmf6{_lib_ext}").is_file()
19 changes: 9 additions & 10 deletions autotest/test_dfn.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,19 @@ def pytest_generate_tests(metafunc):
if not any(DFN_DIR.glob("*.dfn")):
get_dfns(MF6_OWNER, MF6_REPO, MF6_REF, DFN_DIR, verbose=True)
dfn_names = [
dfn.stem
for dfn in DFN_DIR.glob("*.dfn")
if dfn.stem not in ["common", "flopy"]
dfn.stem for dfn in DFN_DIR.glob("*.dfn") if dfn.stem not in ["common", "flopy"]
]
metafunc.parametrize("dfn_name", dfn_names, ids=dfn_names)

if "toml_name" in metafunc.fixturenames:
convert(DFN_DIR, TOML_DIR)
dfn_paths = list(DFN_DIR.glob("*.dfn"))
assert all(
(TOML_DIR / f"{dfn.stem}.toml").is_file()
for dfn in dfn_paths
if "common" not in dfn.stem
)
# Only convert if TOML files don't exist yet (avoid repeated conversions)
dfn_paths = [p for p in DFN_DIR.glob("*.dfn") if p.stem not in ["common", "flopy"]]
if not TOML_DIR.exists() or not all(
(TOML_DIR / f"{dfn.stem}.toml").is_file() for dfn in dfn_paths
):
convert(DFN_DIR, TOML_DIR)
# Verify all expected TOML files were created
assert all((TOML_DIR / f"{dfn.stem}.toml").is_file() for dfn in dfn_paths)
toml_names = [toml.stem for toml in TOML_DIR.glob("*.toml")]
metafunc.parametrize("toml_name", toml_names, ids=toml_names)

Expand Down
Loading