Skip to content

Commit ecd2e64

Browse files
authored
Merge pull request #297 from MODFLOW-ORG/v1.9.0
Release 1.9.0
2 parents 2e102e5 + 8465576 commit ecd2e64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+15158
-42794
lines changed

.github/workflows/ci.yml

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,33 @@ jobs:
8989
uses: actions/checkout@v4
9090
with:
9191
path: modflow-devtools
92-
92+
93+
- name: Checkout modflow6 for DFN autodiscovery
94+
uses: actions/checkout@v4
95+
with:
96+
repository: MODFLOW-ORG/modflow6
97+
path: modflow6
98+
9399
- name: Setup uv
94100
uses: astral-sh/setup-uv@v5
95101
with:
96102
cache-dependency-glob: "**/pyproject.toml"
97103
python-version: ${{ matrix.python }}
98104

105+
- name: Setup Fortran
106+
if: runner.os != 'Windows'
107+
uses: fortran-lang/setup-fortran@v1
108+
with:
109+
compiler: gcc
110+
version: ${{ env.GCC_V }}
111+
112+
- name: Setup Fortran (Windows)
113+
if: runner.os == 'Windows'
114+
uses: fortran-lang/setup-fortran@v1
115+
with:
116+
compiler: intel
117+
version: 2025.2
118+
99119
- name: Install project
100120
working-directory: modflow-devtools
101121
run: uv sync --all-extras
@@ -104,9 +124,11 @@ jobs:
104124
working-directory: modflow-devtools/autotest
105125
env:
106126
REPOS_PATH: ${{ github.workspace }}
127+
MODFLOW_DEVTOOLS_NO_AUTO_SYNC: 1
128+
TEST_DFN_PATH: ${{ github.workspace }}/modflow6/doc/mf6io/mf6ivar/dfn
107129
# use --dist loadfile to so tests requiring pytest-virtualenv run on the same worker
108-
run: uv run pytest -v -n auto --dist loadfile --durations 0 --ignore test_download.py
109-
130+
run: uv run pytest -v -n auto --dist loadfile --durations 0 --ignore test_download.py --ignore test_models.py --ignore test_dfns_registry.py
131+
110132
- name: Run network-dependent tests
111133
# only invoke the GH API on one OS and Python version
112134
# to avoid rate limits (1000 rqs / hour / repository)
@@ -116,7 +138,20 @@ jobs:
116138
env:
117139
REPOS_PATH: ${{ github.workspace }}
118140
GITHUB_TOKEN: ${{ github.token }}
119-
run: uv run pytest -v -n auto --durations 0 test_download.py
141+
# TODO: switch to upstream when dfn registry file added
142+
TEST_DFNS_REPO: wpbonelli/modflow6
143+
TEST_DFNS_REF: registry
144+
TEST_DFNS_SOURCE: modflow6
145+
# Models API
146+
TEST_MODELS_REPO: MODFLOW-ORG/modflow6-testmodels
147+
TEST_MODELS_REF: develop
148+
TEST_MODELS_SOURCE: modflow6-testmodels
149+
TEST_MODELS_SOURCE_NAME: mf6/test
150+
# Programs API
151+
TEST_PROGRAMS_REPO: MODFLOW-ORG/modflow6
152+
TEST_PROGRAMS_REF: develop
153+
TEST_PROGRAMS_SOURCE: modflow6
154+
run: uv run pytest -v -n auto --dist loadgroup --durations 0 test_download.py test_models.py test_dfns_registry.py
120155

121156
rtd:
122157
name: Docs

