Release process#
This guide is for maintainers preparing a release. Contributors can follow Contributing without performing these steps.
Prepare the release commit#
Review the changes to include and check their test, lint, and validation results. Build the documentation locally using Building and editing the docs.
Set
__version__inzrad/__init__.pyto the intended release version, following the conventions below. Package metadata and documentation read this value; the release tag does not change it automatically.Commit the version and release-related documentation changes. Confirm the intended commit contains the code and version you want to publish.
Version conventions#
Z-Rad uses date-based, PEP 440-compatible versions:
Type |
Format |
Example |
|---|---|---|
Stable |
|
|
Development |
|
|
Keep the patch component, including .0 for the first release of a month.
Use .dev0 for the normal in-repository development version. Write the month
without leading zeroes: 26.5.0, not 26.05.0.
Publish the GitHub release#
Create or select the release tag on the intended commit and prepare the release notes. Check that the tag and notes identify the package version in that commit. Publish the GitHub release when it is ready for distribution.
Publication triggers both workflows below; they do not wait for one another.
Their trigger is release: published, with no stable-release-only condition.
Do not assume marking a release as a prerelease suppresses publication jobs.
Package publication#
.github/workflows/publish.yml uses Python 3.12, installs build and
twine, runs python -m build, and uploads dist/* to PyPI with Twine.
It reads the repository secrets PYPI_USERNAME and PYPI_PASSWORD for
upload credentials.
Desktop application builds#
.github/workflows/release-executables.yml uses
generate_executable.py and PyInstaller to build and attach:
z-rad-<release-tag>-windows.exefromwindows-latestz-rad-<release-tag>-macos-arm64.zipfrommacos-latest
The macOS ZIP contains an Apple Silicon Z-Rad.app bundle. Intel macOS
binaries are not produced. The app is unsigned and unnotarized, so Gatekeeper
warnings are expected. Adding signing and notarization requires Apple Developer
credentials and a change to the release workflow.
Verify the published artifacts#
Check both workflow runs after publication. Verify that PyPI shows the intended package version and that the GitHub release contains both desktop assets. A successful package upload does not establish that the executable builds passed.
As a release check, install the published package in a fresh environment and confirm its version and imports. Download the desktop assets and check that they launch on their target platforms. If a job fails, inspect its logs and the artifacts already published before deciding how to recover; publication can succeed for one artifact while another fails.