mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 06:35:12 +00:00
ci: releases (#2530)
* ci: releases * docs: minor update form @wjakob * fix: enforce reasonable version of setuptools
This commit is contained in:
parent
d159a56338
commit
82dbc5b78f
54
.github/workflows/configure.yml
vendored
54
.github/workflows/configure.yml
vendored
@ -82,57 +82,3 @@ jobs:
|
|||||||
working-directory: build dir
|
working-directory: build dir
|
||||||
if: github.event_name == 'workflow_dispatch'
|
if: github.event_name == 'workflow_dispatch'
|
||||||
run: cmake --build . --config Release --target check
|
run: cmake --build . --config Release --target check
|
||||||
|
|
||||||
# This builds the sdists and wheels and makes sure the files are exactly as
|
|
||||||
# expected. Using Windows and Python 2.7, since that is often the most
|
|
||||||
# challenging matrix element.
|
|
||||||
test-packaging:
|
|
||||||
name: 🐍 2.7 • 📦 tests • windows-latest
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup 🐍 2.7
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: 2.7
|
|
||||||
|
|
||||||
- name: Prepare env
|
|
||||||
run: python -m pip install -r tests/requirements.txt --prefer-binary
|
|
||||||
|
|
||||||
- name: Python Packaging tests
|
|
||||||
run: pytest tests/extra_python_package/
|
|
||||||
|
|
||||||
|
|
||||||
# This runs the packaging tests and also builds and saves the packages as
|
|
||||||
# artifacts.
|
|
||||||
packaging:
|
|
||||||
name: 🐍 3.8 • 📦 & 📦 tests • ubuntu-latest
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup 🐍 3.8
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: 3.8
|
|
||||||
|
|
||||||
- name: Prepare env
|
|
||||||
run: python -m pip install -r tests/requirements.txt build twine --prefer-binary
|
|
||||||
|
|
||||||
- name: Python Packaging tests
|
|
||||||
run: pytest tests/extra_python_package/
|
|
||||||
|
|
||||||
- name: Build SDist and wheels
|
|
||||||
run: |
|
|
||||||
python -m build -s -w .
|
|
||||||
PYBIND11_GLOBAL_SDIST=1 python -m build -s -w .
|
|
||||||
|
|
||||||
- name: Check metadata
|
|
||||||
run: twine check dist/*
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
path: dist/*
|
|
||||||
|
89
.github/workflows/pip.yml
vendored
Normal file
89
.github/workflows/pip.yml
vendored
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
name: Pip
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- stable
|
||||||
|
- v*
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# This builds the sdists and wheels and makes sure the files are exactly as
|
||||||
|
# expected. Using Windows and Python 2.7, since that is often the most
|
||||||
|
# challenging matrix element.
|
||||||
|
test-packaging:
|
||||||
|
name: 🐍 2.7 • 📦 tests • windows-latest
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup 🐍 2.7
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: 2.7
|
||||||
|
|
||||||
|
- name: Prepare env
|
||||||
|
run: python -m pip install -r tests/requirements.txt --prefer-binary
|
||||||
|
|
||||||
|
- name: Python Packaging tests
|
||||||
|
run: pytest tests/extra_python_package/
|
||||||
|
|
||||||
|
|
||||||
|
# This runs the packaging tests and also builds and saves the packages as
|
||||||
|
# artifacts.
|
||||||
|
packaging:
|
||||||
|
name: 🐍 3.8 • 📦 & 📦 tests • ubuntu-latest
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup 🐍 3.8
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: 3.8
|
||||||
|
|
||||||
|
- name: Prepare env
|
||||||
|
run: python -m pip install -r tests/requirements.txt build twine --prefer-binary
|
||||||
|
|
||||||
|
- name: Python Packaging tests
|
||||||
|
run: pytest tests/extra_python_package/
|
||||||
|
|
||||||
|
- name: Build SDist and wheels
|
||||||
|
run: |
|
||||||
|
python -m build
|
||||||
|
PYBIND11_GLOBAL_SDIST=1 python -m build
|
||||||
|
|
||||||
|
- name: Check metadata
|
||||||
|
run: twine check dist/*
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
path: dist/*
|
||||||
|
|
||||||
|
|
||||||
|
# When a GitHub release is made, upload the artifacts to PyPI
|
||||||
|
upload:
|
||||||
|
name: Upload to PyPI
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'release' && github.event.action == 'published'
|
||||||
|
needs: [packaging]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
|
||||||
|
- uses: actions/download_artifacts@v2
|
||||||
|
with:
|
||||||
|
path: dist
|
||||||
|
name: artifact
|
||||||
|
|
||||||
|
- uses: pypa/gh-action-pypi-publish@v1.3.1
|
||||||
|
with:
|
||||||
|
user: __token__
|
||||||
|
password: ${{ secrets.pypi_password }}
|
@ -53,7 +53,7 @@ repos:
|
|||||||
|
|
||||||
# CMake formatting
|
# CMake formatting
|
||||||
- repo: https://github.com/cheshirekow/cmake-format-precommit
|
- repo: https://github.com/cheshirekow/cmake-format-precommit
|
||||||
rev: v0.6.11
|
rev: v0.6.13
|
||||||
hooks:
|
hooks:
|
||||||
- id: cmake-format
|
- id: cmake-format
|
||||||
additional_dependencies: [pyyaml]
|
additional_dependencies: [pyyaml]
|
||||||
@ -62,7 +62,7 @@ repos:
|
|||||||
|
|
||||||
# Checks the manifest for missing files (native support)
|
# Checks the manifest for missing files (native support)
|
||||||
- repo: https://github.com/mgedmin/check-manifest
|
- repo: https://github.com/mgedmin/check-manifest
|
||||||
rev: "0.42"
|
rev: "0.43"
|
||||||
hooks:
|
hooks:
|
||||||
- id: check-manifest
|
- id: check-manifest
|
||||||
# This is a slow hook, so only run this if --hook-stage manual is passed
|
# This is a slow hook, so only run this if --hook-stage manual is passed
|
||||||
|
@ -1,21 +1,75 @@
|
|||||||
To release a new version of pybind11:
|
On version numbers
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Update the version number and push to pypi
|
The two version numbers (C++ and Python) must match when combined (checked when
|
||||||
- Update ``pybind11/_version.py`` (set release version, remove 'dev').
|
you build the PyPI package), and must be a valid `PEP 440
|
||||||
- Update ``PYBIND11_VERSION_MAJOR`` etc. in ``include/pybind11/detail/common.h``.
|
<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.
|
||||||
|
|
||||||
|
|
||||||
|
To release a new version of pybind11:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- 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)
|
||||||
- Ensure that all the information in ``setup.py`` is up-to-date.
|
- Ensure that all the information in ``setup.py`` is up-to-date.
|
||||||
- Update version in ``docs/conf.py``.
|
- Add release date in ``docs/changelog.rst``.
|
||||||
- Tag release date in ``docs/changelog.rst``.
|
- ``git add`` and ``git commit``, ``git push``. **Ensure CI passes**. (If it
|
||||||
- ``git add`` and ``git commit``.
|
fails due to a known flake issue, either ignore or restart CI.)
|
||||||
- if new minor version: ``git checkout -b vX.Y``, ``git push -u origin vX.Y``
|
- Add a release branch if this is a new minor version
|
||||||
|
- ``git checkout -b vX.Y``, ``git push -u origin vX.Y``
|
||||||
|
- Update tags
|
||||||
- ``git tag -a vX.Y.Z -m 'vX.Y.Z release'``.
|
- ``git tag -a vX.Y.Z -m 'vX.Y.Z release'``.
|
||||||
- ``git push``
|
|
||||||
- ``git push --tags``.
|
- ``git push --tags``.
|
||||||
- ``python setup.py sdist upload``.
|
- Update stable
|
||||||
- ``python setup.py bdist_wheel upload``.
|
- ``git checkout stable``
|
||||||
|
- ``git merge master``
|
||||||
|
- ``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: click "Create a new release" on the far right, fill in the tag
|
||||||
|
name, 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.
|
||||||
|
- 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
|
- Get back to work
|
||||||
- Update ``_version.py`` (add 'dev' and increment minor).
|
- Make sure you are on master, not somewhere else: ``git checkout master``
|
||||||
- Update version in ``docs/conf.py``
|
- Update version macros in ``include/pybind11/common.h`` (set PATCH to
|
||||||
- Update version macros in ``include/pybind11/common.h``
|
``0.dev1`` and increment MINOR).
|
||||||
- ``git add`` and ``git commit``.
|
- Update ``_version.py`` to match
|
||||||
``git push``
|
- Add a plot for in-development updates in ``docs/changelog.rst``.
|
||||||
|
- ``git add``, ``git commit``, ``git push``
|
||||||
|
|
||||||
|
If a version branch is updated, remember to set PATCH to ``1.dev1``.
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools", "wheel", "cmake==3.18.0", "ninja"]
|
requires = ["setuptools>=42", "wheel", "cmake>=3.18", "ninja"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools", "wheel"]
|
requires = ["setuptools>=42", "wheel"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
Loading…
Reference in New Issue
Block a user