Pydicom Developer Guide

Release guideline


When you want to release, you can use bumpversion to update the version across the library:

bumpversion release  # Move from 1.0.0.dev0 to 1.0.0

Then, you can commit this change and refer to the section Git and GitHub to create a branch and a release.

Once the release is created, you need to turn to a new development version:

bumpversion minor # Move from 1.0.0 to 1.1.0.dev0

Once this is done, you can commit and push to master.

Git and GitHub

At the moment of a release, a git branch needs to be created with the semantic major.minor.X (e.g. ``1.0.X). It will be used in the future to backport bug fixes.

For each patch, a release with an associated tag should be created through the GitHub front-end. The target branch will not be master but the maintenance branch major.minor.X.


At the moment of a release, there is a need to manually edit the directory of the gh-pages:

git checkout gh-pages
cp -r dev major.minor  # major.minor represent a version of the release (1.0)
unlink stable
ln -s major.minor stable
git add major.minor
git commit -am 'DOC new release major.minor'

By doing so, any bug fix pushed in a maintenance branch will trigger a documentation build. The stable version of the doc will also point to the new release while dev doc will still point to dev folder which is the documentation of the master branch.

PyPi build

The package can be built for different platforms:

python bdist_wininst
python sdist
python bdist_wheel --universal

Then, the different builds can be uploaded to PyPi. This has to be done by the package owner on PyPi. Best practice is to use twine, and to upload to the Test PyPi server for initial testing:

twine upload --repository-url dist/*

Then anyone can test the install, e.g. in a local virtual environment:

pip install [--pre] --index-url pydicom

If it is a pre-release version, the optional --pre argument should be used.

When all has been tested satisfactorily, prepare an announcement for the pydicom google group, then repeat the above twine upload/install test without the test repository urls, and then send the announcement.

There are more details at the Python packaging guide.