release.rst 3.68 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
18
19
20
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
final release, this must be a simple integer.


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

Henry Schreiner's avatar
Henry Schreiner committed
24
25
26
27
- Update the version number
  - Update ``PYBIND11_VERSION_MAJOR`` etc. in
    ``include/pybind11/detail/common.h``. PATCH should be a simple integer.
  - Update ``pybind11/_version.py`` (match above)
28
29
  - Ensure that all the information in ``setup.cfg`` is up-to-date, like
    supported Python versions.
Henry Schreiner's avatar
Henry Schreiner committed
30
  - Add release date in ``docs/changelog.rst``.
31
32
33
      - 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).
Henry Schreiner's avatar
Henry Schreiner committed
34
35
36
37
  - ``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
  - ``git checkout -b vX.Y``, ``git push -u origin vX.Y``
Henry Schreiner's avatar
Henry Schreiner committed
38
39
- Update tags (optional; if you skip this, the GitHub release makes a
  non-annotated tag for you)
Henry Schreiner's avatar
Henry Schreiner committed
40
41
42
43
44
  - ``git tag -a vX.Y.Z -m 'vX.Y.Z release'``.
  - ``git push --tags``.
- Update stable
    - ``git checkout stable``
    - ``git merge master``
45
    - ``git push``
Henry Schreiner's avatar
Henry Schreiner committed
46
47
48
49
50
- 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: click "Create a new release" on the far right, fill in the tag
Henry Schreiner's avatar
Henry Schreiner committed
51
52
53
54
    name (if you didn't tag above, it will be made here), fill in a release
    name like "Version X.Y.Z", and optionally copy-and-paste the changelog into
    the description (processed as markdown by Pandoc). Check "pre-release" if
    this is a beta/RC.
Henry Schreiner's avatar
Henry Schreiner committed
55
56
57
  - 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``.

Sylvain Corlay's avatar
Sylvain Corlay committed
58
- Get back to work
Henry Schreiner's avatar
Henry Schreiner committed
59
  - Make sure you are on master, not somewhere else: ``git checkout master``
60
  - Update version macros in ``include/pybind11/detail/common.h`` (set PATCH to
Henry Schreiner's avatar
Henry Schreiner committed
61
62
    ``0.dev1`` and increment MINOR).
  - Update ``_version.py`` to match
63
  - Add a spot for in-development updates in ``docs/changelog.rst``.
Henry Schreiner's avatar
Henry Schreiner committed
64
65
66
67
  - ``git add``, ``git commit``, ``git push``

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

68
69
70
71
72
73
74
75
76
If you'd like to bump homebrew, run:

.. code-block::

    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
77
78
79
80
81
82
83
84
85
86
87
88
89
90

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

    python3 -m pip install build
    python3 -m build
    PYBIND11_SDIST_GLOBAL=1 python3 -m build
    twine upload dist/*

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