Release Process

In order to allow for rapid, predictable releases, Setuptools uses a mechanical technique for releases, enacted by Travis following a successful build of a tagged release per PyPI deployment.

Prior to cutting a release, please check that the CHANGES.rst reflects the summary of changes since the last release. Ideally, these changelog entries would have been added along with the changes, but it’s always good to check. Think about it from the perspective of a user not involved with the development–what would that person want to know about what has changed–or from the perspective of your future self wanting to know when a particular change landed.

To cut a release, install and run bump2version {part} where part is major, minor, or patch based on the scope of the changes in the release. Then, push the commits to the master branch. If tests pass, the release will be uploaded to PyPI (from the Python 3.6 tests).

Release Frequency

Some have asked why Setuptools is released so frequently. Because Setuptools uses a mechanical release process, it’s very easy to make releases whenever the code is stable (tests are passing). As a result, the philosophy is to release early and often.

While some find the frequent releases somewhat surprising, they only empower the user. Although releases are made frequently, users can choose the frequency at which they use those releases. If instead Setuptools contributions were only released in batches, the user would be constrained to only use Setuptools when those official releases were made. With frequent releases, the user can govern exactly how often he wishes to update.

Frequent releases also then obviate the need for dev or beta releases in most cases. Because releases are made early and often, bugs are discovered and corrected quickly, in many cases before other users have yet to encounter them.

Release Managers

Additionally, anyone with push access to the master branch has access to cut releases.