Release Process
===============

A release can be undertaken only by a project administrator.
A project administrator should have an administrator role on the ParMOO
GitHub, PyPI, and readthedocs pages.

Before release
--------------

- A release branch should be taken off ``develop`` (or ``develop`` pulls
  controlled).

- Release notes for this version are added to the ``CHANGELOG.rst`` file.

- Version number is updated wherever it appears and ``+dev`` suffix is removed
  (in ``parmoo/version.py`` and ``README.rst``).

- Check ``README.rst`` *Citing ParMOO* and ``docs/refs.rst`` for correctness.

- ``setup.py`` and ``parmoo/__init__.py`` are checked to ensure all
  information is up to date.

- ``MANIFEST.in`` is checked. Locally, try out ``python setup.py sdist`` and
  check created tarball contains correct files and directories for PyPI
  package.

- Tests are run with source to be released (this may iterate):

  - On-line CI (GitHub Actions) tests must pass.

  - Documentation must build and display correctly wherever hosted (currently
    readthedocs.org).

- Pull request from either the develop or release branch to main requesting
  one or more reviewers (including at least one other administrator).

- Reviewer will check that all tests have passed and will then approve merge.

During release
--------------

An administrator will take the following steps.

- Merge the pull request into main.

- Once CI tests have passed on main:

  - A GitHub release will be taken from the main

  - A tarball (source distribution) will be uploaded to PyPI

- If the merge was made from a release branch (instead of develop), merge this
  branch into develop.

- Create a new commit on develop that appends ``+dev`` to the version number
  (wherever it appears).

After release
-------------

- Ensure all relevant GitHub issues are closed.
