You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.6 KiB
136 lines
4.6 KiB
On version numbers
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
The version number must be a valid `PEP 440
|
|
<https://www.python.org/dev/peps/pep-0440>`_ version number.
|
|
|
|
For example:
|
|
|
|
.. code-block:: C++
|
|
|
|
#define PYBIND11_VERSION_MAJOR X
|
|
#define PYBIND11_VERSION_MINOR Y
|
|
#define PYBIND11_VERSION_MICRO Z
|
|
#define PYBIND11_VERSION_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA
|
|
#define PYBIND11_VERSION_RELEASE_SERIAL 0
|
|
#define PYBIND11_VERSION_PATCH Za0
|
|
|
|
For beta, ``PYBIND11_VERSION_PATCH`` should be ``Zb1``. RC's can be ``Zrc1``.
|
|
For a final release, this must be a simple integer.
|
|
|
|
|
|
To release a new version of pybind11:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
If you don't have nox, you should either use ``pipx run nox`` instead, or use
|
|
``uv tool install nox``, ``pipx install nox``, or ``brew install nox`` (Unix).
|
|
|
|
- Update the version number
|
|
|
|
- Update ``PYBIND11_VERSION_MAJOR`` etc. in
|
|
``include/pybind11/detail/common.h``. MICRO should be a simple integer.
|
|
|
|
- Run ``nox -s tests_packaging`` to ensure this was done correctly.
|
|
|
|
- Ensure that all the information in ``pyproject.toml`` is up-to-date, like
|
|
supported Python versions.
|
|
|
|
- Add release date in ``docs/changelog.md`` and integrate the output of
|
|
``nox -s make_changelog``.
|
|
|
|
- Note that the ``nox -s make_changelog`` command inspects
|
|
`needs changelog <https://github.com/pybind/pybind11/pulls?q=is%3Apr+is%3Aclosed+label%3A%22needs+changelog%22>`_.
|
|
|
|
- Manually clear the ``needs changelog`` labels using the GitHub web
|
|
interface (very easy: start by clicking the link above).
|
|
|
|
- ``git add`` and ``git commit``, ``git push``. **Ensure CI passes**. (If it
|
|
fails due to a known flake issue, either ignore or restart CI.)
|
|
|
|
- Add a release branch if this is a new MINOR version, or update the existing
|
|
release branch if it is a patch version
|
|
|
|
- NOTE: This documentation assumes your ``upstream`` is ``https://github.com/pybind/pybind11.git``
|
|
|
|
- New branch: ``git checkout -b vX.Y``, ``git push -u upstream vX.Y``
|
|
|
|
- Update branch: ``git checkout vX.Y``, ``git merge <release branch>``, ``git push``
|
|
|
|
- Update tags (optional; if you skip this, the GitHub release makes a
|
|
non-annotated tag for you)
|
|
|
|
- ``git tag -a vX.Y.Z -m 'vX.Y.Z release'``
|
|
|
|
- ``git grep PYBIND11_VERSION include/pybind11/detail/common.h``
|
|
|
|
- Last-minute consistency check: same as tag?
|
|
|
|
- Push the new tag: ``git push upstream vX.Y.Z``
|
|
|
|
- Update stable
|
|
|
|
- ``git checkout stable``
|
|
|
|
- ``git merge -X theirs vX.Y.Z``
|
|
|
|
- ``git diff vX.Y.Z``
|
|
|
|
- Carefully review and reconcile any diffs. There should be none.
|
|
|
|
- ``git push``
|
|
|
|
- Make a GitHub release (this shows up in the UI, sends new release
|
|
notifications to users watching releases, and also uploads PyPI packages).
|
|
(Note: if you do not use an existing tag, this creates a new lightweight tag
|
|
for you, so you could skip the above step.)
|
|
|
|
- GUI method: Under `releases <https://github.com/pybind/pybind11/releases>`_
|
|
click "Draft a new release" on the far right, fill in the tag name
|
|
(if you didn't tag above, it will be made here), fill in a release name
|
|
like "Version X.Y.Z", and copy-and-paste the markdown-formatted (!) changelog
|
|
into the description. You can remove line breaks and optionally strip links
|
|
to PRs and issues, e.g. to a bare ``#1234`` without the hyperlink markup.
|
|
Check "pre-release" if this is an alpha/beta/RC.
|
|
|
|
- CLI method: with ``gh`` installed, run ``gh release create vX.Y.Z -t "Version X.Y.Z"``
|
|
If this is a pre-release, add ``-p``.
|
|
|
|
- Get back to work
|
|
|
|
- Make sure you are on master, not somewhere else: ``git checkout master``
|
|
|
|
- Update version macros in ``include/pybind11/detail/common.h`` (set PATCH to
|
|
``0a0`` and increment MINOR).
|
|
|
|
- Update ``pybind11/_version.py`` to match.
|
|
|
|
- Run ``nox -s tests_packaging`` to ensure this was done correctly.
|
|
|
|
- If the release was a new MINOR version, add a new ``IN DEVELOPMENT``
|
|
section in ``docs/changelog.md``.
|
|
|
|
- ``git add``, ``git commit``, ``git push``
|
|
|
|
If a version branch is updated, remember to set PATCH to ``1a0``.
|
|
|
|
Conda-forge should automatically make a PR in a few hours, and automatically
|
|
merge it if there are no issues. Homebrew should be automatic, too.
|
|
|
|
|
|
Manual packaging
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
If you need to manually upload releases, you can download the releases from
|
|
the job artifacts and upload them with twine. You can also make the files
|
|
locally (not recommended in general, as your local directory is more likely
|
|
to be "dirty" and SDists love picking up random unrelated/hidden files);
|
|
this is the procedure:
|
|
|
|
.. code-block:: bash
|
|
|
|
nox -s build
|
|
nox -s build_global
|
|
twine upload dist/*
|
|
|
|
This makes SDists and wheels, and the final line uploads them.
|