From 85c494e219c67aa03d575ef521c5822ef565d5e8 Mon Sep 17 00:00:00 2001 From: Jeremy Stanley Date: Mon, 27 Jan 2025 22:08:20 +0000 Subject: [PATCH] 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 --- roles/build-python-release/README.rst | 20 +++++---- roles/build-python-release/defaults/main.yaml | 1 + roles/build-python-release/tasks/main.yaml | 42 ++++++++++++++----- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/roles/build-python-release/README.rst b/roles/build-python-release/README.rst index fc86259bd..8e950be08 100644 --- a/roles/build-python-release/README.rst +++ b/roles/build-python-release/README.rst @@ -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. diff --git a/roles/build-python-release/defaults/main.yaml b/roles/build-python-release/defaults/main.yaml index 5ad6efac9..e54f5fdfa 100644 --- a/roles/build-python-release/defaults/main.yaml +++ b/roles/build-python-release/defaults/main.yaml @@ -2,3 +2,4 @@ zuul_work_dir: "{{ zuul.project.src_dir }}" release_python: "python" bdist_wheel_xargs: "" build_wheel: true +legacy_setup: false diff --git a/roles/build-python-release/tasks/main.yaml b/roles/build-python-release/tasks/main.yaml index 9e6b8be18..0247e6e62 100644 --- a/roles/build-python-release/tasks/main.yaml +++ b/roles/build-python-release/tasks/main.yaml @@ -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