-
-
Notifications
You must be signed in to change notification settings - Fork 40
Add Python 3.13 and 3.14 wheel builds #809
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -314,7 +314,7 @@ jobs: | |
| mode=FILE_APPEND_MODE, | ||
| ) as outputs_file: | ||
| print( | ||
| "sdist=${{ env.PROJECT_NAME }}-${{ | ||
| f"sdist={sdist_file_prj_base_name !s}-${{ | ||
| steps.request-check.outputs.release-requested == 'true' | ||
| && github.event.inputs.release-version | ||
| || steps.scm-version.outputs.dist-version | ||
|
|
@@ -590,6 +590,8 @@ jobs: | |
| ${{ needs.pre-setup.outputs.dists-artifact-name }} | ||
| # CIBW_CONFIG_SETTINGS: `with-cython-tracing` — for coverage collection | ||
| # CIBW_ARCHS_MACOS=all x86_64 arm64 universal2 | ||
| # NOTE: *t-* skips free-threaded builds — Cython extensions do not | ||
| # NOTE: set Py_mod_gil_not_used, causing RuntimeWarning on import. | ||
| environment-variables: |- | ||
| CIBW_ARCHS_MACOS=native | ||
|
|
||
|
|
@@ -609,6 +611,7 @@ jobs: | |
| *-musllinux_* | ||
| *-win32 | ||
| *_arm64 | ||
| *t-* | ||
|
cidrblock marked this conversation as resolved.
|
||
| pp* | ||
| EOF' | ||
| || '' | ||
|
|
@@ -642,6 +645,8 @@ jobs: | |
| ${{ needs.pre-setup.outputs.dists-artifact-name }} | ||
| # CIBW_CONFIG_SETTINGS: `with-cython-tracing` — for coverage collection | ||
| # CIBW_ARCHS_MACOS=all x86_64 arm64 universal2 | ||
| # NOTE: *t-* skips free-threaded builds — Cython extensions do not | ||
| # NOTE: set Py_mod_gil_not_used, causing RuntimeWarning on import. | ||
| environment-variables: |- | ||
| CIBW_ARCHS_MACOS=native | ||
|
|
||
|
|
@@ -659,6 +664,7 @@ jobs: | |
| *_i686 | ||
| *-musllinux_* | ||
| *-*linux_{aarch64,ppc64le,s390x} | ||
| *t-* | ||
| pp* | ||
| EOF' | ||
| || '' | ||
|
|
@@ -694,6 +700,8 @@ jobs: | |
| # CIBW_ARCHS_LINUX: Build emulated architectures if QEMU, else "auto" | ||
| # CIBW_CONFIG_SETTINGS: `with-cython-tracing` — for coverage collection | ||
| # CIBW_ARCHS_MACOS=all x86_64 arm64 universal2 | ||
| # NOTE: *t-* skips free-threaded builds — Cython extensions do not | ||
| # NOTE: set Py_mod_gil_not_used, causing RuntimeWarning on import. | ||
| environment-variables: |- | ||
| CIBW_ARCHS_LINUX=all | ||
|
|
||
|
|
@@ -711,8 +719,11 @@ jobs: | |
| !fromJSON(needs.pre-setup.outputs.release-requested) | ||
| && 'CIBW_SKIP<<EOF | ||
| *_i686 | ||
| *-manylinux_armv7l | ||
| *-manylinux_riscv64 | ||
| *-musllinux_* | ||
| *-*linux_x86_64 | ||
| *t-* | ||
| pp* | ||
| EOF' | ||
| || '' | ||
|
|
@@ -752,7 +763,13 @@ jobs: | |
| store-sdist-to-artifact: | ||
| - false | ||
| include: | ||
| - python-version: 3.12 | ||
| - python-version: "3.14" | ||
|
cidrblock marked this conversation as resolved.
|
||
| runner-vm-os: ubuntu-22.04 | ||
| store-sdist-to-artifact: false | ||
| - python-version: "3.13" | ||
| runner-vm-os: ubuntu-22.04 | ||
| store-sdist-to-artifact: false | ||
| - python-version: "3.12" | ||
| runner-vm-os: ubuntu-22.04 | ||
|
cidrblock marked this conversation as resolved.
|
||
| store-sdist-to-artifact: true | ||
|
Comment on lines
+769
to
774
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. FTR, this should've gone into the main matrix as 2 lines as they are smoke tests and all of the factors are already set up there and don't need repeating. Only the highest version (3.14) would be configured differently to save the artifact for further use in the following CI jobs.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Even better — it'd be enough to just update 3.12 to 3.14 here as the oldest supported Python versions are the smoke test and there's really no need to test everything in between sdist-wise. This was added mainly as a regression guardrails, IIRC, and was just a single job at some point until something broke. |
||
|
|
||
|
|
@@ -992,10 +1009,13 @@ jobs: | |
| run: rpmlint packaging/rpm/${{ env.PROJECT_NAME }}.spec | ||
|
|
||
| - name: Copy sdist to the sources dir | ||
| env: | ||
| SDIST_ARTIFACT: ${{ needs.pre-setup.outputs.sdist-artifact-name }} | ||
| DIST_VERSION: ${{ needs.pre-setup.outputs.dist-version }} | ||
| run: >- | ||
| cp -v | ||
| 'dist/${{ needs.pre-setup.outputs.sdist-artifact-name }}' | ||
| ~/rpmbuild/SOURCES/ | ||
| "dist/${SDIST_ARTIFACT}" | ||
| ~/"rpmbuild/SOURCES/${PROJECT_NAME}-${DIST_VERSION}.tar.gz" | ||
|
|
||
| - name: Install transitive deps for build deps in external repos | ||
| if: contains(matrix.target-container.tag, 'ubi') | ||
|
|
@@ -1132,6 +1152,8 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| python-version: | ||
| - "3.14" | ||
| - "3.13" | ||
| - "3.12" | ||
| - "3.11" | ||
| - "3.10" | ||
|
|
@@ -1168,6 +1190,8 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| python-version: | ||
| - "3.14" | ||
| - "3.13" | ||
| - "3.12" | ||
| - "3.11" | ||
| - "3.10" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| Updated CI infrastructure for Python 3.13 and 3.14 support | ||
| -- by :user:`cidrblock`. | ||
|
|
||
| Bumped :pypi:`cibuildwheel` from v2.17.0 to v3.3.1, :pypi:`setuptools` | ||
| from 68.2.2 to 82.0.1, and re-compiled :file:`requirements-build.txt` to | ||
| resolve transitive pin conflicts. Adapted the CI workflow and Packit | ||
| config for :pep:`625` sdist filename normalization (underscores) caused | ||
| by the ``setuptools`` upgrade. Configured ``core = ctrace`` in | ||
|
cidrblock marked this conversation as resolved.
|
||
| :file:`.coveragerc` to work around the :pypi:`Cython` coverage plugin not | ||
| supporting Python 3.14's :mod:`sys.monitoring` tracer | ||
| (cf. :gh:`coveragepy/coveragepy#2099`). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| Added Python 3.13 and 3.14 wheel builds | ||
| -- by :user:`cidrblock`. | ||
|
|
||
| Bumped :pypi:`cibuildwheel` from v2.17.0 to v3.3.1 (required for | ||
| ``cp313``/``cp314`` wheel building) and :pypi:`Cython` from 3.0.12 | ||
| to 3.1.8 (Cython 3.0.x has known build failures with Python 3.14). | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No proof of this. I confirmed that Cython 3.1 is needed for free-threading support. With FT disabled, there's no justification for setting a bar higher than it needs to be. |
||
| The :pep:`517` backend now requires ``Cython >= 3.1.0`` for Python 3.14 | ||
| and ``Cython >= 3.0.11`` for Python 3.13. Free-threaded (``*t-*``) | ||
| Python builds are skipped because Cython extensions do not yet set | ||
| ``Py_mod_gil_not_used``. macOS wheels now require macOS 15.0+ | ||
| (``MACOSX_DEPLOYMENT_TARGET``) due to :pypi:`delocate` 0.13.0 enforcing | ||
| deployment-target consistency with brew-installed ``libssh``. | ||
|
cidrblock marked this conversation as resolved.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -143,6 +143,7 @@ | |
| 'pr': (f'{github_repo_url}/pull/%s', 'PR #%s'), | ||
| 'commit': (f'{github_repo_url}/commit/%s', '%s'), | ||
| 'gh': (f'{github_url}/%s', 'GitHub: %s'), | ||
| 'pypi': ('https://pypi.org/project/%s', '%s'), | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🤔 I didn't realize
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. xref #818 |
||
| 'user': (f'{github_sponsors_url}/%s', '@%s'), | ||
| } | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -335,7 +335,8 @@ def get_requires_for_build_wheel( | |
|
|
||
| """ | ||
| c_ext_build_deps = [ | ||
| 'Cython >= 3.0.11; python_version >= "3.13"', # Ideally >= 3.1.0 | ||
| 'Cython >= 3.1.0; python_version >= "3.14" and python_version < "3.15"', | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Leaving the crusial dep missing under Python 3.15 is a practice highly discouraged by PyPA. There must be no upper bound in such cases — it's quite a cruel thing to do. Otherwise, it's a straight way towards backtracking and/or breaking future runtime users ruthlessly. |
||
| 'Cython >= 3.0.11; python_version >= "3.13" and python_version < "3.14"', | ||
|
cidrblock marked this conversation as resolved.
|
||
| 'Cython >= 3.0.0; python_version >= "3.12" and python_version < "3.13"', | ||
|
cidrblock marked this conversation as resolved.
|
||
| 'Cython; python_version < "3.12"', | ||
| ] | ||
|
|
||
|
cidrblock marked this conversation as resolved.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -204,7 +204,12 @@ build-frontend = "build" | |
| # container-engine = "podman" # FIXME? | ||
| test-requires = "pytest pytest-cov pytest-xdist" | ||
| test-command = "python -Im pytest -m smoke --no-cov {project}/tests" | ||
| skip = "pp*" | ||
| skip = [ | ||
| "pp*", # FIXME: we don't ship these currently but could | ||
|
cidrblock marked this conversation as resolved.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In #821, I discovered that having this triggers a warning in |
||
| # Cython extensions do not set Py_mod_gil_not_used; free-threaded builds | ||
| # fail with RuntimeWarning on import: | ||
|
cidrblock marked this conversation as resolved.
|
||
| "*t-*", | ||
| ] | ||
|
|
||
| [tool.cibuildwheel.environment] | ||
| COLOR = "yes" | ||
|
|
@@ -225,6 +230,8 @@ manylinux-ppc64le-image = "ghcr.io/ansible/pylibssh-manylinux_2_28_ppc64le:libss | |
| manylinux-s390x-image = "ghcr.io/ansible/pylibssh-manylinux_2_28_s390x:libssh-v0.12.0" | ||
| manylinux-x86_64-image = "ghcr.io/ansible/pylibssh-manylinux_2_28_x86_64:libssh-v0.12.0" | ||
| skip = [ | ||
| "*-manylinux_armv7l", # no custom container image with libssh for this arch | ||
|
cidrblock marked this conversation as resolved.
cidrblock marked this conversation as resolved.
|
||
| "*-manylinux_riscv64", # no custom container image with libssh for this arch | ||
| "*-musllinux_*", # FIXME: musllinux needs us to provide with containers pre-built libssh | ||
| "pp*", # FIXME: we don't ship these currently but could | ||
|
|
||
|
|
@@ -274,6 +281,12 @@ before-build = [ | |
| # working_directory: libssh/build | ||
| ] | ||
|
|
||
| [tool.cibuildwheel.macos.environment] | ||
| # delocate (bundled with cibuildwheel v3) enforces that the wheel's | ||
| # deployment target matches the bundled dylibs. The brew-installed | ||
|
cidrblock marked this conversation as resolved.
|
||
| # openssl@3 bottle on macos-15-intel targets macOS 15.0. | ||
| MACOSX_DEPLOYMENT_TARGET = "15.0" | ||
|
|
||
| [tool.cibuildwheel.windows] | ||
| skip = "*" | ||
|
|
||
|
|
||
|
cidrblock marked this conversation as resolved.
cidrblock marked this conversation as resolved.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,28 +1,26 @@ | ||
| # | ||
| # This file is autogenerated by pip-compile with python 3.9 | ||
| # To update, run: | ||
| # This file is autogenerated by pip-compile with Python 3.9 | ||
| # by the following command: | ||
| # | ||
| # pip-compile --allow-unsafe --output-file=requirements-build.txt --strip-extras - | ||
| # | ||
| cython==3.0.12 | ||
| cython==3.1.8 | ||
| # via -r - | ||
| expandvars==0.9.0 | ||
| # via -r - | ||
| packaging==24.0 | ||
| packaging==26.0 | ||
| # via setuptools-scm | ||
| pyparsing==3.0.9 | ||
| # via packaging | ||
| setuptools-scm==8.1.0 | ||
| # via -r - | ||
| tomli==2.0.1 | ||
| tomli==2.4.0 | ||
| # via setuptools-scm | ||
| typing-extensions==4.10.0 | ||
| typing-extensions==4.15.0 | ||
| # via setuptools-scm | ||
| wheel==0.37.1 | ||
| # via -r - | ||
|
|
||
| # The following packages are considered to be unsafe in a requirements file: | ||
| setuptools==68.2.2 | ||
| setuptools==82.0.1 | ||
| # via | ||
| # -r - | ||
| # setuptools-scm |
Uh oh!
There was an error while loading. Please reload this page.