Release Process
~~~~~~~~~~~~~~~
1. Increment version number in ``cloudbridge/__init__.py`` as per
`semver rules _.
2. Freeze all library dependencies in ``setup.py``. The version numbers can be
a range with the upper limit being the latest known working version, and the
lowest being the last known working version.
In general, our strategy is to make provider sdk libraries fixed within
relatively known compatibility ranges, so that we reduce the chances of
breakage. If someone uses cloudbridge, presumably, they do not use the sdks
directly. For all other libraries, especially, general purpose libraries
(e.g. six), our strategy is to make compatibility as broad and unrestricted
as possible.
3. Run all ``tox`` tests.
4. Add release notes to ``CHANGELOG.rst``. Also add last commit hash to
changelog. List of commits can be obtained using
``git shortlog ..HEAD``
5. Release to PyPi.
(make sure you have run `pip install wheel`)
First, test release with PyPI staging server as described in:
https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/
Once tested, run:
.. code-block:: bash
# remove stale files or wheel might package them
rm -r build dist
python setup.py sdist upload
python setup.py bdist_wheel upload
6. Tag release and make a GitHub release.
.. code-block:: bash
git tag -a v1.0.0 -m "Release 1.0.0"
git push --tags
7. Increment version number in ``cloudbridge/__init__.py`` to ``version-dev``
to indicate the development cycle, commit, and push the changes.