- Wheel and sdist package published on `PyPI Twisted project <https://pypi.org/project/Twisted/>`_.
- Updated documentation (API & howtos) on `Twisted Read The Docs <https://twisted.readthedocs.io/en/latest/>`_
- Updated documentation (API & howtos) on `Twisted Read The Docs <https://docs.twistedmatrix.com/>`_ for `stable` and `$RELEASE` versions.
- Announcement email sent to Twisted main list
- A `GitHub Release <https://github.com/twisted/twisted/releases>`_ with the associated tag in our Git repository
@ -26,6 +26,23 @@ To release Twisted, you will need:
- Commit privileges to Twisted GitHub repository.
Dependencies
------------
Below is the list of moving parts and web services used by the release process.
For day to day operation, you should not need management access to them.
If things go wrong, you should be aware of them and get administration access.
* Release tag is automatically created via the GitHub Release GUI.
* PyPi file publishing is done via GitHub Actions workflow when a tag is created.
Any Twisted contributor in GitHub should have access to modify the workflow.
* docs.twistedmatrix.com is a CNAME and you will need access to Twisted DNS server to modify it.
* Documentation is published via `Read The Docs Twisted project <https://readthedocs.org/dashboard/twisted/edit/>`_.
There is an `automated rule <https://readthedocs.org/dashboard/twisted/rules/regex/1057/>` to activate the documentation for every tag matching ``^twisted-\d+\.\d+\.\d+$`` (release candidates are excluded)
From RTD `Advanced Settings <https://readthedocs.org/dashboard/twisted/advanced/>`_ the branch named `stable` is configured as the default branch.
There is also a "active" documentation version for the branch named `stable`.
Version numbers
---------------
@ -69,28 +86,38 @@ To release Twisted, we
Prepare for a release
---------------------
#. Check for any regressions using `Trac regression report <https://twistedmatrix.com/trac/report/26>`_
#. Check for any regressions using `Trac regression report <https://twistedmatrix.com/trac/report/26>`_
#. Any regression should be fixed and merged trunk before making the release branch
#. Any regression should be fixed and merged into trunk before making the release branch
#. Choose a version number.
$RELEASE will be something like 21.7.0 for a major release.
$RELEASE will be something like 21.7.1 for a bugfix release.
#. File a ticket in Trac called "Release $RELEASE" and assign it to yourself.
#. Make a branch for the release and include the ticket number in the name (4290 is Trac ticket ID):
#. Make a branch for the release.
It's very important to use `release-$RELEASE-$TRAC_ID` as the branch name (4290 is Trac ticket ID, 21.7.0 is the release number) as this is used as a hint for CI:
- ``git fetch origin``
- ``git checkout origin/trunk``
- ``git checkout -b release-$RELEASE-4290``
- ``git checkout -b release-21.7.0-4290``
How to do a release candidate
-----------------------------
This section describes the steps and requirements for creating the first release candidate.
Prepare the branch
~~~~~~~~~~~~~~~~~~
#. Check that all the CI tests on the main branch (trunk) pass.
Failing tests on the main branch should be considered release blocker.
They should be fixed in separate ticket/PR.
The release can continue once the main branch is green again.
#. In your Git repo, fetch and check out the new release branch.
#. Run ``python -m incremental.update Twisted --rc``
#. Commit the changes made by Incremental.
@ -99,13 +126,31 @@ Prepare the branch
#. Bump copyright dates in ``LICENSE``, ``src/twisted/copyright.py``, and ``README.rst`` if required
#. Push the changes up to GitHub and create a new release PR.
#. The GitHub PR is dedicated to the final release and the same PR is used to release the candidate and final version.
#. Wait for all the PR checks to pass.
#. If a check fails investigate it.
If is just a flaky tests, retry the run.
Any serious error should be considered a blocker and should be
fixed in a separate ticket/PR.
Avoid making non-release changes (even minor one) as part of the release branch.
#. Use the `GitHub Create Release UI <https://github.com/twisted/twisted/releases/new>`_ the make a new release.
#. Create a tag using the format `twisted-VERSION` based on the latest commit on the release branch that was approved after the review.
#. Create a tag using the format `twisted-VERSION` based on the latest commit on the release branch.
#. Use `Twisted VERSION` as the name of the release.
#. Add the release NEWS to GitHub Release page.
#. Make sure 'This is a pre-release` is checked.
#. Github Actions will upload the dist to PyPI when a new tag is pushed to the repo.
#. Read the Docs hooks will publish a new version of the docs.
#. You can check the status of the automatic upload via `GitHub Action <https://github.com/twisted/twisted/actions/workflows/test.yaml?query=event%3Apush>`_
#. Read the Docs hooks not have version for the release candidate.
Use the Read the Docs published for the pull request.
#. The review for the PR will be requested after the files are on PyPI so that a full review and manual test can be done.
#. Most probably there will be some minor comments received via email or GitHub regarding the final content of the release notes.
It's OK to make those changes as part of the release branch.
It's OK to update the text of the candidate release notes,
in the final NEWS file the release candidate version is removed and replaced with the final version.
No need for a new ticket or separate pull request.
These changes will be reviewed as part of the final release review process.
#. While the final public release is not made and the release tag created
the release branch will not be kept up to date with trunk.
Announce
~~~~~~~~
@ -114,36 +159,48 @@ Announce
#. Announce the release candidate on
- the twisted-python mailing list by sending the content of latest release NEWS
- on IRC in the ``#twisted-dev`` topic by sending the version number
- the twisted-python mailing list by sending the an email with the subject: Twisted $RELEASE Pre-Release Announcement
- on IRC in the ``#twisted-dev`` topic by sending the version number or pip install command
The release candidate announcement might mention the important changes since the last release, and ask readers to test this release candidate.
Here's what the $RELEASErc1 release announcement might look like::
Here's what the $RELEASE release candidate announcement might look like::
Live from PyCon Atlanta, I'm pleased to herald the approaching
footsteps of the $API release.
On behalf of the Twisted contributors I announce the release candidate of Twisted $RELEASE
Wheels for Twisted $RELEASE release candidate are now available on PyPI.
Short summary of the release.
For example:
Python 3.5 is no longer a supported platform.
The minimum supported platform is Python 3.6.7.
Highlights include:
* Improved documentation, including "Twisted Web in 60 seconds"
The notable changes are:
* Faster Perspective Broker applications
* Mention the main new features.
* As well as important bug fixes
* Or deprecation/removals
* A new Windows installer that ships without zope.interface
The release and NEWS file is available for review at