Doing a release
===============

Doing a release of ``lemur`` requires a few steps.

Bumping the version number
--------------------------

The next step in doing a release is bumping the version number in the
software.

* Update the version number in ``lemur/__about__.py``.
* Set the release date in the :doc:`/changelog`.
* Do a commit indicating this, and raise a pull request with this.
* Wait for it to be merged.

Performing the release
----------------------

The commit that merged the version number bump is now the official release
commit for this release. You need an `API key <https://pypi.org/manage/account/#api-tokens>`_,
which requires permissions to maintain the Lemur `project  <https://pypi.org/project/lemur/>`_.

For creating the release, follow these steps (more details `here <https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives>`_)

* Make sure you have the latest versions of setuptools and wheel installed:

    ``python3 -m pip install --user --upgrade setuptools wheel``

* Now run this command from the same directory where setup.py is located:

    ``python3 setup.py sdist bdist_wheel``

* Once completed it should generate two files in the dist directory:

.. code-block:: pycon

    $ ls dist/
    lemur-0.8.0-py2.py3-none-any.whl	lemur-0.8.0.tar.gz


* In this step, the distribution will be uploaded. You’ll need to install Twine:

    ``python3 -m pip install --user --upgrade twine``

* Once installed, run Twine to upload all of the archives under dist. Once installed, run Twine to upload all of the archives under dist:

    ``python3 -m twine upload --repository pypi dist/*``

The release should now be available on `PyPI Lemur <https://pypi.org/project/lemur/>`_ and a tag should be available in
the repository.

Make sure to also make a github `release <https://github.com/Netflix/lemur/releases>`_ which will pick up the latest version.

Verifying the release
---------------------

You should verify that ``pip install lemur`` works correctly:

.. code-block:: pycon

    >>> import lemur
    >>> lemur.__version__
    '...'

Verify that this is the version you just released.

Post-release tasks
------------------

* Update the version number to the next major (e.g. ``0.5.dev1``) in
  ``lemur/__about__.py`` and
* Add new :doc:`/changelog` entry with next version and note that it is under
  active development
* Send a pull request with these items
* Check for any outstanding code undergoing a deprecation cycle by looking in
  ``lemur.utils`` for ``DeprecatedIn**`` definitions. If any exist open
  a ticket to increment them for the next release.