For now, only the source distribution gets uploaded to PyPI. Doing a generic wheel that runs on a range of Linux distros is non-trivial, needing to be built in a special "manylinux" environment.There are some steps described below that start to automate the process of building and uploading with GitHub actions for some architectures. But it's not ready at the moment.
I have however made the C extension module more agnostic as to the version of Python it's running with. It conforms
to the Limited API at the Python 3.9 level. This ought to
make it easier to redistribute applications within your own environment, compiling only once and copying the .so file
to other environments with Python 3.9 or newer levels.
A GitHub Action in this repo can be used to build the release files including
binary wheels, but not to actually upload them to PyPI. This is to allow local checks to be done and to fit better with
my own workflows, including use of other PyPI-equivalent servers for testing of the images. The build is triggered
manually with the gh workflow_dispatch operation. The workflow configuration file does have some automatic steps (for
example to run on PR creation), but they are commented out. The Redistributable Client packages are used to build binary
wheels for Linux/x64 and Windows.
The Action is not going to be used for a real release for now, as it still requires work to modify it to build
manylinux images. The runActions.sh script is the piece that can be used to test the flow including downloading the
generated artifacts. It might nonetheless be helpful for populating private PyPI repositories.
The tools subdirectory also includes scripts to let you run your own PyPI-equivalent local server, and to upload
binary wheels to that location. See the testInstServer.sh and testInstClient.sh scripts. They will almost certainly
require modifications for your own systems, but the basic framework is there. This local PyPI server does not have all
the same constraints that the real PyPI has. For example, it doesn't stop you uploading a Linux binary wheel that has
been built outside the "manylinux" framework. Again, that may help with internal distribution of your applications.
At each of these steps, there are opportunities to test the code/packages in various ways including local and remote testing on a variety of platforms. Only the final release to PyPI is irrevocable.
- Use
copyDefsto get the most recent MQI header files (MQ developers only - requires access to product build machines) - Update setup.py with new version number
- Update code/examples/Dockerfile and .github/workflows/release.yaml with current MQ VRMF
- Any other code changes
- Use the
checkscript to make sure it all looks sensible - Running
pyRelease.sh -lYemulates a real release. The local server can be the source of a test environment's installations. (The local server by default only permits localhost connections. You'd need to edit the startup script to permit wider access.)
- Commit and push changes
- Create a release tag for the new version number
- Use
pyRelease.shto either build an sdist locally or drive the GitHub Action to build the distribution files (sdist and wheels). Any Action-created artifacts are downloaded from GitHub and can then be uploaded after the script asks for a final manual confirmation to PyPI. Or to the PyPI Test server (which is the default option) if you prefer.