build-python-release: pyproject-build by default

The PyPA "build" project is the canonical pyproject (PEP 517) build
frontend, and is necessary in cases where SetupTools-based projects
want to do modern Python packaging standards-compliant builds. The
SetupTools maintainers have long since deprecated direct calls to
setup.py scripts, with this as the preferred solution.

Note that pyproject-build is designed to be backwards-compatible
with old-style SetupTools projects that don't have a pyproject.toml
file, so this should be a safe and transparent change. That said, we
include a failsafe switch to bring back the old behavior just in
case it's needed by some projects for unexpected reasons.

Change-Id: I9b28c97092c32870bf730f5ca6cac966435370bc
This commit is contained in:
Jeremy Stanley 2025-01-27 22:08:20 +00:00
parent 087406800d
commit 85c494e219
3 changed files with 46 additions and 17 deletions
roles/build-python-release

@ -2,19 +2,25 @@ Build sdist and wheel for Python projects.
**Role Variables**
.. zuul:rolevar:: release_python
:default: python
The python interpreter to use. Set it to "python3" to use python 3,
for example.
.. zuul:rolevar:: build_wheel
:default: true
Whether to build a wheel. Set to false to just build an sdist tarball.
.. zuul:rolevar:: legacy_setup
:default: false
By default, the role uses pyproject-build. Set this to true if you need
to use old-style direct invocation of setup.py instead.
.. zuul:rolevar:: release_python
:default: python
The python interpreter to use. Set it to "python3" to use python 3,
for example. Only relevant when legacy_setup is enabled.
.. zuul:rolevar:: bdist_wheel_xargs
:default: ''
Extra arguments to pass to the bdist_wheel command when building
packages.
packages. Only relevant when legacy_setup is enabled.

@ -2,3 +2,4 @@ zuul_work_dir: "{{ zuul.project.src_dir }}"
release_python: "python"
bdist_wheel_xargs: ""
build_wheel: true
legacy_setup: false

@ -1,10 +1,32 @@
- name: Build a tarball and wheel
command: "{{ release_python }} setup.py sdist bdist_wheel {{ bdist_wheel_xargs }}"
args:
chdir: "{{ zuul_work_dir }}"
when: build_wheel
- name: Just build a tarball
command: "{{ release_python }} setup.py sdist"
args:
chdir: "{{ zuul_work_dir }}"
when: not build_wheel
- name: Build sdist and wheel with setup.py
when: legacy_setup
block:
- name: Build a tarball and wheel
command: "{{ release_python }} setup.py sdist bdist_wheel {{ bdist_wheel_xargs }}"
args:
chdir: "{{ zuul_work_dir }}"
when: build_wheel
- name: Just build a tarball
command: "{{ release_python }} setup.py sdist"
args:
chdir: "{{ zuul_work_dir }}"
when: not build_wheel
- name: Build sdist and wheel with pyproject-build
when: not legacy_setup
block:
- name: Make sure pyproject-build is available
include_role:
name: ensure-pyproject-build
- name: Build a tarball and wheel
command: "{{ ensure_pyproject_build_executable }}"
args:
chdir: "{{ zuul_work_dir }}"
when: build_wheel
- name: Just build a tarball
command: "{{ ensure_pyproject_build_executable }} --sdist"
args:
chdir: "{{ zuul_work_dir }}"
when: not build_wheel