|
|
============================= |
|
|
Docutils_ Release Procedure |
|
|
============================= |
|
|
|
|
|
:Authors: David Goodger; Lea Wiemann; open to all Docutils developers |
|
|
:Contact: docutils-develop@lists.sourceforge.net |
|
|
:Date: $Date: 2017-08-03 11:00:21 +0200 (Do, 03 Aug 2017) $ |
|
|
:Revision: $Revision: 8146 $ |
|
|
:Copyright: This document has been placed in the public domain. |
|
|
|
|
|
.. _Docutils: http://docutils.sourceforge.net/ |
|
|
|
|
|
Assumptions and their failure |
|
|
----------------------------- |
|
|
|
|
|
On the test machine python2.4, 2.5, 2.6, 2.7 and 3.2, 3.3, and 3.4 |
|
|
are installed. |
|
|
Some in /usr/ some under /usr/local. |
|
|
|
|
|
Assumption: If python2.6 is in /usr/bin/ then site-packages is under |
|
|
/usr/local/lib/python2.6. |
|
|
|
|
|
On new ubuntu 12.10 |
|
|
|
|
|
* python2.7 is here /usr/bin/python2.7. |
|
|
* in /usr/lib are python2.7, pymodules and pyshared. |
|
|
|
|
|
in /usr/lib/python2.7 no site-packages directory even after installation |
|
|
of docutils |
|
|
|
|
|
in /usr/local/lib/python2.7 are dist-packages site-packages. |
|
|
|
|
|
site-packages is empty. |
|
|
|
|
|
docutils is installed under dist-packages. |
|
|
|
|
|
pymodules has a python2.7 directory. |
|
|
|
|
|
Releasing |
|
|
--------- |
|
|
|
|
|
Version numbers |
|
|
~~~~~~~~~~~~~~~ |
|
|
|
|
|
Version numbers shall follow the `Docutils Project Policies`_ and comply |
|
|
with `PEP 440`_. |
|
|
|
|
|
Especially, mark pre-releases and the repository version/snapshots as |
|
|
"between" releases (cf. `Feature Request #50`_ and the discussion on |
|
|
docutils-devel on May 28 2017), e.g. |
|
|
|
|
|
| prev. release 0.13.1, |
|
|
| prerelease 0.14rc1, |
|
|
| [prereleases 0.14rc2, ...] |
|
|
| release 0.14, |
|
|
| repo/snapshots 0.15.dev |
|
|
| [bugfix relases 0.14.1, ...] # branches off of the 0.14 release. |
|
|
|
|
|
The repository version number is always equal to the last released |
|
|
version + 1, with a .dev suffix: ``<major>.<minor+1>.dev``. |
|
|
(Exception: during "feature freeze" between pre-release and release it may |
|
|
point to the next pre-release.) |
|
|
|
|
|
.. _Docutils Project Policies: policies.html#version-numbers |
|
|
.. _Feature Request #50: https://sourceforge.net/p/docutils/feature-requests/50/ |
|
|
.. _PEP 440: https://www.python.org/dev/peps/pep-0440/ |
|
|
|
|
|
Release steps |
|
|
~~~~~~~~~~~~~ |
|
|
|
|
|
REWORK FOR SOURCEFORGE REPO |
|
|
|
|
|
|
|
|
.. WARNING:: Steps in boldface text are *not* covered by the release script |
|
|
at sandbox/infrastructure/release.sh. "Not covered" means that you |
|
|
aren't even reminded of them. |
|
|
|
|
|
.. Note:: This document does not cover branching and tagging, but the |
|
|
release script does. |
|
|
|
|
|
.. Note:: You may want to use ReleaseForge_ instead of using |
|
|
SourceForge's file release system. |
|
|
|
|
|
.. _ReleaseForge: http://releaseforge.sourceforge.net/ |
|
|
|
|
|
|
|
|
* **On the Docutils-develop mailing list, announce that the release is |
|
|
going to be made, update the release notes and ask for additions.** |
|
|
|
|
|
**Announce the date of the feature freeze, at least a week away.** |
|
|
|
|
|
Consult HISTORY.TXT for changes. |
|
|
|
|
|
* **Announce a check-in freeze on Docutils-develop.** |
|
|
|
|
|
* **Announce the upcoming release at the Sphinx-devel mailing list |
|
|
and ask for testing with Sphinx.** |
|
|
(This step can be skipped for bugfix releases.) |
|
|
|
|
|
* update `version numbers`_: |
|
|
|
|
|
We want pre-release tags ``rcN`` for pre-releases, development release tag |
|
|
``.dev`` for snapshots and installs from the repository. |
|
|
|
|
|
For a prerelease |
|
|
|
|
|
0. before release ``<next-release-number>.dev`` |
|
|
1. set this to ``<next-release-number>.rc1`` |
|
|
2. release |
|
|
3. increase prerelease number in the repository |
|
|
|
|
|
For a release |
|
|
|
|
|
0. before release ``<next-release-number>.dev`` or |
|
|
``<next-release-number>.rc<N>`` |
|
|
1. set this to ``<next-release-number>`` without prerelease character. |
|
|
2. release |
|
|
3. set to ``<major>.<minor+1>.dev`` in the repository (trunk). |
|
|
|
|
|
see what ``sandbox/infrastructure/release.sh`` can aid |
|
|
|
|
|
Call ``sandbox/infrastructure/set_release.sh new_version``. |
|
|
For details see the script. |
|
|
|
|
|
``new_version`` is major.minor[.micro][<pre>][.dev] |
|
|
|
|
|
.. Note:: *BUG* test tarball requires root password, but it is possible to |
|
|
skip this stage interactively, and testing should be done before |
|
|
release. |
|
|
|
|
|
* Change ``__version_details__`` in docutils/docutils/__init__.py to |
|
|
"release" (from "repository"). |
|
|
|
|
|
* Check the _`version number` in the following files, should be already |
|
|
correct: |
|
|
|
|
|
+ docutils/setup.py |
|
|
+ docutils/docutils/__init__.py |
|
|
+ docutils/test/functional/expected/* ("Generator: Docutils X.Y[.Z]") |
|
|
+ docutils/README.txt |
|
|
+ web/index.txt |
|
|
|
|
|
* Close the "Changes Since ..." section in docutils/HISTORY.txt. |
|
|
|
|
|
* Clear/unset the PYTHONPATH environment variable. |
|
|
|
|
|
* Create the release tarball: |
|
|
|
|
|
(a) Create a new empty directory and ``cd`` into it. |
|
|
|
|
|
(b) Get a clean snapshot of the main tree:: |
|
|
|
|
|
svn export svn://svn.code.sf.net/p/docutils/code/trunk/docutils |
|
|
|
|
|
or via the [Download Snapshot] button at |
|
|
http://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils/ |
|
|
|
|
|
(c) Use Distutils to create the release tarball:: |
|
|
|
|
|
cd docutils |
|
|
python setup.py sdist |
|
|
|
|
|
* Expand and _`install` the release tarball in isolation: |
|
|
|
|
|
(a) Expand the tarball in a new location, not over any existing |
|
|
files. |
|
|
|
|
|
(b) Remove the old installation from site-packages (including |
|
|
roman.py, and optparse.py, textwrap.py). |
|
|
|
|
|
"remove" might fail, see _`Assumptions and their failure` |
|
|
|
|
|
Install from expanded directory:: |
|
|
|
|
|
cd docutils-X.Y.Z |
|
|
python setup.py install |
|
|
|
|
|
The "install" command may require root permissions. |
|
|
|
|
|
(c) Repeat step b) for all supported Python versions. |
|
|
|
|
|
* Run the _`test suite` from the expanded archive directory with all |
|
|
supported Python versions on all available platforms (GNU/Linux, Mac |
|
|
OS X, Windows):: |
|
|
|
|
|
cd test ; python -u alltests.py |
|
|
|
|
|
* Add a directory X.Y.Z (where X.Y.Z is the current version number |
|
|
of Docutils) in the webroot (i.e. the ``htdocs/`` directory). |
|
|
Put all documentation files into it:: |
|
|
|
|
|
cd docutils-X.Y.Z |
|
|
rm -rf build |
|
|
cd tools/ |
|
|
./buildhtml.py .. |
|
|
cd .. |
|
|
find -name test -type d -prune -o -name \*.css -print0 \ |
|
|
-o -name \*.html -print0 -o -name \*.txt -print0 \ |
|
|
| tar -cjvf docutils-docs.tar.bz2 -T - --null |
|
|
scp docutils-docs.tar.bz2 <username>@shell.sourceforge.net: |
|
|
|
|
|
Now log in to shell.sourceforge.net and:: |
|
|
|
|
|
cd /home/groups/d/do/docutils/htdocs/ |
|
|
mkdir -m g+rwxs X.Y.Z |
|
|
cd X.Y.Z |
|
|
tar -xjvf ~/docutils-docs.tar.bz2 |
|
|
rm ~/docutils-docs.tar.bz2 |
|
|
|
|
|
* Upload the release tarball, release.sh tries with scp. |
|
|
|
|
|
* Access the _`file release system` on SourceForge (Admin |
|
|
interface). |
|
|
|
|
|
``https://sourceforge.net/projects/docutils/files/docutils/`` |
|
|
|
|
|
* change into the released version's directory |
|
|
* click ``(i)`` button of the tar.gz-file |
|
|
* select as default download for all operating systems. |
|
|
|
|
|
* Submit a notification on project news. |
|
|
|
|
|
* For verifying the integrity of the release, download the release |
|
|
tarball (you may need to wait up to 30 minutes), install_ it, and |
|
|
re-run the `test suite`_. |
|
|
|
|
|
* Register with PyPI (``python setup.py register``). |
|
|
|
|
|
Set the download-url so eggs can access older releases. |
|
|
|
|
|
* Restore ``__version_details__`` in docutils/docutils/__init__.py to |
|
|
"repository" (from "release"). |
|
|
|
|
|
* Bump the `version number`_ again. |
|
|
|
|
|
* Add a new empty section "Changes Since ..." in HISTORY.txt. |
|
|
|
|
|
* Update the web page (web/index.txt). |
|
|
|
|
|
* Run docutils-update on the server. |
|
|
|
|
|
* **Run alltests.py with svn version** |
|
|
|
|
|
* **build wheels**:: |
|
|
|
|
|
pip wheel docutils |
|
|
pip3 wheel docutils |
|
|
|
|
|
This builds wheels_ (`pure Python wheels`_ for Python 2 and 3 |
|
|
respectively) by downloading the new release from pypi. |
|
|
|
|
|
`Upload the wheels to PyPI`_. |
|
|
|
|
|
Question: |
|
|
Can we have an tar.gz (distutil) and a py2-wheel and a py3-wheel |
|
|
on pypi and will installers select the correct files? |
|
|
|
|
|
2017-06-09 it seems to according to experience with 0.13.1. |
|
|
|
|
|
.. _wheels: https://packaging.python.org/en/latest/distributing.html#wheels |
|
|
.. _pure Python wheels: |
|
|
https://packaging.python.org/en/latest/distributing.html#pure-python-wheels |
|
|
.. _Upload the wheels to PyPI: |
|
|
https://packaging.python.org/en/latest/distributing.html#upload-your-distributions |
|
|
|
|
|
* **Send announcement email to:** |
|
|
|
|
|
* docutils-develop@lists.sourceforge.net (also announcing the end of |
|
|
the check-in freeze) |
|
|
* docutils-users@lists.sourceforge.net |
|
|
* doc-sig@python.org |
|
|
* python-announce@python.org |
|
|
|
|
|
* **Add a `SourceForge News item`__, with title "Docutils X.Y.Z released"** |
|
|
|
|
|
__ https://sourceforge.net/p/docutils/news |
|
|
|
|
|
**Mark as default download for all platforms.** |
|
|
|
|
|
* **Register with freecode.** Add a new release for the |
|
|
`Docutils project`__. (freecode is freshmeat.net's new name) |
|
|
|
|
|
__ http://freecode.com/projects/docutils/ |
|
|
|
|
|
|
|
|
.. |
|
|
Local Variables: |
|
|
mode: indented-text |
|
|
indent-tabs-mode: nil |
|
|
sentence-end-double-space: t |
|
|
fill-column: 70 |
|
|
End:
|
|
|
|