release.rst 4.31 KB
Newer Older
Henry Schreiner's avatar
Henry Schreiner committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
On version numbers
^^^^^^^^^^^^^^^^^^

The two version numbers (C++ and Python) must match when combined (checked when
you build the PyPI package), and must be a valid `PEP 440
<https://www.python.org/dev/peps/pep-0440>`_ version when combined.

For example:

.. code-block:: C++

    #define PYBIND11_VERSION_MAJOR X
    #define PYBIND11_VERSION_MINOR Y
    #define PYBIND11_VERSION_PATCH Z.dev1

For beta, ``PYBIND11_VERSION_PATCH`` should be ``Z.b1``. RC's can be ``Z.rc1``.
Always include the dot (even though PEP 440 allows it to be dropped). For a
Henry Schreiner's avatar
Henry Schreiner committed
18
19
final release, this must be a simple integer. There is also a HEX version of
the version just below.
Henry Schreiner's avatar
Henry Schreiner committed
20
21


22
To release a new version of pybind11:
Henry Schreiner's avatar
Henry Schreiner committed
23
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24

25
26
27
If you don't have nox, you should either use ``pipx run nox`` instead, or use
``pipx install nox`` or ``brew install nox`` (Unix).

Henry Schreiner's avatar
Henry Schreiner committed
28
- Update the version number
Henry Schreiner's avatar
Henry Schreiner committed
29
30
31
32
    - Update ``PYBIND11_VERSION_MAJOR`` etc. in
      ``include/pybind11/detail/common.h``. PATCH should be a simple integer.
    - Update the version HEX just below, as well.
    - Update ``pybind11/_version.py`` (match above)
33
    - Run ``nox -s tests_packaging`` to ensure this was done correctly.
Henry Schreiner's avatar
Henry Schreiner committed
34
35
36
37
38
39
40
41
    - Ensure that all the information in ``setup.cfg`` is up-to-date, like
      supported Python versions.
    - Add release date in ``docs/changelog.rst``.
          - Check to make sure
            `needs-changelog <https://github.com/pybind/pybind11/pulls?q=is%3Apr+is%3Aclosed+label%3A%22needs+changelog%22>`_
            issues are entered in the changelog (clear the label when done).
    - ``git add`` and ``git commit``, ``git push``. **Ensure CI passes**. (If it
      fails due to a known flake issue, either ignore or restart CI.)
42
- Add a release branch if this is a new minor version, or update the existing release branch if it is a patch version
Henry Schreiner's avatar
Henry Schreiner committed
43
44
    - New branch: ``git checkout -b vX.Y``, ``git push -u origin vX.Y``
    - Update branch: ``git checkout vX.Y``, ``git merge <release branch>``, ``git push``
Henry Schreiner's avatar
Henry Schreiner committed
45
- Update tags (optional; if you skip this, the GitHub release makes a
Henry Schreiner's avatar
Henry Schreiner committed
46
47
48
    non-annotated tag for you)
    - ``git tag -a vX.Y.Z -m 'vX.Y.Z release'``.
    - ``git push --tags``.
Henry Schreiner's avatar
Henry Schreiner committed
49
50
51
- Update stable
    - ``git checkout stable``
    - ``git merge master``
52
    - ``git push``
Henry Schreiner's avatar
Henry Schreiner committed
53
54
55
- 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
56
57
58
59
60
61
62
  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 (usually ``cat docs/changelog.rst | pandoc -f rst -t gfm``).
      Check "pre-release" if this is a beta/RC.
Henry Schreiner's avatar
Henry Schreiner committed
63
64
    - 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``.
Henry Schreiner's avatar
Henry Schreiner committed
65

Sylvain Corlay's avatar
Sylvain Corlay committed
66
- Get back to work
Henry Schreiner's avatar
Henry Schreiner committed
67
68
69
70
    - Make sure you are on master, not somewhere else: ``git checkout master``
    - Update version macros in ``include/pybind11/detail/common.h`` (set PATCH to
      ``0.dev1`` and increment MINOR).
    - Update ``_version.py`` to match
71
    - Run ``nox -s tests_packaging`` to ensure this was done correctly.
Henry Schreiner's avatar
Henry Schreiner committed
72
73
    - Add a spot for in-development updates in ``docs/changelog.rst``.
    - ``git add``, ``git commit``, ``git push``
Henry Schreiner's avatar
Henry Schreiner committed
74
75
76

If a version branch is updated, remember to set PATCH to ``1.dev1``.

77
78
If you'd like to bump homebrew, run:

79
.. code-block:: console
80
81
82
83
84
85

    brew bump-formula-pr --url https://github.com/pybind/pybind11/archive/vX.Y.Z.tar.gz

Conda-forge should automatically make a PR in a few hours, and automatically
merge it if there are no issues.

Henry Schreiner's avatar
Henry Schreiner committed
86
87
88
89
90
91
92
93

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

94
    nox -s build
Henry Schreiner's avatar
Henry Schreiner committed
95
96
97
    twine upload dist/*

This makes SDists and wheels, and the final line uploads them.