Deltakit Release Procedure#
The release procedure is currently in discussion in gh-55; here is a working summary.
There are three kinds of releases:
stable release - published on a regular schedule from
main,“nightly” release - published automatically whenever commits are added to
main, and:alpha release - published as-needed, primarily for testing of a feature branch.
Stable Releases#
Stable releases are performed on a fixed (fortnightly) schedule and as-needed whenever critical bug fixes are made. The target audience of stable releases is typical users. Semantic versioning communicates whether releases include any backward compatible changes so that users can decide when/whether to upgrade.
A stable release currently consists of:
a version tag (human-readable label) associated with a commit,
assets published to PyPI (which gets added to the “Release history” there), and
assets published to “Releases” on our GitHub repo.
documentation, currently published using GitHub pages.
“Assets” currently refers to wheels (pre-built Python package format)
and sdists (“source distribution”) of deltakit and all component libraries.
A release is accompanied by release notes. Draft release notes are automatically compiled by Python Semantic Release from the commit messages, and these are manually reviewed and edited before publication.
To perform a release, the release manager needs to go through the following steps:
Create release notes. On
main:Sync the
releasegroup:
uv sync --python 3.13 --group release
Update release notes in
CHANGELOG.md:
uv run --no-sync semantic-release -vv version --no-push --no-commit --no-tag
Increment the version number in all subpackages
pyproject.tomlfiles:
uv run --no-sync python tools/propagate_version.py
Update the packages depending on a
deltakit-*subpackage to the new version (e.g.,deltakit-explorerdepends ondeltakit-core,deltakit-circuitanddeltakit-decodeand these dependencies should reflect the newdeltakitversion).Generate a
licenses.confluencefile:
uv run --no-sync pip-licenses --format=confluence --output-file licenses.confluence
Hand-edit it if necessary, and check that the deltakit-* subpackages versions changed
to the released version.
Create a release branch with naming format
release/v<version number>. On that branch, commit the previous changes and open a PR targetingmain. The PR undertakes the review/approval process. Before merge, any final changes merged tomainduring the review process can be added by editing draft notes auto-generated by semantic release (step 1.).Update the version tag. After merge, the release manager checks out the commit to be released (typically the latest
mainafter the release note PR merges), creates a tag (e.g.git tag v0.4.0), and pushes the tag to GitHub (git push origin v0.4.0).Trigger the stable release workflow. On the tagged commit (i.e., click on “Run workflow”, and pick an entry in the “Tags” tab when selecting a value for “Use workflow from”), trigger the “Build, test, and publish stable wheels” on GitHub Actions here. It builds, tests and publishes the artefacts to PyPI and GitHub, and it renders and uploads the documentation to GitHub pages.
The latest stable version of deltakit can be installed with pip install deltakit.
“Nightly” Releases#
Contrary to the name, “nightly” releases are performed every time commits are added to main-
typically when a PR merges.
The target audience of “nightly” releases is power users who want access to features and bug fixes as
soon as they become available in main.
The base version number is determined as with stable releases, but a suffix of the form .devYYYYMMDDhhmmss is
appended to denote the fact that it is a development release and to order the development releases chronologically.
A nightly release currently consists only of assets published to PyPI.
Currently, there are no release notes, no tag is generated, no assets are published on GitHub, and the
documentation is not rendered.
(However, when the repository becomes public and documentation is migrated to Read the Docs,
documentation associated with the main branch will be available there.)
These releases are performed automatically, and there is no way to trigger one besides adding commits to main.
The workflow associated with nightly releases is “Build, test, and publish nightly wheels”,
nightly_release.yml).
The latest “nightly” version of deltakit can be installed by using pip with the --pre option, specifying
the desired version number; e.g., pip install deltakit --pre 0.4.0.dev20250904222833.
Alpha Releases#
Alpha releases are typically generated on demand from a feature branch.
The target audience of “alpha” releases is power users and alpha testers who need access to a particular
feature or bug fix before it becomes available in main.
The base version number is determined as with stable releases, but a suffix of the form aYYYYMMDDhhmmss is
appended to denote the fact that it is an alpha release and to order the alpha releases chronologically.
An alpha release currently consists of a tag and assets published to PyPI. Currently, there are no release notes, no assets are published on GitHub, and the documentation is not rendered. (However, when the repository becomes public and documentation is migrated to Read the Docs, documentation associated with the feature branch will be available there. Also, the PR associated with the feature branch serves to document the relevant changes.)
To perform an alpha release, the release manager triggers the alpha release workflow on the desired commit
(“Build, test, and publish alpha wheels” on GitHub Actions,
alpha_release.yml).
This builds and publishes the artefacts to PyPI, and it associates a tag with the commit on GitHub.
The latest alpha version of deltakit can be installed by using pip with the --pre option, specifying
the desired version number; e.g., pip install deltakit --pre 0.4.0a20250904222833.