HISTORY.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,36 @@
1+
### Version 1.9.0
2+
3+
#### New features
4+
5+
* [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.
6+
* [feat(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/c8a136872198e1d9f36be74e958d003cdc75f6eb): Improve models API (#268). Committed by wpbonelli on 2026-01-15.
7+
* [feat(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/5e85417270cea1b4e5081d531c8c98b072acc371): Add programs API (#270). Committed by wpbonelli on 2026-01-16.
8+
* [feat(version)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/f9e26de1efdda95d509c0cc0cb1cf886a3f6c278): Add project version management tool (#284). Committed by wpbonelli on 2026-02-13.
9+
* [feat(dfns)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/aa99c56f5bc5fc2e846262d5bb5c6d80dc9d69b9): Improve DFNs API (#271). Committed by wpbonelli on 2026-02-23.
10+
* [feat(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/c430e8b26157e954a5543344b083125dc5b2ed18): Add copy command (#295). Committed by wpbonelli on 2026-02-25.
11+
12+
#### Bug fixes
13+
14+
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/d736dfd881cbc39d2fe82180d98d1d2a0130f146): Backwards-compatibility adjustments (#272). Committed by wpbonelli on 2026-01-20.
15+
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/a1497797fc9b1a7cf4ed7cd72e43f0b290fd49d4): Miscellaneous fixes (#273). Committed by wpbonelli on 2026-01-21.
16+
* [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.
17+
* [fix(models)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/f6cc9bbbcc8577a4384e18159597c128181e3ecf): Exclude output files from registries (#274). Committed by wpbonelli on 2026-01-23.
18+
* [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.
19+
* [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.
20+
* [fix(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/a9584012258e5ca52be86a7d631da2f0bf10b75c): Multiple fixes/improvements (#282). Committed by wpbonelli on 2026-02-12.
21+
* [fix](https://github.com/MODFLOW-ORG/modflow-devtools/commit/18af51ae53bf1c8fb877620b0fa26e7be28ea210): More fixes/improvements (#283). Committed by wpbonelli on 2026-02-12.
22+
* [fix](https://github.com/MODFLOW-ORG/modflow-devtools/commit/448993522772773ea650206e94185ad8ec72bb83): Multiple fixes (#285). Committed by wpbonelli on 2026-02-20.
23+
* [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.
24+
* [fix(dfn)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/ebaffb9e2d364210789cd003a5654f4d6741436d): Restore dfn module and tests (#291). Committed by wpbonelli on 2026-02-23.
25+
* [fix(tests)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/d83dfa9470c619693c36da2aacd526916141aec1): Fix test branch (#292). Committed by wpbonelli on 2026-02-24.
26+
* [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.
27+
28+
#### Refactoring
29+
30+
* [refactor(programs)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/bb76dc1c36f235b3e8bd5b10231661081dda7fe9): Multiple programs api improvements (#276). Committed by wpbonelli on 2026-02-09.
31+
* [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.
32+
* [refactor(dependencies)](https://github.com/MODFLOW-ORG/modflow-devtools/commit/fa8c8d9753da38a9a400c0f7d736944d08a3a059): Introduce ecosystem group (#289). Committed by wpbonelli on 2026-02-22.
33+
134
### Version 1.8.0
235

336
#### New features

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,10 @@ Python development tools for MODFLOW 6 and related projects.
4343

4444
Python3.10+, dependency-free by default.
4545

46-
Several optional dependency groups are available, oriented around specific use cases:
46+
Two main dependency groups are available, oriented around specific use cases:
4747

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

5251
## Installation
5352

autotest/mf6examples.zip.lock

Whitespace-only changes.

autotest/test_build.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,11 @@
1515
_modflow6_repo_path = _repos_path / "modflow6"
1616
_system = platform.system()
1717
_exe_ext = ".exe" if _system == "Windows" else ""
18-
_lib_ext = (
19-
".so" if _system == "Linux" else (".dylib" if _system == "Darwin" else ".dll")
20-
)
18+
_lib_ext = ".so" if _system == "Linux" else (".dylib" if _system == "Darwin" else ".dll")
2119

2220

2321
@requires_exe("meson", "ninja")
24-
@pytest.mark.skipif(
25-
not _modflow6_repo_path.is_dir(), reason="modflow6 repository not found"
26-
)
22+
@pytest.mark.skipif(not _modflow6_repo_path.is_dir(), reason="modflow6 repository not found")
2723
def test_meson_build(tmp_path):
2824
build_path = tmp_path / "builddir"
2925
bin_path = tmp_path / "bin"
@@ -32,5 +28,6 @@ def test_meson_build(tmp_path):
3228

3329
assert (bin_path / f"mf6{_exe_ext}").is_file()
3430
assert (bin_path / f"zbud6{_exe_ext}").is_file()
35-
assert (bin_path / f"mf5to6{_exe_ext}").is_file()
31+
# mf5to6 is no longer built by default in modflow6 meson.build
32+
# assert (bin_path / f"mf5to6{_exe_ext}").is_file()
3633
assert (bin_path / f"libmf6{_lib_ext}").is_file()

autotest/test_dfn.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,19 @@ def pytest_generate_tests(metafunc):
2020
if not any(DFN_DIR.glob("*.dfn")):
2121
get_dfns(MF6_OWNER, MF6_REPO, MF6_REF, DFN_DIR, verbose=True)
2222
dfn_names = [
23-
dfn.stem
24-
for dfn in DFN_DIR.glob("*.dfn")
25-
if dfn.stem not in ["common", "flopy"]
23+
dfn.stem for dfn in DFN_DIR.glob("*.dfn") if dfn.stem not in ["common", "flopy"]
2624
]
2725
metafunc.parametrize("dfn_name", dfn_names, ids=dfn_names)
2826

2927
if "toml_name" in metafunc.fixturenames:
30-
convert(DFN_DIR, TOML_DIR)
31-
dfn_paths = list(DFN_DIR.glob("*.dfn"))
32-
assert all(
33-
(TOML_DIR / f"{dfn.stem}.toml").is_file()
34-
for dfn in dfn_paths
35-
if "common" not in dfn.stem
36-
)
28+
# Only convert if TOML files don't exist yet (avoid repeated conversions)
29+
dfn_paths = [p for p in DFN_DIR.glob("*.dfn") if p.stem not in ["common", "flopy"]]
30+
if not TOML_DIR.exists() or not all(
31+
(TOML_DIR / f"{dfn.stem}.toml").is_file() for dfn in dfn_paths
32+
):
33+
convert(DFN_DIR, TOML_DIR)
34+
# Verify all expected TOML files were created
35+
assert all((TOML_DIR / f"{dfn.stem}.toml").is_file() for dfn in dfn_paths)
3736
toml_names = [toml.stem for toml in TOML_DIR.glob("*.toml")]
3837
metafunc.parametrize("toml_name", toml_names, ids=toml_names)
3938

0 commit comments

Comments
 (0)