jobs:
- openstack-tox-pep8
- openstack-tox-cover
+ - openstack-tox-py27
- openstack-tox-py36
- openstack-tox-py37
- openstack-tox-py38
jobs:
- openstack-tox-pep8
- openstack-tox-cover
+ - openstack-tox-py27
- openstack-tox-py36
- openstack-tox-py37
- openstack-tox-py38
CHANGES
=======
+5.8.0
+-----
+
+* Add python2 testing back to PBR
+* Allow PEP517 without setup\_requires
+* Clarify the need for setup.py with PEP517
+
5.7.0
-----
Metadata-Version: 2.1
Name: pbr
-Version: 5.7.0
+Version: 5.8.0
Summary: Python Build Reasonableness
Home-page: https://docs.openstack.org/pbr/latest/
Author: OpenStack
``pyproject.toml``
------------------
-As an alternative to writing a ``setup.py`` you can instead setup PBR
-through the PEP 517 build-system configuration in ``pyproject.toml``.
+PBR can be configured as a PEP517 build-system in ``pyproject.toml``. This
+currently continues to rely on setuptools which means you need the above
+``setup.py`` file to be present. The main benefits to using a
+``pyproject.toml`` file with PBR are that you can control the versions of
+PBR, setuptools, and wheel that are used avoiding easy_install invocation.
Your build-system block in ``pyproject.toml`` will need to look something
like this::
requires = ["pbr>=5.7.0", "setuptools>=36.6.0", "wheel"]
build-backend = "pbr.build"
+
+Eventually PBR may grow its own direct support for PEP517 build hooks, but
+until then it will continue to need setuptools and ``setup.py``.
+
.. _setup_cfg:
``setup.cfg``
Metadata-Version: 2.1
Name: pbr
-Version: 5.7.0
+Version: 5.8.0
Summary: Python Build Reasonableness
Home-page: https://docs.openstack.org/pbr/latest/
Author: OpenStack
msg = 'Unknown distribution option: %s' % repr(key)
warnings.warn(msg)
+ # Distribution.finalize_options() is what calls this method. That means
+ # there is potential for recursion here. Recursion seems to be an issue
+ # particularly when using PEP517 build-system configs without
+ # setup_requires in setup.py. We can avoid the recursion by setting
+ # dist.pbr to a None value as the corresponding entrypoint (this function)
+ # will only be called on a non None value.
+ setattr(dist, "pbr", None)
+
# Re-finalize the underlying Distribution
try:
super(dist.__class__, dist).finalize_options()
self.packages = packages
def _writeFile(self, directory, file_name, contents):
- if not contents:
- # We want to be able to override not having files
- return
path = os.path.abspath(os.path.join(directory, file_name))
path_dir = os.path.dirname(path)
if not os.path.exists(path_dir):
class TestPEP517Support(base.BaseTestCase):
def test_pep_517_support(self):
+ # Note that the current PBR PEP517 entrypoints rely on a valid
+ # PBR setup.py existing.
pkgs = {
'test_pep517':
{
sphinx
iso8601
"""),
- # Override no setup.py.
- 'setup.py': '',
+ # Override default setup.py to remove setup_requires.
+ 'setup.py': textwrap.dedent("""\
+ #!/usr/bin/env python
+ import setuptools
+ setuptools.setup(pbr=True)
+ """),
'setup.cfg': textwrap.dedent("""\
[metadata]
name = test_pep517