From be3c0376ca139bd4ac53441b23c48363942a65e1 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Wed, 22 Jan 2025 20:44:25 -0400 Subject: [PATCH 01/10] Stop calling PyEval_InitThreads PyEval_InitThreads is depricated, since 3.7 it is not necessary to call it. On python 3.12 it is not present anymore, which cases build to fail. Ref: https://docs.python.org/3/c-api/init.html#c.PyEval_InitThreads --- cassandra/io/libevwrapper.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/cassandra/io/libevwrapper.c b/cassandra/io/libevwrapper.c index bbb902b757..f32504fa34 100644 --- a/cassandra/io/libevwrapper.c +++ b/cassandra/io/libevwrapper.c @@ -667,9 +667,6 @@ initlibevwrapper(void) if (PyModule_AddObject(module, "Timer", (PyObject *)&libevwrapper_TimerType) == -1) INITERROR; - if (!PyEval_ThreadsInitialized()) { - PyEval_InitThreads(); - } #if PY_MAJOR_VERSION >= 3 return module; From d90ffc2fdcffd5faffd8ffb782d47ccdebc5080c Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Wed, 22 Jan 2025 20:46:29 -0400 Subject: [PATCH 02/10] Set cython language level to 3 Otherwise it fails to convert unicode to 'str': ``` Error compiling Cython file: ------------------------------------------------------------ ... if metadata_request_timeout is None: return stmt ms = int(metadata_request_timeout / datetime.timedelta(milliseconds=1)) if ms == 0: return stmt return f"{stmt} USING TIMEOUT {ms}ms" ^ ------------------------------------------------------------ cassandra/util.py:1813:11: Cannot convert Unicode string to 'str' implicitly. This is not portable and requires explicit encoding. ``` --- setup.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 1789d532ba..40efd66247 100644 --- a/setup.py +++ b/setup.py @@ -325,10 +325,14 @@ def _setup_extensions(self): extra_compile_args=compile_args) for m in cython_candidates], nthreads=build_concurrency, - exclude_failures=True)) + compiler_directives={'language_level': 3}, + )) - self.extensions.extend(cythonize(NoPatchExtension("*", ["cassandra/*.pyx"], extra_compile_args=compile_args), - nthreads=build_concurrency)) + self.extensions.extend(cythonize( + NoPatchExtension("*", ["cassandra/*.pyx"], extra_compile_args=compile_args), + nthreads=build_concurrency, + compiler_directives={'language_level': 3}, + )) except Exception: sys.stderr.write("Failed to cythonize one or more modules. These will not be compiled as extensions (optional).\n") From 0c8e2a68cb42b79ced9639b89e5e6769e39a2078 Mon Sep 17 00:00:00 2001 From: Israel Fruchter Date: Thu, 23 Jan 2025 10:23:56 +0200 Subject: [PATCH 03/10] setup.py: make it fail if extensions aren't built We need to see when extension is failed to build on CICD. Let's introduce CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST that is False by default. When it is set, setup.py fails when building of any extension is failed. --- .github/workflows/build-push.yml | 2 +- setup.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index bdca1e313f..f424f4da23 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -12,7 +12,7 @@ env: CIBW_TEST_COMMAND_WINDOWS: "pytest {project}/tests/unit -k \"not (test_deserialize_date_range_year or test_datetype or test_libevreactor)\" " CIBW_BEFORE_TEST: "pip install -r {project}/test-requirements.txt" CIBW_BEFORE_BUILD_LINUX: "rm -rf ~/.pyxbld && rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux && yum install -y libffi-devel libev libev-devel openssl openssl-devel" - CIBW_ENVIRONMENT: "CASS_DRIVER_BUILD_CONCURRENCY=2 CFLAGS='-g0 -O3'" + CIBW_ENVIRONMENT: "CASS_DRIVER_BUILD_CONCURRENCY=2 CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST=yes CFLAGS='-g0 -O3'" CIBW_SKIP: cp36* cp37* pp*i686 *musllinux* CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_MANYLINUX_PYPY_X86_64_IMAGE: manylinux_2_28 diff --git a/setup.py b/setup.py index 40efd66247..8e67488e93 100644 --- a/setup.py +++ b/setup.py @@ -204,7 +204,7 @@ def __init__(self, ext): sys.argv = [a for a in sys.argv if a not in ("--no-murmur3", "--no-libev", "--no-cython", "--no-extensions")] build_concurrency = int(os.environ.get('CASS_DRIVER_BUILD_CONCURRENCY', '0')) - +CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST = bool(os.environ.get('CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST', 'no') == 'yes') class NoPatchExtension(Extension): @@ -284,6 +284,9 @@ def run(self): except DistutilsPlatformError as exc: sys.stderr.write('%s\n' % str(exc)) warnings.warn(self.error_message % "C extensions.") + if CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST: + raise + def build_extensions(self): if build_concurrency > 1: @@ -302,6 +305,8 @@ def build_extension(self, ext): sys.stderr.write('%s\n' % str(exc)) name = "The %s extension" % (ext.name,) warnings.warn(self.error_message % (name,)) + if CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST: + raise def _setup_extensions(self): # We defer extension setup until this command to leveraage 'setup_requires' pulling in Cython before we @@ -326,6 +331,7 @@ def _setup_extensions(self): for m in cython_candidates], nthreads=build_concurrency, compiler_directives={'language_level': 3}, + exclude_failures=not CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST, )) self.extensions.extend(cythonize( @@ -335,7 +341,8 @@ def _setup_extensions(self): )) except Exception: sys.stderr.write("Failed to cythonize one or more modules. These will not be compiled as extensions (optional).\n") - + if CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST: + raise def pre_build_check(): """ From 6b495fa035977557205b4d2af5f3c5d7ac2eb5cd Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Thu, 23 Jan 2025 11:33:36 -0400 Subject: [PATCH 04/10] Migrate from distutils to setuptools There is a bug in distutils that does not allow it to pick up cython for python 3.12 and later. --- setup.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/setup.py b/setup.py index 8e67488e93..d28b995eeb 100644 --- a/setup.py +++ b/setup.py @@ -13,11 +13,15 @@ # limitations under the License. from __future__ import print_function + +import fnmatch import os +import shutil import sys import json import warnings from pathlib import Path +from sysconfig import get_config_vars if __name__ == '__main__' and sys.argv[1] == "gevent_nosetests": print("Running gevent tests") @@ -29,12 +33,10 @@ from eventlet import monkey_patch monkey_patch() -from setuptools import setup -from distutils.command.build_ext import build_ext -from distutils.core import Extension -from distutils.errors import (CCompilerError, DistutilsPlatformError, - DistutilsExecError) -from distutils.cmd import Command +from setuptools.command.build_ext import build_ext +from setuptools import Extension, Command, setup +from setuptools.errors import (CCompilerError, PlatformError, + ExecError) try: import subprocess @@ -226,6 +228,7 @@ def __init__(self, *args, **kwargs): class build_extensions(build_ext): + _needs_stub = False error_message = """ =============================================================================== @@ -281,7 +284,7 @@ def run(self): try: self._setup_extensions() build_ext.run(self) - except DistutilsPlatformError as exc: + except PlatformError as exc: sys.stderr.write('%s\n' % str(exc)) warnings.warn(self.error_message % "C extensions.") if CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST: @@ -299,9 +302,9 @@ def build_extensions(self): def build_extension(self, ext): try: - build_ext.build_extension(self, ext) - except (CCompilerError, DistutilsExecError, - DistutilsPlatformError, IOError) as exc: + build_ext.build_extension(self, fix_extension_class(ext)) + except (CCompilerError, ExecError, + PlatformError, IOError) as exc: sys.stderr.write('%s\n' % str(exc)) name = "The %s extension" % (ext.name,) warnings.warn(self.error_message % (name,)) @@ -344,6 +347,13 @@ def _setup_extensions(self): if CASS_DRIVER_BUILD_EXTENSIONS_ARE_MUST: raise + +def fix_extension_class(ext: Extension) -> Extension: + # Avoid bug in setuptools that requires _needs_stub + ext._needs_stub = False + return ext + + def pre_build_check(): """ Try to verify build tools @@ -352,9 +362,9 @@ def pre_build_check(): return True try: - from distutils.ccompiler import new_compiler - from distutils.sysconfig import customize_compiler - from distutils.dist import Distribution + from setuptools._distutils.ccompiler import new_compiler + from setuptools._distutils.sysconfig import customize_compiler + from setuptools.dist import Distribution # base build_ext just to emulate compiler option setup be = build_ext(Distribution()) @@ -384,9 +394,8 @@ def pre_build_check(): executables = [getattr(compiler, exe) for exe in ('cc', 'linker')] if executables: - from distutils.spawn import find_executable for exe in executables: - if not find_executable(exe): + if not shutil.which(exe): sys.stderr.write("Failed to find %s for compiler type %s.\n" % (exe, compiler.compiler_type)) return False From 02371103430d49ce772359374b603c1ec205106c Mon Sep 17 00:00:00 2001 From: Israel Fruchter Date: Thu, 23 Jan 2025 23:31:27 +0200 Subject: [PATCH 05/10] setup.py: introduce pyproject.toml move to pyproject.toml that supports PEP517/518 this would help us use isolated build env, and avoid all the fragile situation we have with Cython installation dependcy missing in some CI variation --- pyproject.toml | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 59 +----------------------------------- 2 files changed, 82 insertions(+), 58 deletions(-) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..6647b6b65c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,81 @@ +[project] +name = "scylla-driver" +description = "Scylla Driver for Apache Cassandra" +authors = [ + {name = "ScyllaDB"}, +] +keywords = ["cassandra", "cql", "orm", "dse", "graph"] +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + 'Topic :: Software Development :: Libraries :: Python Modules' +] +dependencies = [ + 'geomet>=0.1,<0.3', + 'pyyaml > 5.0' +] +dynamic = ["version", "readme"] + +[project.urls] +"Homepage" = "https://github.com/scylladb/python-driver" +"Documentation" = "https://scylladb.github.io/python-driver/" +"Source" = "https://github.com/scylladb/python-driver/" +"Issues" = "https://github.com/scylladb/python-driver/issues" + +[project.optional-dependencies] +graph = ['gremlinpython==3.4.6'] +cle = ['cryptography>=35.0'] +test = [ + "pytest", + "mock>=2.0.0", + "PyYAML", + "pytz", + "sure", + "scales", + "pure-sasl", + "twisted[tls]; python_version >= '3.5'", + "twisted[tls]==19.2.1; python_version < '3.5'", + "gevent>=1.0; python_version < '3.13' and platform_machine != 'i686' and platform_machine != 'win32'", + "gevent==23.9.0; python_version < '3.13' and (platform_machine == 'i686' or platform_machine == 'win32')", + "eventlet>=0.33.3; python_version < '3.13'", + "cython", + "packaging", + "futurist; python_version >= '3.7'", + "asynctest; python_version >= '3.5'", + "pyyaml", +] + +[tool.setuptools] +include-package-data = true +packages=[ + 'cassandra', 'cassandra.io', 'cassandra.cqlengine', 'cassandra.graph', + 'cassandra.datastax', 'cassandra.datastax.insights', 'cassandra.datastax.graph', + 'cassandra.datastax.graph.fluent', 'cassandra.datastax.cloud', 'cassandra.scylla', + 'cassandra.column_encryption' +] + +[tool.setuptools.dynamic] +version = {attr = "cassandra.__version__"} # any module attribute compatible with ast.literal_eval +readme = {file = "README.rst", content-type = "text/x-rst"} + +[build-system] +requires = [ + "setuptools>=42", + "Cython", +] + +build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/setup.py b/setup.py index d28b995eeb..aff61c1337 100644 --- a/setup.py +++ b/setup.py @@ -44,13 +44,6 @@ except ImportError: has_subprocess = False -from cassandra import __version__ - -long_description = "" -with open("README.rst") as f: - long_description = f.read() - - try: from nose.commands import nosetests except ImportError: @@ -94,6 +87,7 @@ def run(self): path = "docs/_build/doctest" mode = "doctest" else: + from cassandra import __version__ path = "docs/_build/%s" % __version__ mode = "html" @@ -434,59 +428,8 @@ def run_setup(extensions): else: sys.stderr.write("Bypassing Cython setup requirement\n") - dependencies = [ - 'geomet>=0.1,<0.3', - 'pyyaml > 5.0' - ] - - _EXTRAS_REQUIRE = { - 'graph': ['gremlinpython==3.4.6'], - 'cle': ['cryptography>=35.0'] - } - setup( - name='scylla-driver', - version=__version__, - description='Scylla Driver for Apache Cassandra', - long_description=long_description, - long_description_content_type='text/x-rst', - url='https://github.com/scylladb/python-driver', - project_urls={ - 'Documentation': 'https://scylladb.github.io/python-driver/', - 'Source': 'https://github.com/scylladb/python-driver/', - 'Issues': 'https://github.com/scylladb/python-driver/issues', - }, - author='ScyllaDB', - packages=[ - 'cassandra', 'cassandra.io', 'cassandra.cqlengine', 'cassandra.graph', - 'cassandra.datastax', 'cassandra.datastax.insights', 'cassandra.datastax.graph', - 'cassandra.datastax.graph.fluent', 'cassandra.datastax.cloud', 'cassandra.scylla', - 'cassandra.column_encryption' - ], - keywords='cassandra,cql,orm,dse,graph', - include_package_data=True, - install_requires=dependencies, - extras_require=_EXTRAS_REQUIRE, tests_require=['nose', 'mock>=2.0.0', 'PyYAML', 'pytz', 'sure'], - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: Python :: 3.12', - 'Programming Language :: Python :: 3.13', - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy', - 'Topic :: Software Development :: Libraries :: Python Modules' - ], **kw) From 41ce587097c2ae89522fdc53f96eead315475e43 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Fri, 24 Jan 2025 17:13:17 -0400 Subject: [PATCH 06/10] cicd: use stable binmt By default docker/setup-qemu-action uses `binmt:master`, which leads to unstable cicd that hard to debug, randm crashes, bogus errors. It fixes one of the issue with aarch64 builds. --- .github/workflows/build-push.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index f424f4da23..5cc276673d 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -168,6 +168,7 @@ jobs: uses: docker/setup-qemu-action@v3 with: platforms: all + image: 'docker.io/tonistiigi/binfmt:desktop-v8.1.5' if: runner.os == 'Linux' - uses: actions/setup-python@v5 From 1dbafa46b5098835ee3ee4dacbb4fef715a882b9 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Sun, 26 Jan 2025 07:10:16 -0400 Subject: [PATCH 07/10] cicd: move to ubuntu 24.04 We use old 20.04, it is time to update it. --- .github/workflows/build-push.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 5cc276673d..24a1fd5430 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -28,10 +28,10 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-20.04 + - os: ubuntu-24.04 platform: x86_64 - - os: ubuntu-20.04 + - os: ubuntu-24.04 platform: PyPy - os: windows-latest @@ -133,7 +133,7 @@ jobs: build_sdist: name: Build source distribution if: "(!contains(github.event.pull_request.labels.*.name, 'disable-test-build'))|| github.event_name == 'push' && endsWith(github.event.ref, 'scylla')" - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -153,7 +153,7 @@ jobs: build_wheels_extra_arch: if: "(!contains(github.event.pull_request.labels.*.name, 'disable-test-build'))|| github.event_name == 'push' && endsWith(github.event.ref, 'scylla')" # The host should always be linux - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 name: Build extra arch ${{ matrix.archs }} wheels strategy: fail-fast: false @@ -193,7 +193,7 @@ jobs: upload_pypi: needs: [build_wheels, build_wheels_extra_arch, build_sdist] - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 permissions: id-token: write From 7d1a2d5135b5d677f554cc532517cf18610cf049 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Sun, 26 Jan 2025 09:52:42 -0400 Subject: [PATCH 08/10] cicd: fix macos builds Runner os should match cibuildwheels `MACOSX_DEPLOYMENT_TARGET`, otherwise brew pulls wrong packages that not supported by runner OS. --- .github/workflows/build-push.yml | 13 ++++++++++--- setup.py | 31 ++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index 24a1fd5430..ab0e0f71dc 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -40,7 +40,7 @@ jobs: - os: windows-latest platform: PyPy - - os: macos-latest + - os: macos-14 platform: all - os: macos-13 @@ -112,8 +112,15 @@ jobs: run: | echo "CIBW_BUILD=cp39* cp310* cp311* cp312* cp313*" >> $GITHUB_ENV echo "CIBW_BEFORE_TEST_MACOS=pip install -r {project}/test-requirements.txt pytest" >> $GITHUB_ENV - echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV - + if [ "${{ matrix.os }}" == "macos-13" ]; then + echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV; + echo "Enforcing target deployment for 13.0" + elif [ "${{ matrix.os }}" == "macos-14" ]; then + echo "MACOSX_DEPLOYMENT_TARGET=14.0" >> $GITHUB_ENV; + echo "Enforcing target deployment for 14.0" + else + echo "Unknown macos version" && false; + fi - name: Overwrite for MacOs PyPy if: runner.os == 'MacOs' && matrix.platform == 'PyPy' run: | diff --git a/setup.py b/setup.py index aff61c1337..5f90da18c7 100644 --- a/setup.py +++ b/setup.py @@ -134,6 +134,31 @@ def __init__(self, ext): self.ext = ext +def get_subdriname(directory_path): + try: + # List only subdirectories in the given directory + subdirectories = [name for dir in directory_path for name in os.listdir(dir) + if os.path.isdir(os.path.join(directory_path, name))] + return subdirectories + except Exception: + return [] + +def get_libev_headers_path(): + libev_hb_paths = ["/opt/homebrew/Cellar/libev", os.path.expanduser('~/homebrew/Cellar/libev')] + for hb_path in libev_hb_paths: + if not os.path.exists(hb_path): + continue + versions = [dir for dir in get_subdriname(hb_path) if dir[0] in "0123456789"] + if not versions: + continue + picked_version = sorted(versions, reverse=True)[0] + resulted_path = os.path.join(hb_path, picked_version, 'include') + warnings.warn("found libev headers in '%s'" % resulted_path) + return [resulted_path] + warnings.warn("did not find libev headers in '%s'" % libev_hb_paths) + return [] + + murmur3_ext = Extension('cassandra.cmurmur3', sources=['cassandra/cmurmur3.c']) @@ -142,7 +167,7 @@ def __init__(self, ext): libev_includes = ['/usr/include/libev', '/usr/local/include', '/opt/local/include', '/usr/include'] libev_libdirs = ['/usr/local/lib', '/opt/local/lib', '/usr/lib64'] if is_macos: - libev_includes.extend(['/opt/homebrew/include', os.path.expanduser('~/homebrew/include')]) + libev_includes.extend(['/opt/homebrew/include', os.path.expanduser('~/homebrew/include'), *get_libev_headers_path()]) libev_libdirs.extend(['/opt/homebrew/lib']) conan_envfile = Path(__file__).parent / 'build-release/conan/conandeps.env' @@ -153,9 +178,9 @@ def __init__(self, ext): libev_ext = Extension('cassandra.io.libevwrapper', sources=['cassandra/io/libevwrapper.c'], - include_dirs=['/usr/include/libev', '/usr/local/include', '/opt/local/include'], + include_dirs=libev_includes+['/usr/include/libev', '/usr/local/include', '/opt/local/include'], libraries=['ev'], - library_dirs=['/usr/local/lib', '/opt/local/lib']) + library_dirs=libev_libdirs+['/usr/local/lib', '/opt/local/lib']) platform_unsupported_msg = \ """ From c1ce2c0e85e6b998b97b0638426b15efa29bc148 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Sun, 26 Jan 2025 13:46:37 -0400 Subject: [PATCH 09/10] cicd: fix windows builds VSCode cl.exe fails to recognize some of the syntax: ``` cassandra\c_shard_info.c(3083): error C2065: '__uint128_t': undeclared identifier cassandra\c_shard_info.c(3083): error C2146: syntax error: missing ')' before identifier '__pyx_v_biased_token' cassandra\c_shard_info.c(3083): error C2059: syntax error: ')' cassandra\c_shard_info.c(3083): error C2059: syntax error: ')' cassandra\c_shard_info.c(3083): error C2059: syntax error: ')' ``` Let's switch to clang. --- .github/workflows/build-push.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index ab0e0f71dc..bbe5b5d627 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -34,7 +34,7 @@ jobs: - os: ubuntu-24.04 platform: PyPy - - os: windows-latest + - os: windows-2022 platform: win64 - os: windows-latest @@ -100,6 +100,7 @@ jobs: if: runner.os == 'Windows' && matrix.platform == 'win64' run: | echo "CIBW_BUILD=cp*win_amd64" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append + echo "CIBW_ENVIRONMENT_WINDOWS= CC=clang CXX=clang++" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append - name: Overwrite for Windows PyPY if: runner.os == 'Windows' && matrix.platform == 'PyPy' From 3a4601adc13bb44db29234a09d846f4068a711a2 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Sun, 26 Jan 2025 14:26:35 -0400 Subject: [PATCH 10/10] cicd: start building python 3.13 wheel for aarch64 --- .github/workflows/build-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-push.yml b/.github/workflows/build-push.yml index bbe5b5d627..be19b2d6ba 100644 --- a/.github/workflows/build-push.yml +++ b/.github/workflows/build-push.yml @@ -190,7 +190,7 @@ jobs: - name: Build wheels env: - CIBW_BUILD: "cp39* cp310* cp311* cp312*" # limit to specific version since it take much more time than jobs limit + CIBW_BUILD: "cp39* cp310* cp311* cp312* cp313*" # limit to specific version since it take much more time than jobs limit run: | python -m cibuildwheel --archs ${{ matrix.archs }} --output-dir wheelhouse