Release process¶
Build¶
Update build dependencies:
$ pip install -U setuptools wheel twine
Create release
branch from main:
$ git checkout -b release
Cleanup (remove all untracked files and directories):
$ git clean -f -d -x
Update help()
output:
$ python update-help.py
Set release version (remove .dev0
from $MAJOR.$MINOR[.$BUGFIX]
version):
docs/conf.py
graphviz/__init__.py
setup.py
Document release:
remove
(in development)
fromCHANGES.rst
header
Run the tests, lint the code, and build the documentation:
$ python -m tox -r -- -W error # --recreate, raise error on warning
$ python lint-code.py --disable-noqa
$ python build-docs.py -b doctest
$ python build-docs.py
$ git clean -f -d -x
Commit to release
branch and push to origin
:
$ git add *
$ git commit -m "release $MAJOR.$MINOR[.$BUGFIX]"
$ git push --set-upstream origin release
Check GitHub Actions
relase
Build workflowCheck Codecov
release
build test coverage
Build and check the release files:
$ python setup.py sdist bdist_wheel
$ python -m twine check --strict dist/*
dist/graphviz-$MAJOR.$MINOR[.$BUGFIX].zip
dist/graphviz-$MAJOR.$MINOR[.$BUGFIX]-py3-none-any.whl
If changes are needed (and go back to: Cleanup step):
$ git commit --amend --date=now
Switch to main branch and merge release
:
$ git switch master
$ git merge --ff-only release
Tag with annotated release version tag:
$ git tag -a -m "$MAJOR.$MINOR[.$BUGFIX] release"
Bump post-release version to $MAJOR.$MINOR.[.$BUGFIX].dev0
:
docs/conf.py
graphviz/__init__.py
setup.py
Document post-release:
add new
Version $MAJOR.$MINOR[.$BUGFIX] (in development)
heading toCHANGES.rst
Commit version bump to main branch:
$ git commit -m "bump version for development"
Publish¶
Publish the release with twine:
$ python -m twine upload dist/*
Push main branch and push all new tags:
$ git push --tags
Update stable branch to the latest release:
$ git switch stable
$ git merge --ff-only $MAJOR.$MINOR[.$BUGFIX]
$ git push
Verify¶
Verify publication:
Check PyPI files
Check GitHub Main page
Check GitHub Actions main branch Build workflow
Check Read the Docs builds
Check latest release notes
Check stable release notes
Check
stable
binder: https://mybinder.org/v2/gh/xflr6/graphviz/stable
Install in default environment:
$ pip install -U graphviz
$ python -c "import graphviz; print((graphviz.__version__, graphviz.version()))"
Downstream¶
Check downstream conda-forge release