1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
.. _release-guide:
***********************************
A guide to making a nipy release
***********************************
A guide for developers who are doing a nipy release
.. _release-checklist:
Release checklist
=================
* Review the open list of `nipy issues`_. Check whether there are
outstanding issues that can be closed, and whether there are any issues that
should delay the release. Label them !
* Review and update the release notes. Review and update the :file:`Changelog`
file. Get a partial list of contributors with something like::
PREV_RELEASE=0.5.0
git log $PREV_RELEASE.. | grep '^Author' | cut -d' ' -f 2- | sort | uniq
where ``0.5.0`` was the last release tag name.
Then manually go over ``git shortlog $PREV_RELEASE..`` to make sure the
release notes are as complete as possible and that every contributor was
recognized.
* Use the opportunity to update the ``.mailmap`` file if there are any
duplicate authors listed from ``git shortlog -ns``.
* Add any new authors to the ``AUTHOR`` file. Add any new entries to the
``THANKS`` file.
* Check the copyright years in ``doc/conf.py`` and ``LICENSE``
* Check the output of::
rst2html.py README.rst > ~/tmp/readme.html
because this will be the output used by PyPI_
* Check the dependencies listed in ``pyproject.toml`` and in
``requirements.txt`` and in ``doc/users/installation.rst``. They should at
least match. Do they still hold? Make sure ``.github/workflows`` is testing
these minimum dependencies specifically.
* Check the examples. First download the example data
by running something like::
# Install data packages.
pip install https://nipy.org/data-packages/nipy-templates-0.3.tar.gz
pip install https://nipy.org/data-packages/nipy-data-0.3.tar.gz
Then run the tests on the examples with::
# Move out of the source directory.
cd ..
# Make log file directory.
mkdir ~/tmp/eg_logs
./nipy/tools/run_log_examples.py nipy/examples --log-path=~/tmp/eg_logs
in a virtualenv. Review the output in (e.g.) ``~/tmp/eg_logs``. The
output file ``summary.txt`` will have the pass file printout that the
``run_log_examples.py`` script puts onto stdout while running.
* Check the documentation doctests pass::
virtualenv venv
venv/bin/activate
pip install -r doc-requirements.txt
pip install -e .
(cd docs && make clean-doctest)
* Check the doc build::
virtualenv venv
venv/bin/activate
pip install -r doc-requirements.txt
pip install -e .
(cd docs && make html)
* Build and test the Nipy wheels. See the `wheel builder README
<https://github.com/MacPython/nipy-wheels>`_ for instructions. In summary,
clone the wheel-building repo, edit the ``.github/workflow`` text files (if
present) with the branch or commit for the release, commit and then push
back up to github. This will trigger a wheel build and test on macOS, Linux
and Windows. Check the build has passed on on the Github interface at
https://travis-ci.org/MacPython/nipy-wheels. You'll need commit privileges
to the ``nipy-wheels`` repo; ask Matthew Brett or on the mailing list if you
do not have them.
Doing the release
=================
* The release should now be ready.
* Edit :file:`nipy/__init__.py` to set ``__version__`` to e.g. ``0.6.0``.
Edit :file:`meson.build` to set ``version`` to match.
Commit, then::
make source-release
* For the wheel build / upload, follow the `wheel builder README`_
instructions again. Push. Check the build has passed on the Github
interface. Now follow the instructions in the page above to download the
built wheels to a local machine and upload to PyPI.
* Once everything looks good, you are ready to upload the source release to
PyPI. See `setuptools intro`_. Make sure you have a file ``\$HOME/.pypirc``,
of form::
[pypi]
username = __token__
* Sign and upload the source release to PyPI using Twine_::
gpg --detach-sign -a dist/nipy*.tar.gz
twine upload dist/nipy*.tar.gz*
* Tag the release with tag of form ``0.6.0``. `-s` below makes a signed tag::
git tag -s 'Second main release' 0.6.0
* Now the version number is OK, push the docs to github pages with::
make upload-html
* Start the new series.
Edit ``nipy/__init__.py`` and set version number to something of form::
__version__ = "0.6.1.dev1"
where ``0.6.0`` was the previous release.
* Push tags::
git push --tags
* Announce to the mailing lists.
.. _twine: https://pypi.python.org/pypi/twine
.. include:: ../../links_names.txt
|