The release process is automated via GitHub Actions and trusted publishers. The legacy manual process is documented at the bottom of this file as a fallback.
Both PyPI and the npm package are published from the same artifact that the
build job produces in CI, so what ships is exactly what was tested by the
visual-regression suite.
- PyPI Trusted Publisher entry on https://pypi.org/manage/project/bqplot/settings/publishing/
pointing at workflow
build.ymland environmentrelease-pypi. - npm Trusted Publisher entry on npmjs.com pointing at workflow
build.ymland environmentrelease-npm. - GitHub Environments
release-pypiandrelease-npmconfigured in the repo, optionally with required reviewers for an extra approval gate.
-
On the appropriate branch (
0.12.xfor the 0.12.x line,masterfor the next major), bump the versions:bqplot/_version.py— Python package version (e.g.0.12.46)js/package.json— npm package version (e.g.0.5.47); also updatejs/package-lock.jsonby runningyarn install- If the JS major/minor changed, update
__frontend_version__inbqplot/_version.pyto match.
-
Commit the bump and open a PR. Wait for CI to go green — the publish jobs run in dry-run mode (
twine check,npm publish --dry-run) so any metadata problem is caught before release. -
Merge the PR.
-
Create a GitHub Release on the merge commit:
- Tag: the Python version, no
vprefix (e.g.0.12.46). The tag must matchbqplot/_version.py— CI will fail the publish step otherwise. - Target: the branch you merged into (e.g.
0.12.x). - Title and notes: as you like.
- Tag: the Python version, no
-
Publishing the release fires the workflow with
event_name == 'release'. The workflow rebuilds the wheel/sdist/tgz, re-runs the visual-regression tests on the built wheel, thenpublish-pypiandpublish-npmupload via OIDC. If you set required reviewers on the environments, GitHub will pause for your approval before each upload. -
Update the conda-forge feedstock (still manual).
The dist/ artifact from the run is preserved on the workflow run page. Fix
the underlying issue (typically a misconfigured trusted publisher entry on
PyPI/npm), then click Re-run failed jobs — no rebuild or retag needed.
Kept for reference / emergency use only. Prefer the automated flow above.
conda create -c conda-forge --override-channels -y -n bqplotrelease jupyterlab nodejs twine ipywidgets pip jupyter_packaging
conda activate bqplotreleasemkdir -p release
cd release
rm -rf bqplot
git clone git@github.com:bqplot/bqplot.git
cd bqplotcd js/
npm version [Major/minor/patch]
npm install
npm publish
cd ..Update _version.py (bump both the python package version, and if needed,
the Javascript version).
git clean -dfx
python setup.py sdist
python setup.py bdist_wheel
twine upload dist/*
Check that the only changes are to package.json, package-lock.json, and
_version.py:
git diffCommit and tag:
git commit -saTag the release
git tag [version, like 0.12.4]Push your change to a new PR and ask for a review to merge the PR.
Update the conda-forge feedstock.