Skip to content

Migrate CI and dependencies from ryanmrichard to NWChemEx - #388

Merged
ryanmrichard merged 33 commits into
masterfrom
build_overhaul
Aug 6, 2026
Merged

Migrate CI and dependencies from ryanmrichard to NWChemEx#388
ryanmrichard merged 33 commits into
masterfrom
build_overhaul

Conversation

@ryanmrichard

Copy link
Copy Markdown
Member

Summary

  • Repoints .github/workflows/{merge,pull_request,nightly}.yaml from ryanmrichard/.github to NWChemEx/.github (landed in Land the build/CI overhaul's shared workflows and actions .github#187), and switches merge.yaml's and pull_request.yaml's branch triggers from build_overhaul to master.
  • Drops the test.pypi.org extra_index_url/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).
  • Repoints cmake/get_nwx_cmake.cmake's FetchContent fallback at NWChemEx/NWXCMake, and switches 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).

Part of the ecosystem-wide migration off the ryanmrichard personal fork/account.

Test plan

  • CI passes (uses the now-live NWChemEx/.github reusable workflows)
  • Confirm nwchemex-pluginplay publishes to PyPI on merge, floored correctly

ryanmrichard and others added 29 commits August 5, 2026 15:42
…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>
…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
ryanmrichard merged commit 55b4bfe into master Aug 6, 2026
13 checks passed
@ryanmrichard
ryanmrichard deleted the build_overhaul branch August 6, 2026 02:51
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🚀 [bumpr] Bumped!
New version:v1.0.63
Changes:v1.0.62...v1.0.63

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant