Migrate CI and dependencies from ryanmrichard to NWChemEx - #388
Merged
Conversation
1 task
…cmake_build Fork-test-only commit: points merge.yaml/pull_request.yaml at the ryanmrichard/.github fork's reusable workflows instead of the real NWChemEx/.github, triggers off build_overhaul (this fork's working branch), and swaps the older test_nwx_library job for test_nwx_cmake_build with Python tests enabled. Also retargets the NWXCMake FetchContent fallback to ryanmrichard/NWXCMake, since the nwx_set_version refactor this branch needs (and NWXCMake's retargeted parallelzone/utilities dependency fetches) only exist there. Adds tests/python/conftest.py with a session-scoped RuntimeView fixture, same as ParallelZone, so the reusable action's standalone `pytest -v` step works safely alongside the existing unittest aggregator script that CTest already runs.
isort: reorder imports so pluginplay/parallelzone/py_test_pluginplay group with no blank line, matching how CI's isort classifies them (they don't split cleanly into separate first/third-party sections). CMakeLists.txt: unit_test_pluginplay directly exercises the CPython C API (tests/cxx/unit_tests/pluginplay/python/python_wrapper.cpp), unlike the .so extension (built via pybind11_add_module, which intentionally links only Python::Module, not libpython, so the module can be loaded by any Python providing those symbols at runtime). A standalone executable embedding CPython calls needs libpython itself, via Python::Python (Development.Embed component), or linking fails with undefined references to _Py_Dealloc and friends.
The undefined-reference failures weren't limited to unit_test_pluginplay:
libpluginplay.so itself carries unresolved CPython symbols (python_wrapper.hpp
is a public header compiled into the library whenever BUILD_PYBIND11 is set),
so test_regression_pluginplay hit the same failure once it also linked the
library into an executable. Moving the Python::Python link onto
${PROJECT_NAME} itself (PUBLIC) fixes it for all three Catch2 test binaries
instead of patching them one at a time.
Ported from the old build system's nwx_add_pybind11_module(py_test_pluginplay SOURCE_DIR tests/python/unit_tests ...) call, which build_overhaul's CMakeLists.txt never got an equivalent for. The .cpp sources (test_pluginplay.cpp and friends, defining PYBIND11_MODULE(py_test_pluginplay, m)) were still present in tests/python/unit_tests/ but nothing built them, so `import py_test_pluginplay` in the Python test suite failed with ModuleNotFoundError.
Same gap as py_test_pluginplay: the old build system built this via
nwx_add_pybind11_module(${PROJECT_NAME}_examples SOURCE_DIR
tests/python/doc_snippets DEPENDS parallelzone ${PROJECT_NAME}
${PROJECT_NAME}_examples), where ${PROJECT_NAME}_examples was a small
library built from tests/cxx/doc_snippets. build_overhaul's CMakeLists.txt
never got an equivalent, so `import pluginplay_examples` in the Python
doc-snippet tests failed with ModuleNotFoundError.
Renames the 10 test-helper .cpp files under tests/python/unit_tests/ to export_*.cpp so they match nwx_python_module's existing source filter (all 10 compile into the same module: test_pluginplay.cpp's single PYBIND11_MODULE calls out to a def_submodule()-registering function in each of the others), then replaces the bespoke pybind11_add_module blocks for both py_test_pluginplay and pluginplay_examples with calls to the now-generalized nwx_python_module (NO_INSTALL, and DEPENDS for pluginplay_examples' extra link libraries).
…o fork Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… publishing) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ontainers Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
manylinux wheel-build containers deliberately don't ship libpython.so at all (portable wheels aren't supposed to assume one), so requiring Development.Embed unconditionally broke the wheel-build path there. The full libpython link (Python::Python) is only actually needed by the Catch2 test executables (an executable can't defer symbol resolution to runtime the way a shared library/extension can); the library itself only needs Python.h to compile, which Python::Module (Development.Module, always available) already provides without linking libpython. Verified end-to-end (docker quay.io/pypa/manylinux2014_x86_64): configures, builds, and `auditwheel repair` succeeds with BUILD_TESTING=OFF (the default for a non-editable wheel build). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…n the container) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…'s ambient MPI ABI)
…ystem MPI on Linux)
…exclude (glob patterns don't work on cibuildwheel v2.22.0's pinned auditwheel 6.1.0)
Repoints this repo's workflows at NWChemEx/.github (landed in NWChemEx/.github#187) instead of the ryanmrichard fork they were developed against, and switches merge.yaml's and pull_request.yaml's branch triggers from build_overhaul to master now that master is the ecosystem's working branch. Drops the test.pypi.org extra_index_url and repository-url overrides -- this repo's runtime dependencies (nwxcmake, utilities, parallelzone) are all now on real PyPI, so a merge to master can publish nwchemex-pluginplay there directly (trusted publisher registered). get_nwx_cmake.cmake's FetchContent fallback and pyproject.toml's runtime dependencies repoint at NWChemEx/NWXCMake, switching all three Python dependencies from git+ URLs to published floors (nwchemex-nwxcmake>=0.1.0, nwchemex-utilities>=0.1.45, nwchemex-parallelzone>=0.1.43).
ryanmrichard
force-pushed
the
build_overhaul
branch
from
August 5, 2026 20:43
0659924 to
d2e394b
Compare
Contributor
|
🚀 [bumpr] Bumped! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.github/workflows/{merge,pull_request,nightly}.yamlfromryanmrichard/.githubtoNWChemEx/.github(landed in Land the build/CI overhaul's shared workflows and actions .github#187), and switchesmerge.yaml's andpull_request.yaml's branch triggers frombuild_overhaultomaster.test.pypi.orgextra_index_url/repository-urloverrides -- this repo's runtime dependencies (nwxcmake, utilities, parallelzone) are all now on real PyPI, so a merge tomastercan publishnwchemex-pluginplaythere directly (trusted publisher registered).cmake/get_nwx_cmake.cmake's FetchContent fallback atNWChemEx/NWXCMake, and switches all three Python dependencies fromgit+URLs to published floors (nwchemex-nwxcmake>=0.1.0,nwchemex-utilities>=0.1.45,nwchemex-parallelzone>=0.1.43).Part of the ecosystem-wide migration off the
ryanmrichardpersonal fork/account.Test plan
NWChemEx/.githubreusable workflows)nwchemex-pluginplaypublishes to PyPI on merge, floored correctly