.. vim: set fileencoding=utf-8:
.. -*- coding: utf-8 -*-
.. +--------------------------------------------------------------------------+
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| |
+--------------------------------------------------------------------------+
*******************************************************************************
Releases
*******************************************************************************
The project follows `semantic versioning `_ for releases.
Release Process
===============================================================================
Initial Release Candidate
-------------------------------------------------------------------------------
1. Checkout ``master`` branch.
2. Pull from upstream to ensure all changes have been synced.
3. Checkout new release branch: ``release-.``.
4. Bump alpha to release candidate. Commit.
::
hatch version rc
5. Tag.
::
git tag v${rc_version}
6. Push release branch and tag to upstream with tracking enabled.
7. Checkout ``master`` branch.
8. Bump alpha to next minor version on ``master`` branch. Commit.
::
hatch version minor,alpha
9. Tag start of development for next release.
::
git tag i${next_release_version}
Release
-------------------------------------------------------------------------------
1. Checkout release branch.
2. Bump release candidate to release. Commit.
::
hatch version release
3. Run Towncrier. Commit.
::
hatch --env develop run towncrier build --keep --version ${release_version}
4. Tag.
::
git tag v${release_version}
5. Push release branch and tag to upstream.
6. Wait for the release workflow to complete successfully.
7. Clean up news fragments to prevent recycling in future releases. Commit.
::
git rm .auxiliary/data/towncrier/*.rst
git commit -m "Clean up news fragments."
8. Push cleanup commit to upstream.
9. Cherry-pick Towncrier commits back to ``master`` branch.
Postrelease Patch
-------------------------------------------------------------------------------
1. Checkout release branch.
2. Develop and test patch against branch. Add Towncrier entry. Commit.
3. Bump release to patch or increment patch number. Commit.
::
hatch version patch
4. Run Towncrier. Commit.
::
hatch --env develop run towncrier build --keep --version ${patch_version}
5. Tag.
::
git tag v${patch_version}
6. Push release branch and tag to upstream.
7. Wait for the release workflow to complete successfully.
8. Clean up news fragments to prevent recycling in future releases. Commit.
::
git rm .auxiliary/data/towncrier/*.rst
git commit -m "Clean up news fragments."
9. Push cleanup commit to upstream.
10. Cherry-pick patch and Towncrier commits back to ``master`` branch,
resolving conflicts as necessary.
Changelog Entries
===============================================================================
The project uses `Towncrier `_ to
manage its changelog. When making changes that should be noted in the
changelog, add a file ("fragment") to the ``.auxiliary/data/towncrier``
directory with of ``..rst``, for changes with a Github
issue, or ``+..rst``, for changes without an associated issue
number.
The entries will be collected and organized when a release is made, as
described in the release process sections above.
Available Types
-------------------------------------------------------------------------------
* ``enhance``: features and other improvements (documentation, platform
support, etc...)
* ``notify``: deprecations and other notices
* ``remove``: removals of feature or platform support
* ``repair``: bug fixes
Format
-------------------------------------------------------------------------------
The file should contain a concise description of the change written in present
tense. For example:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/+immutable-modules.enhance.rst
Add support for immutable module reclassification.
The description should:
* Start with a capital letter.
* End with a period.
* For multi-component or multi-faceted projects, a topic followed by colon may
be used to introduce the content. (E.g., "Github Actions: ", "Copier
Template: ").
* Use present tense verbs in the imperative/subjunctive mood (e.g., "Add",
"Fix", "Update") or simple noun phrases (e.g., "Support for ") in the
introductory sentence.
* If explanatory content is necessary, then it may be provided in the
indicative mood using whatever verb tense is most natural to provide
historical context or other rationale.
* Focus on the what and why, not the how.
* Be understandable by users, not just developers.
* Acknowledge contributors.
Examples
-------------------------------------------------------------------------------
Enhance:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/457.enhance.rst
Improve release process documentation with Towncrier details.
Enhance:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/458.enhance.rst
Add recursive module reclassification support.
Enhance:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/459.enhance.rst
Support for Python 3.13.
Notice:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/+exceptions.notify.rst
Deprecate ``OvergeneralException``. Package now raises more specific
exceptions.
Remove:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/460.remove.rst
Remove deprecated ``make_immutable`` function.
Repair:
.. code-block:: rst
:caption: .auxiliary/data/towncrier/456.repair.rst
Fix attribute visibility in immutable modules.