From 6bcb7e127b74a7a6087042b5e97a8baa671dbcfe Mon Sep 17 00:00:00 2001 From: "riseproject-dev[bot]" <330740410+riseproject-dev[bot]@users.noreply.github.com> Date: Sun, 27 Sep 2026 07:42:13 +0000 Subject: [PATCH 1/3] scylla-driver: Add version 3.29.12 Signed-off-by: riseproject-dev[bot] <330740410+riseproject-dev[bot]@users.noreply.github.com> --- docs/packages/scylla-driver.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/packages/scylla-driver.yaml b/docs/packages/scylla-driver.yaml index 4e1e89275c6..c1e6ffb44e9 100644 --- a/docs/packages/scylla-driver.yaml +++ b/docs/packages/scylla-driver.yaml @@ -18,3 +18,4 @@ versions: - filename: scylla_driver-3.29.11-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl sha256: b551758592348189316b6ce08081d11e599fc5d821b389b94cc4a96edcd1c9c9 requires-python: '>=3.9' +- version: 3.29.12 From 8240115a63b231c570483c2453c68479a7bc0377 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sun, 27 Sep 2026 09:19:15 +0000 Subject: [PATCH 2/3] scylla-driver: carry forward the libev licence patch to 3.29.12 The nightly-upgrade bot bumped docs/packages/scylla-driver.yaml to 3.29.12 but did not add patches/scylla-driver/3.29.12/, so the "Patch scylla-driver source" step's git apply failed with "No such file or directory" before the build could start. Of the four 3.29.11 patches only 0001 (ship LICENSE.libev in the wheel) is still needed; it applies cleanly against the 3.29.12-scylla tag and is copied unchanged. The other three are in 3.29.12 already: - 0002 (restart the libev prepare watcher after the cleanup test): upstream's test_watchers_are_finished now restarts _preparer itself. - 0003 (26c201a7) and 0004 (03c4c960): both backported commits are ancestors of the 3.29.12-scylla tag. 3.29.12 also removed the gevent reactor together with tests/unit/io/test_geventreactor.py, so the gevent test run is skipped when that file is absent, and it added tests/unit/test_driver_config_schema.py, which imports jsonschema at module level, so jsonschema joins the test requirements. --- .github/workflows/build-scylla-driver.yml | 9 ++- ...ce-of-the-bundled-libev-in-the-wheel.patch | 73 +++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 patches/scylla-driver/3.29.12/0001-Ship-the-licence-of-the-bundled-libev-in-the-wheel.patch diff --git a/.github/workflows/build-scylla-driver.yml b/.github/workflows/build-scylla-driver.yml index de35b4cd8e2..007f0028e09 100644 --- a/.github/workflows/build-scylla-driver.yml +++ b/.github/workflows/build-scylla-driver.yml @@ -97,11 +97,12 @@ jobs: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ # Upstream's dev group, minus ccm (a git dependency only the integration tests use) # and minus gevent on cp314t, which it has no build for. setuptools is what gives - # pyximport a distutils on 3.12+ (gotcha 211). + # pyximport a distutils on 3.12+ (gotcha 211). jsonschema is imported at module + # level by tests/unit/test_driver_config_schema.py from 3.29.12 on. CIBW_TEST_GROUPS: '' CIBW_TEST_REQUIRES: >- pytest~=8.0 PyYAML pure-sasl twisted[tls] eventlet>=0.33.3 cython>=3.2 - packaging>=25.0 futurist numpy objgraph setuptools + packaging>=25.0 futurist numpy objgraph setuptools jsonschema>=4.18 ${{ matrix.python == 'cp314t' && '' || 'gevent' }} # PIP_PREFER_BINARY keeps pip on our registry's gevent instead of compiling # PyPI's newer release. @@ -109,10 +110,12 @@ jobs: # cassandra/ would shadow the installed wheel, so only the two .pyx files # tests/unit/cython/types_testhelper.pyx includes by relative path are staged. CIBW_TEST_SOURCES: tests cassandra/ioutils.pyx cassandra/cython_marshal.pyx + # 3.29.12 dropped the gevent reactor and its test file, so that run is skipped + # when the file is absent. CIBW_TEST_COMMAND: >- python -c "import importlib.metadata as m; f=[str(p) for p in m.files('scylla-driver')]; assert any(s.endswith('licenses/LICENSE.libev') for s in f), f" && python -m pytest tests/unit - ${{ matrix.python == 'cp314t' && '' || '&& EVENT_LOOP_MANAGER=gevent python -m pytest tests/unit/io/test_geventreactor.py' }} + ${{ matrix.python == 'cp314t' && '' || '&& { [ ! -f tests/unit/io/test_geventreactor.py ] || EVENT_LOOP_MANAGER=gevent python -m pytest tests/unit/io/test_geventreactor.py; }' }} - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: diff --git a/patches/scylla-driver/3.29.12/0001-Ship-the-licence-of-the-bundled-libev-in-the-wheel.patch b/patches/scylla-driver/3.29.12/0001-Ship-the-licence-of-the-bundled-libev-in-the-wheel.patch new file mode 100644 index 00000000000..6e2b34b6eb3 --- /dev/null +++ b/patches/scylla-driver/3.29.12/0001-Ship-the-licence-of-the-bundled-libev-in-the-wheel.patch @@ -0,0 +1,73 @@ +From ca306846abdb1396e55893b56e5d368975218bf9 Mon Sep 17 00:00:00 2001 +From: Ludovic Henry +Date: Mon, 21 Sep 2026 11:47:03 +0000 +Subject: [PATCH] Ship the licence of the bundled libev in the wheel + +cassandra.io.libevwrapper links libev dynamically, so auditwheel copies the +system libev.so.4 into scylla_driver.libs/ and rewrites the extension's RPATH +to it: every manylinux wheel redistributes libev in binary form. libev is +dual-licensed BSD-2-Clause OR GPL-2.0-or-later and its BSD terms require the +copyright notice to travel with the binary, but the wheel carries only the +driver's own Apache-2.0 LICENSE. + +pyproject.toml declares no license-files, so setuptools' default +LICEN[CS]E* root glob picks the new file up and no packaging change is +needed. The text is the notice from libev 4.33, the version the manylinux +images package. + +Upstream-Status: To upstream [not yet submitted; this port may only touch riseproject-dev/python-wheels] +--- + LICENSE.libev | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + create mode 100644 LICENSE.libev + +diff --git a/LICENSE.libev b/LICENSE.libev +new file mode 100644 +index 0000000..04b35e7 +--- /dev/null ++++ b/LICENSE.libev +@@ -0,0 +1,41 @@ ++The libev shared library the cassandra.io.libevwrapper extension links against ++is redistributed inside the binary wheel. libev is not part of this project and ++carries the licence below; the driver's own licence is in LICENSE. ++ ++All files in libev are ++Copyright (c)2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++ ++ * Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ * Redistributions in binary form must reproduce the above ++ copyright notice, this list of conditions and the following ++ disclaimer in the documentation and/or other materials provided ++ with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++Alternatively, the contents of this package may be used under the terms ++of the GNU General Public License ("GPL") version 2 or any later version, ++in which case the provisions of the GPL are applicable instead of the ++above. If you wish to allow the use of your version of this package only ++under the terms of the GPL and not to allow others to use your version of ++this file under the BSD license, indicate your decision by deleting the ++provisions above and replace them with the notice and other provisions ++required by the GPL in this and the other files of this package. If you do ++not delete the provisions above, a recipient may use your version of this ++file under either the BSD or the GPL. +-- +2.43.0 + From 055c3774aad36b61e007165bd1561577c26b8ed7 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sun, 27 Sep 2026 11:30:43 +0000 Subject: [PATCH 3/3] scylla-driver: build 3.29.12's cython_lz4 extension and ship liblz4's licence 3.29.12 added cassandra.cython_lz4, built from setup.py with libraries=['lz4'], and CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST=yes makes its failure fatal: every build died on "fatal error: lz4.h: No such file or directory". Upstream's own before-build installs lz4-devel for it; do the same. auditwheel then bundles liblz4.so.1 into scylla_driver.libs/, so the wheel redistributes liblz4 in binary form next to libev. Add patches/scylla-driver/3.29.12/0002, which ships lz4's BSD-2-Clause lib/LICENSE as LICENSE.lz4 the same way 0001 ships LICENSE.libev, and extend the licence check in the test command to require LICENSE.lz4 whenever a bundled liblz4 is in the wheel (so it stays a no-op for versions without the extension). --- .github/workflows/build-scylla-driver.yml | 8 ++- ...e-of-the-bundled-liblz4-in-the-wheel.patch | 59 +++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 patches/scylla-driver/3.29.12/0002-Ship-the-licence-of-the-bundled-liblz4-in-the-wheel.patch diff --git a/.github/workflows/build-scylla-driver.yml b/.github/workflows/build-scylla-driver.yml index 007f0028e09..a126e9919c1 100644 --- a/.github/workflows/build-scylla-driver.yml +++ b/.github/workflows/build-scylla-driver.yml @@ -74,7 +74,8 @@ jobs: path: python-wheels persist-credentials: false - # auditwheel bundles the image's libev, whose notice the wheel would otherwise drop. + # auditwheel bundles the image's libev (and, from 3.29.12, liblz4), whose notices the + # wheel would otherwise drop. - name: Patch scylla-driver source run: git apply python-wheels/patches/scylla-driver/${{ env.SCYLLA_DRIVER_VERSION }}/00*.patch @@ -87,7 +88,8 @@ jobs: CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} CIBW_BUILD_FRONTEND: build # upstream's build[uv] needs a host uv the runner has none of (gotcha 13) # Upstream's before-build, minus the AlmaLinux key and the packages Rocky 10 preinstalls. - CIBW_BEFORE_BUILD: rm -rf ~/.pyxbld && yum install -y libev libev-devel + # lz4-devel is for the cassandra.cython_lz4 extension 3.29.12 added. + CIBW_BEFORE_BUILD: rm -rf ~/.pyxbld && yum install -y libev libev-devel lz4-devel # The three CASS_DRIVER/CFLAGS values are upstream's [tool.cibuildwheel] environment, # which this replaces; EXTENSIONS_ARE_MUST is what fails a degraded pure-Python build. CIBW_ENVIRONMENT: >- @@ -113,7 +115,7 @@ jobs: # 3.29.12 dropped the gevent reactor and its test file, so that run is skipped # when the file is absent. CIBW_TEST_COMMAND: >- - python -c "import importlib.metadata as m; f=[str(p) for p in m.files('scylla-driver')]; assert any(s.endswith('licenses/LICENSE.libev') for s in f), f" && + python -c "import importlib.metadata as m; f=[str(p) for p in m.files('scylla-driver')]; assert any(s.endswith('licenses/LICENSE.libev') for s in f), f; assert not any('/liblz4' in s for s in f) or any(s.endswith('licenses/LICENSE.lz4') for s in f), f" && python -m pytest tests/unit ${{ matrix.python == 'cp314t' && '' || '&& { [ ! -f tests/unit/io/test_geventreactor.py ] || EVENT_LOOP_MANAGER=gevent python -m pytest tests/unit/io/test_geventreactor.py; }' }} diff --git a/patches/scylla-driver/3.29.12/0002-Ship-the-licence-of-the-bundled-liblz4-in-the-wheel.patch b/patches/scylla-driver/3.29.12/0002-Ship-the-licence-of-the-bundled-liblz4-in-the-wheel.patch new file mode 100644 index 00000000000..67f85029971 --- /dev/null +++ b/patches/scylla-driver/3.29.12/0002-Ship-the-licence-of-the-bundled-liblz4-in-the-wheel.patch @@ -0,0 +1,59 @@ +From e45a07796c01233f8d713f4230af02693d5006a5 Mon Sep 17 00:00:00 2001 +From: Ludovic Henry +Date: Sun, 27 Sep 2026 12:00:00 +0000 +Subject: [PATCH] Ship the licence of the bundled liblz4 in the wheel + +3.29.12 adds the cassandra.cython_lz4 extension, which links liblz4 +dynamically, so auditwheel copies the system liblz4.so.1 into +scylla_driver.libs/ next to libev: every manylinux wheel now also +redistributes liblz4 in binary form. The LZ4 library is BSD-2-Clause and its +terms require the copyright notice to travel with the binary. + +As with LICENSE.libev, pyproject.toml declares no license-files, so +setuptools' default LICEN[CS]E* root glob picks the new file up. The text is +lib/LICENSE from lz4 1.9.4, the version the manylinux image packages; it is +unchanged in 1.10.0. + +Upstream-Status: To upstream [not yet submitted; this port may only touch riseproject-dev/python-wheels] +--- + LICENSE.lz4 | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + create mode 100644 LICENSE.lz4 + +diff --git a/LICENSE.lz4 b/LICENSE.lz4 +new file mode 100644 +index 00000000..04c61c61 +--- /dev/null ++++ b/LICENSE.lz4 +@@ -0,0 +1,28 @@ ++The liblz4 shared library the cassandra.cython_lz4 extension links against ++is redistributed inside the binary wheel. liblz4 is not part of this project ++and carries the licence below; the driver's own licence is in LICENSE. ++ ++LZ4 Library ++Copyright (c) 2011-2020, Yann Collet ++All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without modification, ++are permitted provided that the following conditions are met: ++ ++* Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++* Redistributions in binary form must reproduce the above copyright notice, this ++ list of conditions and the following disclaimer in the documentation and/or ++ other materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +2.43.0 +