Repository navigation
Publish pysvzerod wheels to PyPI - #248
Merged
Merged
Conversation
Request only Python's Development.Module so CMake configures in manylinux and musllinux images, which ship no libpython. Set up MSVC and build only AMD64 on Windows. Build every supported CPython except free-threaded, and test each wheel by running the solver test cases and the svzerodsolver command. Check the release tag before any build starts, publish to PyPI only on tag pushes, skip files already on TestPyPI, and give build jobs a read-only token. Fetch pybind11 and pybind11_json as hashed archives, add SPDX license metadata, and update the README and release notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run the sdist and wheel builds and tests on pull requests that change packaging files, so they are checked before merge. The publish jobs stay limited to manual runs (TestPyPI) and tag pushes (PyPI). Set the package version to 3.1 so it follows the repository's release tags, which reached v3.0. Document the SimVascular PyPI organization setup and the rule that every v* tag must match the package version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pull request and manual runs already build and test every wheel, and their artifacts can be installed directly on other machines. A TestPyPI upload would only rehearse a separate project and publisher, not the production setup. Document testing the CI wheels before a release, yanking a broken release, and pre-releases for large packaging changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
zasexton
self-requested a review
October 8, 2026 16:37
Contributor
|
@ncdorn looking through this branch now and will give review over the next few hours |
Contributor
|
I have some changes and github plumbing that I will be adding via a PR request against your branch @ncdorn so please review this sub-PR and if you agree with it then I think we can go ahead and wrap this up |
Add manual versioned PyPI publishing and GitHub releases
zasexton
approved these changes
Oct 9, 2026
zasexton
left a comment
Contributor
There was a problem hiding this comment.
This looks good for testing on the testpypi server so let's go ahead and merge to see if we can do this
ncdorn
added a commit
to ncdorn/svZeroDSolver
that referenced
this pull request
Oct 14, 2026
Brings in the PyPI release work (SimVascular#248), the pysvzerod -> svzerod package rename (SimVascular#249), and the 3.2 version bump. Only README.md conflicted: upstream added a "Python package" install section and this branch added the "Impedance BC" section, both appended after the documentation links. Kept both, with the install section first. The rename applied cleanly to this branch's files; no references to the old module name remain. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Current situation
Closes #247. Also addresses #44; the package keeps its existing name,
pysvzerod.Right now
pysvzerodcan only be installed from this repository (pip install git+https://github.com/simvascular/svZeroDSolver.git), which compiles the C++ solver on the user's machine. There is no workflow that builds wheels or publishes to PyPI.Release Notes
pip install pysvzerodinstalls a prebuilt wheel. Wheels cover CPython 3.9–3.15 on Linux x86_64 (manylinux and musllinux), Windows AMD64, and macOS Intel and Apple Silicon. Other platforms fall back to the source distribution..github/workflows/pypi.yml:tests/test_solver.pyand thesvzerodsolvercommand.v*tag: checks the tag against thepyproject.tomlversion, then publishes to PyPI through trusted publishing. No API tokens are stored in the repo.3.1, following the repository's release tags (Karthik's JOSS Release is taggedv3.0). From now on every newv*tag must equalvplus thepyproject.tomlversion, including a tag created for a GitHub release. Otherwise the workflow fails before it builds anything.Development.Moduleinstead ofDevelopment, because the manylinux images have nolibpython.master.setup.pypasses the building interpreter to CMake.pyproject.tomladds project URLs andBSD-3-Clauselicense metadata, and requiressetuptools >= 77.MANIFEST.indefines the source distribution's contents.Documentation
docs/PYPI_RELEASE.md: first-time setup (thepypiGitHub environment and the trusted publisher in the SimVascular PyPI organization), testing the CI wheels on other machines before a release, and the steps for each release.Testing
tests/test_solver.pypasses against that build: 38 passed, 2 known failures marked as expected.twine check.Setup before the first release
pypienvironment in this repository. Limit it tov*tags and add a required reviewer, since a PyPI upload can't be undone.pysvzerodin the SimVascular organization and add a GitHub trusted publisher: ownerSimVascular, repositorysvZeroDSolver, workflowpypi.yml, environmentpypi.masterand try its wheels on a couple of machines (seedocs/PYPI_RELEASE.md), then create thev3.1release.Code of Conduct & Contributing Guidelines
🤖 Generated with Claude Code