Release Process
===============

This page is for Authlib maintainers. It describes how to publish a new
version. It assumes push access to the ``authlib/authlib`` repository. To add
a changelog entry to a pull request, see :doc:`contribute`.

1. Set the new version in ``authlib/consts.py``:

   .. code-block:: python

       version = "1.9.1"

2. Collect the changelog fragments::

       uv run scriv collect

   scriv reads the version from ``authlib/consts.py``. It adds a
   ``Version 1.9.1 — <date>`` entry to :doc:`../upgrades/changelog` and deletes
   the fragments in ``changelog.d``. It stops with an error when the changelog
   already has an entry for this version.

3. Review the new entry in ``docs/upgrades/changelog.rst``, and edit it if
   needed.

4. Commit the version, the changelog and the deleted fragments::

       git add authlib/consts.py docs/upgrades/changelog.rst changelog.d
       git commit -m "chore: release 1.9.1"

5. Tag the commit and push both to ``authlib/authlib``::

       git tag v1.9.1
       git push <remote> main v1.9.1

The ``v1.*`` tag starts the "Release to PyPI" workflow. It builds the
distribution files, publishes them to PyPI through the ``pypi-release``
environment, and creates the GitHub release. The release notes start with a
link to the changelog entry, followed by the notes generated by GitHub.
