Releasing
=========

- For clarity, we define releases as follows.

  - Alpha, beta, dev and similar statuses do not qualify whether a release is
    major or minor. The term "pre-release" means alpha, beta, or dev.

  - A release is final when it is no longer pre-release.

  - A *major* release is where the first number either before or after the
    first dot increases. Examples: 1.0 to 1.1a1, or 0.9 to 1.0.

  - A *minor* or *bug fix* release is where the number after the second dot
    increases. Example: 1.0 to 1.0.1.

Prepare new release
-------------------

- Do platform test via tox:

  $ tox -r

  Make sure statement coverage is at 100% (the test run will fail if not).

- Run tests on Windows if feasible.

- Ensure all features of the release are documented (audit CHANGES.txt or
  communicate with contributors).

- Change CHANGES.txt heading to reflect the new version number.

- Minor releases should include a link under "Bug Fix Releases" to the minor
  feature changes in CHANGES.txt.

- Change setup.py version to the release version number.

- Make sure PyPI long description renders (requires ``readme_renderer``
  installed into your Python)::

  $ python setup.py check -r -s -m

- Create a release tag.

- Make sure your Python has ``setuptools-git``, ``twine``, and ``wheel``
  installed and release to PyPI::

  $ python setup.py sdist bdist_wheel
  $ twine upload dist/waitress-X.X-*


Prepare main for further development (major releases only)
----------------------------------------------------------

- In CHANGES.txt, preserve headings but clear out content. Add heading
  "unreleased" for the version number.

- Forward port the changes in CHANGES.txt to HISTORY.txt.

- Change setup.py version to the next version number.


Marketing and communications
----------------------------

- Check `https://wiki.python.org/moin/WebServers
  <https://wiki.python.org/moin/WebServers>`_.

- Announce to Twitter.

```
waitress 1.x released.

PyPI
https://pypi.org/project/waitress/1.x/

=== One time only for new version, first pre-release ===
What's New
https://docs.pylonsproject.org/projects/waitress/en/latest/#id2
=== For all subsequent pre-releases ===
Changes
https://docs.pylonsproject.org/projects/waitress/en/latest/#change-history

Documentation:
https://docs.pylonsproject.org/projects/waitress/en/latest/

Issues
https://github.com/Pylons/waitress/issues
```

- Announce to maillist.

```
waitress 1.X.X has been released.

The full changelog is here:
https://docs.pylonsproject.org/projects/waitress/en/latest/#change-history

What's New In waitress 1.X:
https://docs.pylonsproject.org/projects/waitress/en/latest/#id2

Documentation:
https://docs.pylonsproject.org/projects/waitress/en/latest/

You can install it via PyPI:

  pip install waitress==1.X

Enjoy, and please report any issues you find to the issue tracker at
https://github.com/Pylons/waitress/issues

Thanks!

- waitress core developers
```
