Release Process
===============
This document is only meant for the project administrators, not users and developers.
1. Create a release branch ``release/XX`` on GitHub.
2. In the release branch:
a. Update the version numbers in ``version.py``.
b. Make sure that `requirements.txt` only has the actual dependencies that
are needed to run SKLL. Any dependencies needed only for
development/testing (e.g., `sphinx`, `nose2` etc.) should be moved to
`requirements.dev`. This means that `requirements.txt` *must* be a strict
subset of `requirements.dev`.
c. Make sure the versions in `doc/requirements.txt` are up to date with
`requirements.txt` and only contains the dependencies needed to build the
documentation.
d. Make sure `.readthedocs.yml` is still accurate.
e. Update the conda recipe.
f. Update the documentation with any new features or details about changes.
g. Run ``make linkcheck`` on the documentation and fix any redirected/broken links.
h. Update the README and this release documentation, if necessary.
3. Build and upload the conda packages by following instructions in ``conda-recipe/README.md``.
4. Build the PyPI source distribution using ``python -m build``.
5. Upload the source distribution to TestPyPI using ``twine upload --repository testpypi dist/*``. You will need to have the ``twine`` package installed and set up your ``$HOME/.pypirc`` correctly. See details `here `__.
6. Test the conda package by creating a new environment on different platforms with this package installed and then running SKLL examples or tests from a SKLL working copy. If the package works, then move on to the next step. If it doesn't, figure out why and rebuild and re-upload the package.
7. Test the TestPyPI package by installing it as follows::
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple skll
8. Then run some SKLL examples or tests from a SKLL working copy. If the TestPyPI package works, then move on to the next step. If it doesn't, figure out why and rebuild and re-upload the package.
9. Create pull requests on the `skll-conda-tester `_ and `skll-pip-tester `_ repositories to test the conda and TestPyPI packages on Linux and Windows.
10. Draft a release on GitHub while the Linux and Windows package tester builds are running.
11. Once both builds have passed, make a pull request with the release branch to be merged into ``main`` and request code review.
12. Once the build for the PR passes and the reviewers approve, merge the release branch into ``main``.
13. Upload source and wheel packages to PyPI using ``python setup.py sdist upload`` and ``python setup.py bdist_wheel upload``
14. Make sure that the ReadTheDocs build for ``main`` passes.
15. Tag the latest commit in ``main`` with the appropriate release tag and publish the release on GitHub.
16. Send an email around at ETS announcing the release and the changes.
17. Post release announcement on Twitter/LinkedIn.