Release Process¶
This process describes the steps to execute in order to release a new version of SimPy.
Preparations¶
Close all tickets for the next version.
Update the minium required versions of dependencies in
setup.py
. Update the exact version of all entries inrequirements.txt
.Run tox from the project root. All tests for all supported versions must pass:
$ tox [...] ________ summary ________ py27: commands succeeded py32: commands succeeded py33: commands succeeded pypy: commands succeeded congratulations :)
Note
Tox will use the
requirements.txt
to setup the venvs, so make sure you’ve updated it!Build the docs (HTML is enough). Make sure there are no errors and undefined references.
$ cd docs/ $ make clean html $ cd ..
Check if all authors are listed in
AUTHORS.txt
.Update the change logs (
CHANGES.txt
anddocs/about/history.rst
). Only keep changes for the current major release inCHANGES.txt
and reference the history page from there.Commit all changes:
$ hg ci -m 'Updated change log for the upcoming release.'
Update the version number in
simpy/__init__.py
and commit:$ hg ci -m 'Bump version from x.y.z to a.b.c'
Warning
Do not yet tag and push the changes so that you can safely do a rollback if one of the next step fails and you need change something!
Write a draft for the announcement mail with a list of changes, acknowledgements and installation instructions. Everyone in the team should agree with it.
Build and release¶
Test the release process. Build a source distribution and a wheel package and test them:
$ python setup.py sdist bdist_wheel $ ls dist/ simpy-a.b.c-py2.py3-none-any.whl simpy-a.b.c.tar.gz
Try installing them:
$ rm -rf /tmp/simpy-sdist # ensure clean state if ran repeatedly $ virtualenv /tmp/simpy-sdist $ /tmp/simpy-sdist/bin/pip install pytest $ /tmp/simpy-sdist/bin/pip install dist/simpy-a.b.c.tar.gz $ /tmp/simpy-sdist/bin/python >>> import simpy # doctest: +SKIP >>> simpy.__version__ # doctest: +SKIP 'a.b.c' >>> simpy.test() # doctest: +SKIP
and
$ rm -rf /tmp/simpy-wheel # ensure clean state if ran repeatedly $ virtualenv /tmp/simpy-wheel $ /tmp/simpy-wheel/bin/pip install pytest $ /tmp/simpy-wheel/bin/pip install dist/simpy-a.b.c-py2.py3-none-any.whl $ /tmp/simpy-wheel/bin/python >>> import simpy # doctest: +SKIP >>> simpy.__version__ # doctest: +SKIP 'a.b.c' >>> simpy.test() # doctest: +SKIP
Create or check your accounts for the test server <https://testpypi.python.org/pypi> and PyPI. Update your
~/.pypirc
with your current credentials:[distutils] index-servers = pypi test [test] repository = https://testpypi.python.org/pypi username = <your test user name goes here> password = <your test password goes here> [pypi] repository = http://pypi.python.org/pypi username = <your production user name goes here> password = <your production password goes here>
Upload the distributions for the new version to the test server and test the installation again:
$ twine upload -r test dist/simpy*a.b.c* $ pip install -i https://testpypi.python.org/pypi simpy
Check if the package is displayed correctly: https://testpypi.python.org/pypi/simpy
Finally upload the package to PyPI and test its installation one last time:
$ twine upload -r pypi dist/simpy*a.b.c* $ pip install -U simpy
Check if the package is displayed correctly: https://pypi.python.org/pypi/simpy
Post release¶
Push your changes:
$ hg tag a.b.c $ hg push ssh://hg@bitbucket.org/simpy/simpy
Activate the documentation build for the new version.
Send the prepared email to the mailing list and post it on Google+.
Update Wikipedia entries.
Update Python Wiki
Post something to Planet Python (e.g., via Stefan’s blog).