diff --git a/BUILD b/BUILD
index fdc12602ed221..4b0222e6e3815 100644
--- a/BUILD
+++ b/BUILD
@@ -231,7 +231,7 @@ g_stands_for = "gladiator" # @unused
core_version = "43.0.0" # @unused
-version = "1.66.1" # @unused
+version = "1.66.2" # @unused
GPR_PUBLIC_HDRS = [
"include/grpc/support/alloc.h",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 053b9e37841e3..b95a78aec64b1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,10 +25,10 @@
cmake_minimum_required(VERSION 3.13)
set(PACKAGE_NAME "grpc")
-set(PACKAGE_VERSION "1.66.1")
+set(PACKAGE_VERSION "1.66.2")
set(gRPC_CORE_VERSION "43.0.0")
set(gRPC_CORE_SOVERSION "43")
-set(gRPC_CPP_VERSION "1.66.1")
+set(gRPC_CPP_VERSION "1.66.2")
set(gRPC_CPP_SOVERSION "1.66")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}")
diff --git a/Makefile b/Makefile
index 65d69b6f4c46a..42e59022a568a 100644
--- a/Makefile
+++ b/Makefile
@@ -368,7 +368,7 @@ Q = @
endif
CORE_VERSION = 43.0.0
-CPP_VERSION = 1.66.1
+CPP_VERSION = 1.66.2
CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/PYTHON-MANIFEST.in b/PYTHON-MANIFEST.in
index dd76dbcf7568a..b8ab04726ed9b 100644
--- a/PYTHON-MANIFEST.in
+++ b/PYTHON-MANIFEST.in
@@ -17,6 +17,7 @@ include src/python/grpcio/_parallel_compile_patch.py
include src/python/grpcio/_spawn_patch.py
include src/python/grpcio/commands.py
include src/python/grpcio/grpc_version.py
+include src/python/grpcio/python_version.py
include src/python/grpcio/grpc_core_dependencies.py
include src/python/grpcio/precompiled.py
include src/python/grpcio/support.py
diff --git a/WORKSPACE b/WORKSPACE
index f88a7790594cc..675233b2eb1ac 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -89,7 +89,7 @@ load("@com_google_protobuf//bazel:system_python.bzl", "system_python")
system_python(
name = "system_python",
- minimum_python_version = "3.7",
+ minimum_python_version = "3.8",
)
load("@system_python//:pip.bzl", system_pip_parse = "pip_parse")
diff --git a/_metadata.py b/_metadata.py
index c303844e81df9..f82d52aa3be5b 100644
--- a/_metadata.py
+++ b/_metadata.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/_metadata.py.template`!!!
-__version__ = """1.66.1"""
+__version__ = """1.66.2"""
diff --git a/bazel/grpc_python_deps.bzl b/bazel/grpc_python_deps.bzl
index dbfff526a1114..44eca11f6719b 100644
--- a/bazel/grpc_python_deps.bzl
+++ b/bazel/grpc_python_deps.bzl
@@ -38,9 +38,9 @@ def grpc_python_deps():
http_archive(
name = "cython",
build_file = "@com_github_grpc_grpc//third_party:cython.BUILD",
- sha256 = "a2da56cc22be823acf49741b9aa3aa116d4f07fa8e8b35a3cb08b8447b37c607",
- strip_prefix = "cython-0.29.35",
+ sha256 = "2ec7d66d23d6da2328fb24f5c1bec6c63a59ec2e91027766ab904f417e1078aa",
+ strip_prefix = "cython-3.0.11",
urls = [
- "https://github.com/cython/cython/archive/0.29.35.tar.gz",
+ "https://github.com/cython/cython/archive/3.0.11.tar.gz",
],
)
diff --git a/black.toml b/black.toml
index e655f7f8e7e80..1a397fea57998 100644
--- a/black.toml
+++ b/black.toml
@@ -15,6 +15,7 @@ extend-exclude = '''
| test/cpp/naming/resolver_component_tests_runner.py # AUTO-GENERATED
# AUTO-GENERATED from a template:
| grpc_version.py
+ | python_version.py
| src/python/grpcio/grpc_core_dependencies.py
| src/python/grpcio/grpc/_grpcio_metadata.py
# AUTO-GENERATED BY make_grpcio_tools.py
diff --git a/build_handwritten.yaml b/build_handwritten.yaml
index e5d708245365c..efde761ee68bb 100644
--- a/build_handwritten.yaml
+++ b/build_handwritten.yaml
@@ -16,7 +16,14 @@ settings:
csharp_major_version: 2
g_stands_for: gladiator
protobuf_version: 3.27.2
- version: 1.66.1
+ supported_python_versions:
+ - '3.8'
+ - '3.9'
+ - '3.10'
+ - '3.11'
+ - '3.12'
+ - '3.13'
+ version: 1.66.2
configs:
asan:
CC: clang
diff --git a/config.m4 b/config.m4
index 204bab4fa84c8..d10db92d3c1eb 100644
--- a/config.m4
+++ b/config.m4
@@ -1391,7 +1391,7 @@ if test "$PHP_GRPC" != "no"; then
-D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0 \
-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 \
-DGRPC_XDS_USER_AGENT_NAME_SUFFIX='"\"PHP\""' \
- -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX='"\"1.66.1\""')
+ -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX='"\"1.66.2\""')
PHP_ADD_BUILD_DIR($ext_builddir/src/core/channelz)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/client_channel)
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index 30a21961cdf53..5282c1088e351 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -22,7 +22,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-C++'
# TODO (mxyan): use version that match gRPC version when pod is stabilized
- version = '1.66.1'
+ version = '1.66.2'
s.version = version
s.summary = 'gRPC C++ library'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 20a421a64b364..45a5a4986361e 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-Core'
- version = '1.66.1'
+ version = '1.66.2'
s.version = version
s.summary = 'Core cross-platform gRPC library, written in C'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index be662213ca580..5934c57ef8b82 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-ProtoRPC'
- version = '1.66.1'
+ version = '1.66.2'
s.version = version
s.summary = 'RPC library for Protocol Buffers, based on gRPC'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 8c6563bf5cbb6..a2d695f0f377a 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-RxLibrary'
- version = '1.66.1'
+ version = '1.66.2'
s.version = version
s.summary = 'Reactive Extensions library for iOS/OSX.'
s.homepage = 'https://grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index a8c29f5140fe8..def22be590ec7 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -20,7 +20,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC'
- version = '1.66.1'
+ version = '1.66.2'
s.version = version
s.summary = 'gRPC client library for iOS/OSX'
s.homepage = 'https://grpc.io'
diff --git a/include/grpcpp/version_info.h b/include/grpcpp/version_info.h
index 65c803dd23e52..09dd05356fee9 100644
--- a/include/grpcpp/version_info.h
+++ b/include/grpcpp/version_info.h
@@ -20,8 +20,8 @@
#define GRPC_CPP_VERSION_MAJOR 1
#define GRPC_CPP_VERSION_MINOR 66
-#define GRPC_CPP_VERSION_PATCH 1
+#define GRPC_CPP_VERSION_PATCH 2
#define GRPC_CPP_VERSION_TAG ""
-#define GRPC_CPP_VERSION_STRING "1.66.1"
+#define GRPC_CPP_VERSION_STRING "1.66.2"
#endif // GRPCPP_VERSION_INFO_H
diff --git a/package.xml b/package.xml
index 7dc2dd38c4bb4..5dd2732298286 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
2019-09-24
- 1.66.1
- 1.66.1
+ 1.66.2
+ 1.66.2stable
@@ -22,7 +22,7 @@
Apache 2.0
-- gRPC Core 1.66.1 update
+- gRPC Core 1.66.2 update
diff --git a/setup.py b/setup.py
index b93637215ff47..48bfefe4dbac7 100644
--- a/setup.py
+++ b/setup.py
@@ -88,6 +88,7 @@
import _parallel_compile_patch
import _spawn_patch
import grpc_core_dependencies
+import python_version
import commands
import grpc_version
@@ -95,19 +96,21 @@
_parallel_compile_patch.monkeypatch_compile_maybe()
_spawn_patch.monkeypatch_spawn()
+
LICENSE = "Apache License 2.0"
-CLASSIFIERS = [
- "Development Status :: 5 - Production/Stable",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "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",
- "License :: OSI Approved :: Apache Software License",
-]
+CLASSIFIERS = (
+ [
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ ]
+ + [
+ f"Programming Language :: Python :: {x}"
+ for x in python_version.SUPPORTED_PYTHON_VERSIONS
+ ]
+ + ["License :: OSI Approved :: Apache Software License"]
+)
def _env_bool_value(env_name, default):
@@ -596,7 +599,7 @@ def cython_extensions_and_necessity():
packages=list(PACKAGES),
package_dir=PACKAGE_DIRECTORIES,
package_data=PACKAGE_DATA,
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
extras_require=EXTRAS_REQUIRES,
setup_requires=SETUP_REQUIRES,
diff --git a/src/csharp/build/dependencies.props b/src/csharp/build/dependencies.props
index 5dbb3eff43b7b..6643f2209cc6f 100644
--- a/src/csharp/build/dependencies.props
+++ b/src/csharp/build/dependencies.props
@@ -1,7 +1,7 @@
- 2.66.1
+ 2.66.23.27.2
diff --git a/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec
index 59a68392dbfa0..c25bef29a4e9e 100644
--- a/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them.
s.name = '!ProtoCompiler-gRPCCppPlugin'
- v = '1.66.1'
+ v = '1.66.2'
s.version = v
s.summary = 'The gRPC ProtoC plugin generates C++ files from .proto services.'
s.description = <<-DESC
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 0783a3aff5b89..8567f40efbe56 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them.
s.name = '!ProtoCompiler-gRPCPlugin'
- v = '1.66.1'
+ v = '1.66.2'
s.version = v
s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
s.description = <<-DESC
diff --git a/src/objective-c/GRPCClient/version.h b/src/objective-c/GRPCClient/version.h
index 80512d3558271..cede583421b56 100644
--- a/src/objective-c/GRPCClient/version.h
+++ b/src/objective-c/GRPCClient/version.h
@@ -22,4 +22,4 @@
// instead. This file can be regenerated from the template by running
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.66.1"
+#define GRPC_OBJC_VERSION_STRING @"1.66.2"
diff --git a/src/objective-c/tests/version.h b/src/objective-c/tests/version.h
index ef71bdd59ca8b..706c0a884b2ee 100644
--- a/src/objective-c/tests/version.h
+++ b/src/objective-c/tests/version.h
@@ -22,5 +22,5 @@
// instead. This file can be regenerated from the template by running
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.66.1"
+#define GRPC_OBJC_VERSION_STRING @"1.66.2"
#define GRPC_C_VERSION_STRING @"43.0.0"
diff --git a/src/php/composer.json b/src/php/composer.json
index dbd75dd1759ae..be43e07d6012a 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -2,7 +2,7 @@
"name": "grpc/grpc-dev",
"description": "gRPC library for PHP - for Development use only",
"license": "Apache-2.0",
- "version": "1.66.1",
+ "version": "1.66.2",
"require": {
"php": ">=7.0.0",
"google/protobuf": "^v3.3.0"
diff --git a/src/php/ext/grpc/version.h b/src/php/ext/grpc/version.h
index 708b7f27e6214..a89c28d27e2ac 100644
--- a/src/php/ext/grpc/version.h
+++ b/src/php/ext/grpc/version.h
@@ -20,6 +20,6 @@
#ifndef VERSION_H
#define VERSION_H
-#define PHP_GRPC_VERSION "1.66.1"
+#define PHP_GRPC_VERSION "1.66.2"
#endif /* VERSION_H */
diff --git a/src/python/grpcio/README.rst b/src/python/grpcio/README.rst
index eb2e8a9aa5990..cd529ad54f74d 100644
--- a/src/python/grpcio/README.rst
+++ b/src/python/grpcio/README.rst
@@ -8,9 +8,6 @@ Package for gRPC Python.
.. |compat_check_pypi| image:: https://python-compatibility-tools.appspot.com/one_badge_image?package=grpcio
:target: https://python-compatibility-tools.appspot.com/one_badge_target?package=grpcio
-Supported Python Versions
--------------------------
-Python >= 3.8
Installation
------------
diff --git a/src/python/grpcio/grpc/_grpcio_metadata.py b/src/python/grpcio/grpc/_grpcio_metadata.py
index 5c8fc73c7804c..da2b43ce0c167 100644
--- a/src/python/grpcio/grpc/_grpcio_metadata.py
+++ b/src/python/grpcio/grpc/_grpcio_metadata.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc/_grpcio_metadata.py.template`!!!
-__version__ = """1.66.1"""
+__version__ = """1.66.2"""
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index d1040efeac1ca..e3a971df015fc 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio/python_version.py b/src/python/grpcio/python_version.py
new file mode 100644
index 0000000000000..4faab63465c01
--- /dev/null
+++ b/src/python/grpcio/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_admin/MANIFEST.in b/src/python/grpcio_admin/MANIFEST.in
index eb7e029a4ba62..3cb626587701a 100644
--- a/src/python/grpcio_admin/MANIFEST.in
+++ b/src/python/grpcio_admin/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
recursive-include grpc_admin *.py
global-exclude *.pyc
include LICENSE
diff --git a/src/python/grpcio_admin/grpc_version.py b/src/python/grpcio_admin/grpc_version.py
index a710f21696d59..280740dd5d68c 100644
--- a/src/python/grpcio_admin/grpc_version.py
+++ b/src/python/grpcio_admin/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_admin/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_admin/python_version.py b/src/python/grpcio_admin/python_version.py
new file mode 100644
index 0000000000000..d47284cb06f3a
--- /dev/null
+++ b/src/python/grpcio_admin/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_admin/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_admin/setup.py b/src/python/grpcio_admin/setup.py
index 4e6bdbc8dd5b1..30d0ca62a143f 100644
--- a/src/python/grpcio_admin/setup.py
+++ b/src/python/grpcio_admin/setup.py
@@ -25,6 +25,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
CLASSIFIERS = [
@@ -44,6 +46,7 @@
)
SETUP_REQUIRES = INSTALL_REQUIRES
+
setuptools.setup(
name="grpcio-admin",
version=grpc_version.VERSION,
@@ -56,7 +59,7 @@
url="https://grpc.io",
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
)
diff --git a/src/python/grpcio_channelz/MANIFEST.in b/src/python/grpcio_channelz/MANIFEST.in
index 7354bef4235b7..14089064dce6b 100644
--- a/src/python/grpcio_channelz/MANIFEST.in
+++ b/src/python/grpcio_channelz/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
recursive-include grpc_channelz *.py *.pyi
global-exclude *.pyc
include LICENSE
diff --git a/src/python/grpcio_channelz/README.rst b/src/python/grpcio_channelz/README.rst
index 027c0d9e10c78..260564221435c 100644
--- a/src/python/grpcio_channelz/README.rst
+++ b/src/python/grpcio_channelz/README.rst
@@ -3,9 +3,6 @@ gRPC Python Channelz package
Channelz is a live debug tool in gRPC Python.
-Supported Python Versions
--------------------------
-Python >= 3.8
Dependencies
------------
diff --git a/src/python/grpcio_channelz/grpc_version.py b/src/python/grpcio_channelz/grpc_version.py
index a1e26b19eede3..a7bda9ffe99d6 100644
--- a/src/python/grpcio_channelz/grpc_version.py
+++ b/src/python/grpcio_channelz/grpc_version.py
@@ -12,6 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/grpc_version.py.template`!!!
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/python_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_channelz/python_version.py b/src/python/grpcio_channelz/python_version.py
new file mode 100644
index 0000000000000..74755fdb1a983
--- /dev/null
+++ b/src/python/grpcio_channelz/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_channelz/setup.py b/src/python/grpcio_channelz/setup.py
index 034ed814829a2..222a0d30ca352 100644
--- a/src/python/grpcio_channelz/setup.py
+++ b/src/python/grpcio_channelz/setup.py
@@ -25,6 +25,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
@@ -44,17 +46,19 @@ def run(self):
pass
-CLASSIFIERS = [
- "Development Status :: 5 - Production/Stable",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "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",
- "License :: OSI Approved :: Apache Software License",
-]
+CLASSIFIERS = (
+ [
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ ]
+ + [
+ f"Programming Language :: Python :: {x}"
+ for x in python_version.SUPPORTED_PYTHON_VERSIONS
+ ]
+ + ["License :: OSI Approved :: Apache Software License"]
+)
+
PACKAGE_DIRECTORIES = {
"": ".",
@@ -85,6 +89,7 @@ def run(self):
"build_package_protos": _NoOpCommand,
}
+
setuptools.setup(
name="grpcio-channelz",
version=grpc_version.VERSION,
@@ -97,7 +102,7 @@ def run(self):
url="https://grpc.io",
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
cmdclass=COMMAND_CLASS,
diff --git a/src/python/grpcio_csds/MANIFEST.in b/src/python/grpcio_csds/MANIFEST.in
index 4ecdf7428ed0c..3df9cc3cac29b 100644
--- a/src/python/grpcio_csds/MANIFEST.in
+++ b/src/python/grpcio_csds/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
recursive-include grpc_csds *.py
global-exclude *.pyc
include LICENSE
diff --git a/src/python/grpcio_csds/grpc_version.py b/src/python/grpcio_csds/grpc_version.py
index 89e5f26e424db..3dd4070e619f4 100644
--- a/src/python/grpcio_csds/grpc_version.py
+++ b/src/python/grpcio_csds/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csds/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_csds/python_version.py b/src/python/grpcio_csds/python_version.py
new file mode 100644
index 0000000000000..5d9e6b076eab1
--- /dev/null
+++ b/src/python/grpcio_csds/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csds/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_csds/setup.py b/src/python/grpcio_csds/setup.py
index 8fb4dab5341ec..1dc40333f039f 100644
--- a/src/python/grpcio_csds/setup.py
+++ b/src/python/grpcio_csds/setup.py
@@ -25,6 +25,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
CLASSIFIERS = [
@@ -57,7 +59,7 @@
url="https://grpc.io",
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
)
diff --git a/src/python/grpcio_csm_observability/MANIFEST.in b/src/python/grpcio_csm_observability/MANIFEST.in
index 754eb1d7e130f..afaf346488306 100644
--- a/src/python/grpcio_csm_observability/MANIFEST.in
+++ b/src/python/grpcio_csm_observability/MANIFEST.in
@@ -1,4 +1,5 @@
graft src/python/grpcio_csm_observability/grpc_csm_observability.egg-info
graft grpc_csm_observability
include grpc_version.py
+include python_version.py
include README.rst
diff --git a/src/python/grpcio_csm_observability/README.rst b/src/python/grpcio_csm_observability/README.rst
index f2c549afdb189..4725f758140ee 100644
--- a/src/python/grpcio_csm_observability/README.rst
+++ b/src/python/grpcio_csm_observability/README.rst
@@ -3,9 +3,6 @@ gRPC Python CSM Observability
Package for gRPC Python CSM Observability.
-Supported Python Versions
--------------------------
-Python >= 3.8
Installation
------------
diff --git a/src/python/grpcio_csm_observability/grpc_version.py b/src/python/grpcio_csm_observability/grpc_version.py
index 69249616d610e..13ad9fa792895 100644
--- a/src/python/grpcio_csm_observability/grpc_version.py
+++ b/src/python/grpcio_csm_observability/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csm_observability/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_csm_observability/python_version.py b/src/python/grpcio_csm_observability/python_version.py
new file mode 100644
index 0000000000000..4309c6a3ce0fa
--- /dev/null
+++ b/src/python/grpcio_csm_observability/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csm_observability/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_csm_observability/setup.py b/src/python/grpcio_csm_observability/setup.py
index c9a26db1ed5d0..ce4ec398a1d30 100644
--- a/src/python/grpcio_csm_observability/setup.py
+++ b/src/python/grpcio_csm_observability/setup.py
@@ -22,6 +22,8 @@
# Ensure we're in the proper directory whether or not we're being used by pip.
os.chdir(os.path.dirname(os.path.abspath(__file__)))
+import python_version
+
import grpc_version
CLASSIFIERS = [
@@ -58,6 +60,6 @@
classifiers=CLASSIFIERS,
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
)
diff --git a/src/python/grpcio_health_checking/MANIFEST.in b/src/python/grpcio_health_checking/MANIFEST.in
index 6644074dc22f3..f68d10ad18302 100644
--- a/src/python/grpcio_health_checking/MANIFEST.in
+++ b/src/python/grpcio_health_checking/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
recursive-include grpc_health *.py *.pyi
global-exclude *.pyc
include LICENSE
diff --git a/src/python/grpcio_health_checking/README.rst b/src/python/grpcio_health_checking/README.rst
index d13e671eae461..388fe3148fef3 100644
--- a/src/python/grpcio_health_checking/README.rst
+++ b/src/python/grpcio_health_checking/README.rst
@@ -3,9 +3,6 @@ gRPC Python Health Checking
Reference package for GRPC Python health checking.
-Supported Python Versions
--------------------------
-Python >= 3.8
Dependencies
------------
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index 95610f54335bd..7867a4b0661e3 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_health_checking/python_version.py b/src/python/grpcio_health_checking/python_version.py
new file mode 100644
index 0000000000000..96e4e2f0e06c2
--- /dev/null
+++ b/src/python/grpcio_health_checking/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py
index 97a407230976f..7d451e63ee6ff 100644
--- a/src/python/grpcio_health_checking/setup.py
+++ b/src/python/grpcio_health_checking/setup.py
@@ -24,6 +24,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
@@ -43,17 +45,18 @@ def run(self):
pass
-CLASSIFIERS = [
- "Development Status :: 5 - Production/Stable",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "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",
- "License :: OSI Approved :: Apache Software License",
-]
+CLASSIFIERS = (
+ [
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ ]
+ + [
+ f"Programming Language :: Python :: {x}"
+ for x in python_version.SUPPORTED_PYTHON_VERSIONS
+ ]
+ + ["License :: OSI Approved :: Apache Software License"]
+)
PACKAGE_DIRECTORIES = {
"": ".",
@@ -96,7 +99,7 @@ def run(self):
classifiers=CLASSIFIERS,
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
cmdclass=COMMAND_CLASS,
diff --git a/src/python/grpcio_observability/MANIFEST.in b/src/python/grpcio_observability/MANIFEST.in
index 8efdc8f6f2179..ffd7f86123163 100644
--- a/src/python/grpcio_observability/MANIFEST.in
+++ b/src/python/grpcio_observability/MANIFEST.in
@@ -4,5 +4,6 @@ graft grpc_root
graft third_party
include _parallel_compile_patch.py
include grpc_version.py
+include python_version.py
include observability_lib_deps.py
include README.rst
diff --git a/src/python/grpcio_observability/README.rst b/src/python/grpcio_observability/README.rst
index 11ba92f90f519..513ebe0211259 100644
--- a/src/python/grpcio_observability/README.rst
+++ b/src/python/grpcio_observability/README.rst
@@ -17,9 +17,6 @@ Note that while this approach enhances efficiency, it will introduce a slight de
time the data is collected and the time it becomes available through Python exporters.
-Supported Python Versions
--------------------------
-Python >= 3.8
Installation
------------
diff --git a/src/python/grpcio_observability/grpc_version.py b/src/python/grpcio_observability/grpc_version.py
index 20718d3e89886..a246d57fb7a99 100644
--- a/src/python/grpcio_observability/grpc_version.py
+++ b/src/python/grpcio_observability/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_observability/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_observability/python_version.py b/src/python/grpcio_observability/python_version.py
new file mode 100644
index 0000000000000..aca7367b65c09
--- /dev/null
+++ b/src/python/grpcio_observability/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_observability/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_observability/setup.py b/src/python/grpcio_observability/setup.py
index 60be8deee928f..1bf43a8170fa2 100644
--- a/src/python/grpcio_observability/setup.py
+++ b/src/python/grpcio_observability/setup.py
@@ -34,6 +34,7 @@
import _parallel_compile_patch
import observability_lib_deps
+import python_version
import grpc_version
@@ -287,7 +288,7 @@ def extension_modules():
classifiers=CLASSIFIERS,
ext_modules=extension_modules(),
packages=list(PACKAGES),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=[
"grpcio=={version}".format(version=grpc_version.VERSION),
"setuptools>=59.6.0",
diff --git a/src/python/grpcio_reflection/MANIFEST.in b/src/python/grpcio_reflection/MANIFEST.in
index eefb53d31f8da..547bdd2759792 100644
--- a/src/python/grpcio_reflection/MANIFEST.in
+++ b/src/python/grpcio_reflection/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
recursive-include grpc_reflection *.py *.pyi
global-exclude *.pyc
include LICENSE
diff --git a/src/python/grpcio_reflection/README.rst b/src/python/grpcio_reflection/README.rst
index b954108cc45b1..abb54a57f1430 100644
--- a/src/python/grpcio_reflection/README.rst
+++ b/src/python/grpcio_reflection/README.rst
@@ -3,9 +3,6 @@ gRPC Python Reflection package
Reference package for reflection in GRPC Python.
-Supported Python Versions
--------------------------
-Python >= 3.8
Dependencies
------------
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 4d120f6aa5ed5..d5d7410c56c6d 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_reflection/python_version.py b/src/python/grpcio_reflection/python_version.py
new file mode 100644
index 0000000000000..e94e725d14d78
--- /dev/null
+++ b/src/python/grpcio_reflection/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py
index fd2cd7eb872f1..ca7e23219fd09 100644
--- a/src/python/grpcio_reflection/setup.py
+++ b/src/python/grpcio_reflection/setup.py
@@ -25,6 +25,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
@@ -44,17 +46,18 @@ def run(self):
pass
-CLASSIFIERS = [
- "Development Status :: 5 - Production/Stable",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "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",
- "License :: OSI Approved :: Apache Software License",
-]
+CLASSIFIERS = (
+ [
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ ]
+ + [
+ f"Programming Language :: Python :: {x}"
+ for x in python_version.SUPPORTED_PYTHON_VERSIONS
+ ]
+ + ["License :: OSI Approved :: Apache Software License"]
+)
PACKAGE_DIRECTORIES = {
"": ".",
@@ -97,7 +100,7 @@ def run(self):
url="https://grpc.io",
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
cmdclass=COMMAND_CLASS,
diff --git a/src/python/grpcio_status/MANIFEST.in b/src/python/grpcio_status/MANIFEST.in
index 3ecc88ec2dd3f..62439177f19f8 100644
--- a/src/python/grpcio_status/MANIFEST.in
+++ b/src/python/grpcio_status/MANIFEST.in
@@ -1,4 +1,5 @@
include grpc_version.py
+include python_version.py
include grpc_status/google/rpc/status.proto
recursive-include grpc_status *.py
global-exclude *.pyc
diff --git a/src/python/grpcio_status/README.rst b/src/python/grpcio_status/README.rst
index bfc753c799e5e..c2c8efcc0c758 100644
--- a/src/python/grpcio_status/README.rst
+++ b/src/python/grpcio_status/README.rst
@@ -3,9 +3,6 @@ gRPC Python Status Proto
Reference package for GRPC Python status proto mapping.
-Supported Python Versions
--------------------------
-Python >= 3.8
Dependencies
------------
diff --git a/src/python/grpcio_status/grpc_version.py b/src/python/grpcio_status/grpc_version.py
index 28352f50d5051..977bcbfcb2298 100644
--- a/src/python/grpcio_status/grpc_version.py
+++ b/src/python/grpcio_status/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_status/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_status/python_version.py b/src/python/grpcio_status/python_version.py
new file mode 100644
index 0000000000000..02de6673e4b95
--- /dev/null
+++ b/src/python/grpcio_status/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_status/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/src/python/grpcio_status/setup.py b/src/python/grpcio_status/setup.py
index f70013774c9b0..f98032d28b1e9 100644
--- a/src/python/grpcio_status/setup.py
+++ b/src/python/grpcio_status/setup.py
@@ -24,6 +24,8 @@
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Break import-style to ensure we can actually find our local modules.
+import python_version
+
import grpc_version
@@ -43,17 +45,18 @@ def run(self):
pass
-CLASSIFIERS = [
- "Development Status :: 5 - Production/Stable",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- "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",
- "License :: OSI Approved :: Apache Software License",
-]
+CLASSIFIERS = (
+ [
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ ]
+ + [
+ f"Programming Language :: Python :: {x}"
+ for x in python_version.SUPPORTED_PYTHON_VERSIONS
+ ]
+ + ["License :: OSI Approved :: Apache Software License"]
+)
PACKAGE_DIRECTORIES = {
"": ".",
@@ -93,7 +96,7 @@ def run(self):
classifiers=CLASSIFIERS,
package_dir=PACKAGE_DIRECTORIES,
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
cmdclass=COMMAND_CLASS,
)
diff --git a/src/python/grpcio_testing/README.rst b/src/python/grpcio_testing/README.rst
index 1b8de5dca190f..34fe05be9dc41 100644
--- a/src/python/grpcio_testing/README.rst
+++ b/src/python/grpcio_testing/README.rst
@@ -3,9 +3,6 @@ gRPC Python Testing Package
Testing utilities for gRPC Python
-Supported Python Versions
--------------------------
-Python >= 3.8
Dependencies
------------
diff --git a/src/python/grpcio_testing/grpc_version.py b/src/python/grpcio_testing/grpc_version.py
index 62300cfbbfc73..cd8920becfcc7 100644
--- a/src/python/grpcio_testing/grpc_version.py
+++ b/src/python/grpcio_testing/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_testing/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 23aae480c73cb..9f4eadbf27482 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index 271af9fd3251b..c328f57f26869 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -14,5 +14,5 @@
# GRPC contains the General RPC module.
module GRPC
- VERSION = '1.66.1'
+ VERSION = '1.66.2'
end
diff --git a/src/ruby/nativedebug/version.rb b/src/ruby/nativedebug/version.rb
index 7acffa4a346b9..f1a98f0b0022d 100644
--- a/src/ruby/nativedebug/version.rb
+++ b/src/ruby/nativedebug/version.rb
@@ -14,6 +14,6 @@
module GRPC
module NativeDebug
- VERSION = '1.66.1'
+ VERSION = '1.66.2'
end
end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index a6d79ae840c65..a95d553b175b4 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -14,6 +14,6 @@
module GRPC
module Tools
- VERSION = '1.66.1'
+ VERSION = '1.66.2'
end
end
diff --git a/templates/src/python/grpcio/python_version.py.template b/templates/src/python/grpcio/python_version.py.template
new file mode 100644
index 0000000000000..8c8da43918429
--- /dev/null
+++ b/templates/src/python/grpcio/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_admin/python_version.py.template b/templates/src/python/grpcio_admin/python_version.py.template
new file mode 100644
index 0000000000000..d904c1d722817
--- /dev/null
+++ b/templates/src/python/grpcio_admin/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_admin/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_channelz/grpc_version.py.template b/templates/src/python/grpcio_channelz/grpc_version.py.template
index 75d510cd17bde..999c102525772 100644
--- a/templates/src/python/grpcio_channelz/grpc_version.py.template
+++ b/templates/src/python/grpcio_channelz/grpc_version.py.template
@@ -14,6 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/grpc_version.py.template`!!!
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/python_version.py.template`!!!
VERSION = '${settings.python_version.pep440()}'
diff --git a/templates/src/python/grpcio_channelz/python_version.py.template b/templates/src/python/grpcio_channelz/python_version.py.template
new file mode 100644
index 0000000000000..e0630bb7aa19b
--- /dev/null
+++ b/templates/src/python/grpcio_channelz/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_csds/python_version.py.template b/templates/src/python/grpcio_csds/python_version.py.template
new file mode 100644
index 0000000000000..a5cc8627ecb2a
--- /dev/null
+++ b/templates/src/python/grpcio_csds/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csds/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_csm_observability/python_version.py.template b/templates/src/python/grpcio_csm_observability/python_version.py.template
new file mode 100644
index 0000000000000..2aa52d73111fe
--- /dev/null
+++ b/templates/src/python/grpcio_csm_observability/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csm_observability/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_health_checking/python_version.py.template b/templates/src/python/grpcio_health_checking/python_version.py.template
new file mode 100644
index 0000000000000..6646f69979a9a
--- /dev/null
+++ b/templates/src/python/grpcio_health_checking/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_observability/python_version.py.template b/templates/src/python/grpcio_observability/python_version.py.template
new file mode 100644
index 0000000000000..f82b1c2d7a52a
--- /dev/null
+++ b/templates/src/python/grpcio_observability/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_observability/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_reflection/python_version.py.template b/templates/src/python/grpcio_reflection/python_version.py.template
new file mode 100644
index 0000000000000..29d9d47cffc52
--- /dev/null
+++ b/templates/src/python/grpcio_reflection/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/src/python/grpcio_status/python_version.py.template b/templates/src/python/grpcio_status/python_version.py.template
new file mode 100644
index 0000000000000..cb6aeda5a05d0
--- /dev/null
+++ b/templates/src/python/grpcio_status/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_status/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/tools/distrib/python/grpc_version.py.template b/templates/tools/distrib/python/grpc_version.py.template
index 5031353b871bb..0d36735631d7e 100644
--- a/templates/tools/distrib/python/grpc_version.py.template
+++ b/templates/tools/distrib/python/grpc_version.py.template
@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpc_version.py.template`!!!
VERSION = '${settings.python_version.pep440()}'
PROTOBUF_VERSION = '${settings.protobuf_version}'
diff --git a/templates/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py.template b/templates/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py.template
new file mode 100644
index 0000000000000..6e06a5a4bb8ab
--- /dev/null
+++ b/templates/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/tools/distrib/python/grpcio_tools/python_version.py.template b/templates/tools/distrib/python/grpcio_tools/python_version.py.template
new file mode 100644
index 0000000000000..a40390110d870
--- /dev/null
+++ b/templates/tools/distrib/python/grpcio_tools/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/tools/distrib/python/xds_protos/grpc_version.py.template b/templates/tools/distrib/python/xds_protos/grpc_version.py.template
index 7808e28e2197e..ba301d6b8658a 100644
--- a/templates/tools/distrib/python/xds_protos/grpc_version.py.template
+++ b/templates/tools/distrib/python/xds_protos/grpc_version.py.template
@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/xds_protos/grpc_version.py.template`!!!
VERSION = '${settings.python_version.pep440()}'
PROTOBUF_VERSION = '${settings.protobuf_version}'
diff --git a/templates/tools/distrib/python/xds_protos/python_version.py.template b/templates/tools/distrib/python/xds_protos/python_version.py.template
new file mode 100644
index 0000000000000..6f9d0562f32ab
--- /dev/null
+++ b/templates/tools/distrib/python/xds_protos/python_version.py.template
@@ -0,0 +1,22 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 gRPC authors.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/xds_protos/python_version.py.template`!!!
+
+ SUPPORTED_PYTHON_VERSIONS = ${settings.supported_python_versions}
+
+ MIN_PYTHON_VERSION = ${settings.min_python_version}
+ MAX_PYTHON_VERSION = ${settings.max_python_version}
diff --git a/templates/tools/dockerfile/ccache_crosscompile.include b/templates/tools/dockerfile/ccache_crosscompile.include
new file mode 100644
index 0000000000000..04136e01b5365
--- /dev/null
+++ b/templates/tools/dockerfile/ccache_crosscompile.include
@@ -0,0 +1,14 @@
+#=================
+# Install ccache
+
+# Install ccache from source since ccache 3.x packaged with most linux distributions
+# does not support Redis backend for caching.
+RUN unset CMAKE_TOOLCHAIN_FILE && unset AS AR CC CPP CXX LD STRIP OBJCOPY ${'\\'}
+ && curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz ${'\\'}
+ && tar -zxf ccache.tar.gz ${'\\'}
+ && cd ccache-4.7.5 ${'\\'}
+ && mkdir build && cd build ${'\\'}
+ && cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. ${'\\'}
+ && make -j4 && make install ${'\\'}
+ && cd ../.. ${'\\'}
+ && rm -rf ccache-4.7.5 ccache.tar.gz
diff --git a/templates/tools/dockerfile/compile_python_313.include b/templates/tools/dockerfile/compile_python_313.include
new file mode 100644
index 0000000000000..e7d4bd38a9b54
--- /dev/null
+++ b/templates/tools/dockerfile/compile_python_313.include
@@ -0,0 +1,21 @@
+#=================
+# Compile CPython 3.13.0rc2 from source
+
+RUN apt-get update && apt-get install -y zlib1g-dev libssl-dev libsqlite3-dev && apt-get clean
+RUN apt-get update && apt-get install -y jq build-essential libffi-dev && apt-get clean
+
+RUN cd /tmp && ${'\\'}
+ wget -q https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc2.tgz && ${'\\'}
+ tar xzvf Python-3.13.0rc2.tgz && ${'\\'}
+ cd Python-3.13.0rc2 && ${'\\'}
+ ./configure && ${'\\'}
+ make -j4 && ${'\\'}
+ make install
+
+
+RUN cd /tmp && ${'\\'}
+ echo "ad7f44153649e27ec385e7633e853e03 Python-3.13.0rc2.tgz" > checksum.md5 && ${'\\'}
+ md5sum -c checksum.md5
+
+RUN python3.13 -m ensurepip && ${'\\'}
+ python3.13 -m pip install coverage
diff --git a/templates/tools/dockerfile/git_config.include b/templates/tools/dockerfile/git_config.include
new file mode 100644
index 0000000000000..ad2ed5f3614ea
--- /dev/null
+++ b/templates/tools/dockerfile/git_config.include
@@ -0,0 +1,22 @@
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
+RUN git config --global --add safe.directory /var/local/jenkins/grpc
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
+RUN git config --global protocol.file.allow always
\ No newline at end of file
diff --git a/templates/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile.template
new file mode 100644
index 0000000000000..94671a0a585a4
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile.template
@@ -0,0 +1,57 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # The aarch64 wheels are being crosscompiled to allow running the build
+ # on x64 machine. The dockcross/linux-armv7 image is a x86_64
+ # image with crosscompilation toolchain installed
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile.template`!!!
+ FROM dockcross/linux-armv7
+
+ <%text>RUN apt update && apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev \
+ libnss3-dev libssl-dev libreadline-dev libffi-dev && apt-get clean%text>
+
+ ADD install_python_for_wheel_crosscompilation.sh /scripts/install_python_for_wheel_crosscompilation.sh
+
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.8.8" "3.8.8" /opt/python/cp38-cp38
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.9.2" "3.9.2" /opt/python/cp39-cp39
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.10.0" "3.10.0rc1" /opt/python/cp310-cp310
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.11.0" "3.11.0rc1" /opt/python/cp311-cp311
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.12.0" "3.12.0rc2" /opt/python/cp312-cp312
+ RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.13.0" "3.13.0rc2" /opt/python/cp313-cp313
+
+ ENV AUDITWHEEL_ARCH armv7l
+ ENV AUDITWHEEL_PLAT linux_armv7l
+
+ <%include file="../ccache_crosscompile.include"/>
+
+ # The dockcross base of this image sets CC and CXX to absolute paths, which makes it impossible to redirect their invocations
+ # to ccache via a symlink. Use relative paths instead.
+ <%text>
+ ENV CC ${CROSS_TRIPLE}-gcc
+ ENV CXX ${CROSS_TRIPLE}-g++
+ %text>
+
+ # For historical reasons, task_runner.py the script under docker container using "bash -l"
+ # which loads /etc/profile on startup. dockcross/linux-armv7 is based on an image where
+ # /etc/profile overwrites contents of PATH (for security reasons) when run as root.
+ # That causes the crosscompiler binaries located under /usr/xcc/armv7-unknown-linux-gnueabi/bin
+ # to be removed from PATH. Since in our builds we don't need the /etc/profile for anything, we can just
+ # truncate it.
+ # TODO(jtattermusch): Remove this hack when possible.
+ RUN echo "# file contents removed to avoid resetting PATH set by the docker image" >/etc/profile
+
+ <%include file="../git_config.include"/>
diff --git a/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile.template
new file mode 100644
index 0000000000000..31c1be4aed5b3
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile.template
@@ -0,0 +1,28 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile.template`!!!
+
+ FROM dockcross/manylinux2014-aarch64:20240812-60fa1b0
+
+ # manylinux_2_17 is the preferred alias of manylinux2014
+ ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
+
+ <%include file="../python_pip_builds.include"/>
+
+ <%include file="../ccache_crosscompile.include"/>
+
+ <%include file="../git_config.include"/>
diff --git a/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile.template
new file mode 100644
index 0000000000000..cf68868594e31
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile.template
@@ -0,0 +1,33 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # Docker file for building gRPC manylinux Python artifacts.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile.template`!!!
+
+ FROM quay.io/pypa/manylinux2014_x86_64:2024-09-09-f386546
+
+ # manylinux_2_17 is the preferred alias of manylinux2014
+ ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
+
+ # TODO(jtattermusch): revisit which of the deps are really required
+ RUN yum update -y && yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
+
+ <%include file="../python_pip_builds.include"/>
+
+ <%include file="../ccache.include"/>
+
+ <%include file="../git_config.include"/>
\ No newline at end of file
diff --git a/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile.template
new file mode 100644
index 0000000000000..d681fd4735455
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile.template
@@ -0,0 +1,34 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # Docker file for building gRPC manylinux Python artifacts.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile.template`!!!
+
+ FROM quay.io/pypa/manylinux2014_i686:2024-09-09-f386546
+
+ # manylinux_2_17 is the preferred alias of manylinux2014
+ ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
+
+ # TODO(jtattermusch): revisit which of the deps are really required
+ RUN yum update -y && yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
+
+ <%include file="../python_pip_builds.include"/>
+
+ <%include file="../ccache.include"/>
+
+
+ <%include file="../git_config.include"/>
\ No newline at end of file
diff --git a/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile.template
new file mode 100644
index 0000000000000..dfb62902711fe
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile.template
@@ -0,0 +1,27 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile.template`!!!
+
+ FROM quay.io/pypa/musllinux_1_1_x86_64:2024-09-09-f386546
+
+ <%include file="../python_pip_builds.include"/>
+
+ <%include file="../ccache.include"/>
+
+ <%include file="../git_config.include"/>
+
+ RUN apk add openssl openssl-dev
\ No newline at end of file
diff --git a/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile.template b/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile.template
new file mode 100644
index 0000000000000..6f7ca5a52a8a0
--- /dev/null
+++ b/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile.template
@@ -0,0 +1,25 @@
+%YAML 1.2
+--- |
+ # Copyright 2024 The gRPC Authors
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile.template`!!!
+
+ FROM quay.io/pypa/musllinux_1_1_i686:2024-09-09-f386546
+
+ <%include file="../python_pip_builds.include"/>
+
+ <%include file="../ccache.include"/>
+
+ <%include file="../git_config.include"/>
diff --git a/templates/tools/dockerfile/python_pip_builds.include b/templates/tools/dockerfile/python_pip_builds.include
new file mode 100644
index 0000000000000..e573a06333822
--- /dev/null
+++ b/templates/tools/dockerfile/python_pip_builds.include
@@ -0,0 +1,8 @@
+#===================================
+# Install Python build requirements
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
\ No newline at end of file
diff --git a/templates/tools/dockerfile/test/python_debian11_default_x64/Dockerfile.template b/templates/tools/dockerfile/test/python_debian11_default_x64/Dockerfile.template
index 0981763f21d31..a385ec8d60267 100644
--- a/templates/tools/dockerfile/test/python_debian11_default_x64/Dockerfile.template
+++ b/templates/tools/dockerfile/test/python_debian11_default_x64/Dockerfile.template
@@ -24,6 +24,7 @@
<%include file="../../compile_python_310.include"/>
<%include file="../../compile_python_311.include"/>
<%include file="../../compile_python_312.include"/>
+ <%include file="../../compile_python_313.include"/>
# Python test coverage requires libsqlite3, and it have
# to be installed before Python.
diff --git a/test/cpp/interop/xds_interop_client.cc b/test/cpp/interop/xds_interop_client.cc
index 8480c24691df5..a4fe76c976476 100644
--- a/test/cpp/interop/xds_interop_client.cc
+++ b/test/cpp/interop/xds_interop_client.cc
@@ -159,11 +159,6 @@ class TestClient {
AsyncClientCall* call = new AsyncClientCall;
for (const auto& data : config.metadata) {
call->context.AddMetadata(data.first, data.second);
- // TODO(@donnadionne): move deadline to separate proto.
- if (data.first == "rpc-behavior" && data.second == "keep-open") {
- deadline =
- std::chrono::system_clock::now() + std::chrono::seconds(INT_MAX);
- }
}
SimpleRequest request;
request.set_response_size(config.response_payload_size);
@@ -198,11 +193,6 @@ class TestClient {
AsyncClientCall* call = new AsyncClientCall;
for (const auto& data : config.metadata) {
call->context.AddMetadata(data.first, data.second);
- // TODO(@donnadionne): move deadline to separate proto.
- if (data.first == "rpc-behavior" && data.second == "keep-open") {
- deadline =
- std::chrono::system_clock::now() + std::chrono::seconds(INT_MAX);
- }
}
call->context.set_deadline(deadline);
call->result.saved_request_id = saved_request_id;
diff --git a/test/distrib/bazel/python/WORKSPACE b/test/distrib/bazel/python/WORKSPACE
index 3567f8a2ac073..b56055fa741e1 100644
--- a/test/distrib/bazel/python/WORKSPACE
+++ b/test/distrib/bazel/python/WORKSPACE
@@ -29,7 +29,7 @@ load("@com_google_protobuf//bazel:system_python.bzl", "system_python")
system_python(
name = "system_python",
- minimum_python_version = "3.7",
+ minimum_python_version = "3.8",
)
load("@system_python//:pip.bzl", "pip_parse")
diff --git a/tools/bazelify_tests/dockerimage_current_versions.bzl b/tools/bazelify_tests/dockerimage_current_versions.bzl
index 06a13752f0cc8..00888202c80d2 100644
--- a/tools/bazelify_tests/dockerimage_current_versions.bzl
+++ b/tools/bazelify_tests/dockerimage_current_versions.bzl
@@ -63,12 +63,12 @@ DOCKERIMAGE_CURRENT_VERSIONS = {
"tools/dockerfile/grpc_artifact_centos6_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_centos6_x64@sha256:3285047265ea2b7c5d4df4c769b2d05f56288d947c75e16d27ae2dee693f791b",
"tools/dockerfile/grpc_artifact_centos6_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_centos6_x86@sha256:19783239da92208f0f39cf563529cd02e889920497ef81c60d20391fa998af62",
"tools/dockerfile/grpc_artifact_protoc_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_protoc_aarch64@sha256:a0f6b544c1b2fa75f73b26cb28281917153304e9df2789e93de0732494e6b651",
- "tools/dockerfile/grpc_artifact_python_linux_armv7.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7@sha256:f109d6c22cadb053f6843a66ee827d74f34d6cbf75a32f455a9da099ed1bdc9c",
- "tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64@sha256:3f0407d4db904b35a7665c2222db039994cd0c9bdb1a073a653ff8e6940081c9",
- "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64@sha256:89329900ec7fedc57cd89690acd34d07d726f6b896f60df987867737d0a0f5a8",
- "tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86@sha256:8fce8e094b00935dc1f2640b4c2b10216c5a8711c0f4444efbafcd8c355a75a8",
- "tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x64@sha256:c8e8eb24942a2910197cf5481d61e7cbce68b57bd6f35fae878b043b1f2c38bb",
- "tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x86@sha256:c288f83435186ee675d004ee52c93195a51201bf2b5fe92581584d977a2499a3",
+ "tools/dockerfile/grpc_artifact_python_linux_armv7.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7@sha256:137616275fe59bf89849f7503779f9a5d9668dbf395fcc79a8221a8c38fa5bac",
+ "tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64@sha256:ad3233be3c3ad9e0c4b60f0176a853713a35e5c84ec9d9703996c67fa3e811b6",
+ "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64@sha256:0e102df67f31aeb6afe68250603288c2f1c98ccf360d1c42d751b8451da94b48",
+ "tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86@sha256:527e2e9ec4db0c52a53b50abfd59907a1b7e221168dc401686f6a48d33bddc5c",
+ "tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x64@sha256:94b57e5ea31ebc29af734474bcaff3074770778e5d27557cdc06d755ee8bc7ed",
+ "tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x86@sha256:edf4a0c8333c9309e52f323aa7315bbc0e5643216613cab4ecd2bce3d1ec26c0",
"tools/dockerfile/interoptest/grpc_interop_aspnetcore.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_aspnetcore@sha256:8e2e732e78724a8382c340dca72e7653c5f82c251a3110fa2874cc00ba538878",
"tools/dockerfile/interoptest/grpc_interop_cxx.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_cxx@sha256:e5a474d33773d52ec6a8abbe2d61ee0c2a9c2b5f48793a5ea3b82c4445becf3f",
"tools/dockerfile/interoptest/grpc_interop_dart.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_dart@sha256:4915a280788126dad029858eb384dbbef2dc18cadccb434df6450dfd7a4929f2",
@@ -109,7 +109,7 @@ DOCKERIMAGE_CURRENT_VERSIONS = {
"tools/dockerfile/test/php7_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/php7_debian11_x64@sha256:34b02fd66832ebf49601bef95632753e6710a75755401c21332d50056ccd52d2",
"tools/dockerfile/test/python_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_alpine_x64@sha256:c541f0ce00ca542ed4ae86870b6b73c929227127c13e532d98a9afd28604b830",
"tools/dockerfile/test/python_debian11_default_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_debian11_default_arm64@sha256:fccca33a655c7aa89dd7ebd9492cbcc1f636bd2a004cd939d1982cfce3d68326",
- "tools/dockerfile/test/python_debian11_default_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_debian11_default_x64@sha256:4c539fc93d343324309939c2964204c90f4054cd9eeed093af315cb0f0ef7c26",
+ "tools/dockerfile/test/python_debian11_default_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_debian11_default_x64@sha256:8beca964d6bbb80a8cb4c4628c25e9702b007c97113e74e589fa50c15000738d",
"tools/dockerfile/test/rbe_ubuntu2004.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rbe_ubuntu2004@sha256:b3eb1a17b7b091e3c5648a803076b2c40601242ff91c04d55997af6641305f68",
"tools/dockerfile/test/ruby_debian11_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_arm64@sha256:d2e79919b2e2d4cc36a29682ecb5170641df4fb506cfb453978ffdeb8a841bd9",
"tools/dockerfile/test/ruby_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64@sha256:6e8b4696ba0661f11a31ed0992a94d2efcd889a018f57160f0e2fb62963f3593",
diff --git a/tools/bazelify_tests/test/BUILD b/tools/bazelify_tests/test/BUILD
index 7deb5fcd640fe..2ade050e6df42 100644
--- a/tools/bazelify_tests/test/BUILD
+++ b/tools/bazelify_tests/test/BUILD
@@ -269,8 +269,8 @@ grpc_build_artifact_task(
# Python artifact build tasks
grpc_build_artifact_task(
- name = "artifact_python_linux_x64_manylinux2014_cp312",
- build_script = "build_artifact_python_linux_x64_cp312.sh",
+ name = "artifact_python_linux_x64_manylinux2014_cp313",
+ build_script = "build_artifact_python_linux_x64_cp313.sh",
docker_image_version = "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version",
)
@@ -287,7 +287,7 @@ grpc_build_artifact_task(
name = "package_python_linux",
# TODO(jtattermusch): add more python artifacts once they are migrated from artifact_targets.py
artifact_deps = [
- "artifact_python_linux_x64_manylinux2014_cp312",
+ "artifact_python_linux_x64_manylinux2014_cp313",
"artifact_python_linux_x64_manylinux2014_cp39",
],
build_script = "build_package_python_linux.sh",
@@ -421,7 +421,7 @@ test_suite(
":artifact_protoc_linux_aarch64_build_test",
":artifact_protoc_linux_x64_build_test",
":artifact_protoc_linux_x86_build_test",
- ":artifact_python_linux_x64_manylinux2014_cp312_build_test",
+ ":artifact_python_linux_x64_manylinux2014_cp313_build_test",
":artifact_python_linux_x64_manylinux2014_cp39_build_test",
":package_csharp_linux_build_test",
":package_python_linux_build_test",
diff --git a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp313.sh
similarity index 93%
rename from tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh
rename to tools/bazelify_tests/test/build_artifact_python_linux_x64_cp313.sh
index 8604176c82e85..d8a0b6b2ec2f0 100755
--- a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh
+++ b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp313.sh
@@ -17,8 +17,8 @@ set -ex
# env variable values extracted from PythonArtifact in tools/run_tests/artifacts/artifact_targets.py
# TODO(jtattermusch): find a better way of configuring the python artifact build (the current approach mostly serves as a demonstration)
-export PYTHON=/opt/python/cp312-cp312/bin/python
-export PIP=/opt/python/cp312-cp312/bin/pip
+export PYTHON=/opt/python/cp313-cp313/bin/python
+export PIP=/opt/python/cp313-cp313/bin/pip
export GRPC_SKIP_PIP_CYTHON_UPGRADE=TRUE
export GRPC_RUN_AUDITWHEEL_REPAIR=TRUE
export GRPC_BUILD_GRPCIO_TOOLS_DEPENDENTS=TRUE
diff --git a/tools/buildgen/plugins/expand_supported_python_versions.py b/tools/buildgen/plugins/expand_supported_python_versions.py
new file mode 100644
index 0000000000000..8cc4e814d74a3
--- /dev/null
+++ b/tools/buildgen/plugins/expand_supported_python_versions.py
@@ -0,0 +1,33 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Buildgen python version plugin
+
+This parses the list of supported python versions from the yaml build file, and
+creates custom strings for the minimum and maximum supported python versions.
+
+"""
+
+
+def mako_plugin(dictionary):
+ """Expand version numbers:
+ - for each language, ensure there's a language_version tag in
+ settings (defaulting to the master version tag)
+ - expand version strings to major, minor, patch, and tag
+ """
+
+ settings = dictionary["settings"]
+
+ supported_python_versions = settings["supported_python_versions"]
+ settings["min_python_version"] = supported_python_versions[0]
+ settings["max_python_version"] = supported_python_versions[-1]
diff --git a/tools/distrib/install_all_python_modules.sh b/tools/distrib/install_all_python_modules.sh
index b389df483776f..b715eb8cc1795 100755
--- a/tools/distrib/install_all_python_modules.sh
+++ b/tools/distrib/install_all_python_modules.sh
@@ -31,7 +31,7 @@ BASEDIR=$(realpath "$BASEDIR")/../..
PACKAGES="grpcio_channelz grpcio_csds grpcio_admin grpcio_health_checking grpcio_reflection grpcio_status grpcio_testing grpcio_csm_observability grpcio_tests"
(cd "$BASEDIR";
- pip install --upgrade "cython<3.0.0rc1";
+ pip install --upgrade "cython<4.0.0rc1";
python setup.py install;
pushd tools/distrib/python/grpcio_tools;
../make_grpcio_tools.py
diff --git a/tools/distrib/python/grpc_version.py b/tools/distrib/python/grpc_version.py
index 13f1c22322303..1accd4bd845f8 100644
--- a/tools/distrib/python/grpc_version.py
+++ b/tools/distrib/python/grpc_version.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
PROTOBUF_VERSION = '3.27.2'
diff --git a/tools/distrib/python/grpcio_tools/MANIFEST.in b/tools/distrib/python/grpcio_tools/MANIFEST.in
index 1393de652a86a..e74fde44b9175 100644
--- a/tools/distrib/python/grpcio_tools/MANIFEST.in
+++ b/tools/distrib/python/grpcio_tools/MANIFEST.in
@@ -1,10 +1,12 @@
include _parallel_compile_patch.py
include _spawn_patch.py
include grpc_version.py
+include python_version.py
include protoc_deps.py
include protoc_lib_deps.py
include README.rst
include grpc_tools/grpc_version.py
+include grpc_tools/python_version.py
graft grpc_tools
graft grpc_root
graft third_party
diff --git a/tools/distrib/python/grpcio_tools/grpc_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_tools/grpc_version.py
index 3c68e47919302..cc160f9fcfac7 100644
--- a/tools/distrib/python/grpcio_tools/grpc_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_tools/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_tools/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
diff --git a/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py b/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py
new file mode 100644
index 0000000000000..0dcc71c1fdab7
--- /dev/null
+++ b/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_tools/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index 08987b226fb06..391cffa5fd287 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -14,5 +14,5 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
PROTOBUF_VERSION = '3.27.2'
diff --git a/tools/distrib/python/grpcio_tools/python_version.py b/tools/distrib/python/grpcio_tools/python_version.py
new file mode 100644
index 0000000000000..fc59f030fbbd8
--- /dev/null
+++ b/tools/distrib/python/grpcio_tools/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py
index 1318b94fa1f10..b1a513417b37b 100644
--- a/tools/distrib/python/grpcio_tools/setup.py
+++ b/tools/distrib/python/grpcio_tools/setup.py
@@ -39,6 +39,7 @@
import _parallel_compile_patch
import _spawn_patch
import protoc_lib_deps
+import python_version
import grpc_version
@@ -329,7 +330,7 @@ def extension_modules():
classifiers=CLASSIFIERS,
ext_modules=extension_modules(),
packages=setuptools.find_packages("."),
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=[
"protobuf>=5.26.1,<6.0dev",
"grpcio>={version}".format(version=grpc_version.VERSION),
diff --git a/tools/distrib/python/xds_protos/MANIFEST.in b/tools/distrib/python/xds_protos/MANIFEST.in
index d83c49b9186de..3fea17ba661c8 100644
--- a/tools/distrib/python/xds_protos/MANIFEST.in
+++ b/tools/distrib/python/xds_protos/MANIFEST.in
@@ -1 +1,2 @@
include grpc_version.py
+include python_version.py
\ No newline at end of file
diff --git a/tools/distrib/python/xds_protos/grpc_version.py b/tools/distrib/python/xds_protos/grpc_version.py
index 0a1cd5ab1e552..e2374ca9996c3 100644
--- a/tools/distrib/python/xds_protos/grpc_version.py
+++ b/tools/distrib/python/xds_protos/grpc_version.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/xds_protos/grpc_version.py.template`!!!
-VERSION = '1.66.1'
+VERSION = '1.66.2'
PROTOBUF_VERSION = '3.27.2'
diff --git a/tools/distrib/python/xds_protos/python_version.py b/tools/distrib/python/xds_protos/python_version.py
new file mode 100644
index 0000000000000..80cce2eb4c544
--- /dev/null
+++ b/tools/distrib/python/xds_protos/python_version.py
@@ -0,0 +1,20 @@
+# Copyright 2024 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/xds_protos/python_version.py.template`!!!
+
+SUPPORTED_PYTHON_VERSIONS = ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
+
+MIN_PYTHON_VERSION = 3.8
+MAX_PYTHON_VERSION = 3.13
diff --git a/tools/distrib/python/xds_protos/setup.py b/tools/distrib/python/xds_protos/setup.py
index f1c7247cc4b63..53a6fbdfecb2c 100644
--- a/tools/distrib/python/xds_protos/setup.py
+++ b/tools/distrib/python/xds_protos/setup.py
@@ -19,6 +19,7 @@
import setuptools
import grpc_version
+import python_version
WORK_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -44,6 +45,7 @@
SETUP_REQUIRES = INSTALL_REQUIRES + ["grpcio-tools>=1.49.0"]
+
setuptools.setup(
name="xds-protos",
version=grpc_version.VERSION,
@@ -55,7 +57,7 @@
author_email="grpc-io@googlegroups.com",
url="https://grpc.io",
license="Apache License 2.0",
- python_requires=">=3.8",
+ python_requires=f">={python_version.MIN_PYTHON_VERSION}",
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
classifiers=CLASSIFIERS,
diff --git a/tools/dockerfile/README.md b/tools/dockerfile/README.md
index 89c599d607911..fbdc872f70f5a 100644
--- a/tools/dockerfile/README.md
+++ b/tools/dockerfile/README.md
@@ -37,6 +37,7 @@ If you've made modifications to a dockerfile, you can upload the new version of
registry as follows:
If you haven't configured authentication in Docker for us-docker.pkg.dev previously, run:
+
```
gcloud auth configure-docker us-docker.pkg.dev
gcloud auth login
@@ -45,6 +46,7 @@ gcloud auth login
Rebuild the docker images that have been modified locally and upload the docker images to
artifact registry (note that this won't overwrite the "old" versions of the docker image
that are already in artifact registry)
+
```
# Install qemu, binformat, and configure binfmt interpreters
sudo apt-get install binfmt-support qemu-user-static
@@ -58,6 +60,7 @@ tools/dockerfile/push_testing_images.sh
Build modified docker images locally and don't push to artifact registry. This option is
very useful for quick local experiments. The script is much faster if it doesn't have to
interact with artifact registry:
+
```
# very useful for local experiments
LOCAL_ONLY_MODE=true tools/dockerfile/push_testing_images.sh
@@ -69,6 +72,7 @@ In the past, our testing docker images were [hosted on dockerhub](https://hub.do
but we are in the process of migrating them artifact registry now.
This temporary feature might simplify the migration:
+
```
# try pull existing images from dockerhub instead of building the from scratch locally.
TRANSFER_FROM_DOCKERHUB=true tools/dockerfile/push_testing_images.sh
diff --git a/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version b/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version
index 2ddbcc9ba32eb..0a9925704215c 100644
--- a/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version
+++ b/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7:0b87638ab97b433c6818be5124dcd89d479b3a8b@sha256:f109d6c22cadb053f6843a66ee827d74f34d6cbf75a32f455a9da099ed1bdc9c
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7:3523bf4a67fa9100deb8f48ee4833cb5a5e97697@sha256:137616275fe59bf89849f7503779f9a5d9668dbf395fcc79a8221a8c38fa5bac
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile b/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile
index 40a22e6fe544c..03aacb23b4920 100644
--- a/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2020 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
# The aarch64 wheels are being crosscompiled to allow running the build
# on x64 machine. The dockcross/linux-armv7 image is a x86_64
# image with crosscompilation toolchain installed
+
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile.template`!!!
FROM dockcross/linux-armv7
RUN apt update && apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev \
@@ -22,37 +24,39 @@ RUN apt update && apt install -y build-essential zlib1g-dev libncurses5-dev libg
ADD install_python_for_wheel_crosscompilation.sh /scripts/install_python_for_wheel_crosscompilation.sh
-RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.6.13" "3.6.13" /opt/python/cp36-cp36m
-RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.7.10" "3.7.10" /opt/python/cp37-cp37m
RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.8.8" "3.8.8" /opt/python/cp38-cp38
RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.9.2" "3.9.2" /opt/python/cp39-cp39
RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.10.0" "3.10.0rc1" /opt/python/cp310-cp310
RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.11.0" "3.11.0rc1" /opt/python/cp311-cp311
RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.12.0" "3.12.0rc2" /opt/python/cp312-cp312
+RUN /scripts/install_python_for_wheel_crosscompilation.sh "3.13.0" "3.13.0rc2" /opt/python/cp313-cp313
ENV AUDITWHEEL_ARCH armv7l
ENV AUDITWHEEL_PLAT linux_armv7l
#=================
-# Install ccache
+# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
-RUN unset CMAKE_TOOLCHAIN_FILE && unset AS AR CC CPP CXX LD \
- && curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+RUN unset CMAKE_TOOLCHAIN_FILE && unset AS AR CC CPP CXX LD STRIP OBJCOPY \
+ && curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
# The dockcross base of this image sets CC and CXX to absolute paths, which makes it impossible to redirect their invocations
# to ccache via a symlink. Use relative paths instead.
+
ENV CC ${CROSS_TRIPLE}-gcc
ENV CXX ${CROSS_TRIPLE}-g++
+
# For historical reasons, task_runner.py the script under docker container using "bash -l"
# which loads /etc/profile on startup. dockcross/linux-armv7 is based on an image where
# /etc/profile overwrites contents of PATH (for security reasons) when run as root.
@@ -62,5 +66,25 @@ ENV CXX ${CROSS_TRIPLE}-g++
# TODO(jtattermusch): Remove this hack when possible.
RUN echo "# file contents removed to avoid resetting PATH set by the docker image" >/etc/profile
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
RUN git config --global protocol.file.allow always
diff --git a/tools/dockerfile/grpc_artifact_python_linux_armv7/install_python_for_wheel_crosscompilation.sh b/tools/dockerfile/grpc_artifact_python_linux_armv7/install_python_for_wheel_crosscompilation.sh
index 08c6439d36a04..f1f1d39509e9c 100755
--- a/tools/dockerfile/grpc_artifact_python_linux_armv7/install_python_for_wheel_crosscompilation.sh
+++ b/tools/dockerfile/grpc_artifact_python_linux_armv7/install_python_for_wheel_crosscompilation.sh
@@ -44,4 +44,4 @@ popd
rm -rf "Python-${PYTHON_VERSION}"
# install cython and wheel
-"${PYTHON_PREFIX}/bin/python3" -m pip install --upgrade 'cython<3.0.0rc1' wheel
+"${PYTHON_PREFIX}/bin/python3" -m pip install --upgrade 'cython<4.0.0rc1' wheel
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version
index cdce8e543b4f1..cf67b2519079b 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64:cfc9fe0cb36bb4ec8425982fd7f07e4e14bf3941@sha256:3f0407d4db904b35a7665c2222db039994cd0c9bdb1a073a653ff8e6940081c9
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64:377f694f92dd1b56dff0b0a0f47d6e731200953c@sha256:ad3233be3c3ad9e0c4b60f0176a853713a35e5c84ec9d9703996c67fa3e811b6
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile
index 8e1c0751a8a90..e4c3f8f306cc3 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2020 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,35 +12,57 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM dockcross/manylinux2014-aarch64:20230905-7b2d74f
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile.template`!!!
+
+FROM dockcross/manylinux2014-aarch64:20240812-60fa1b0
# manylinux_2_17 is the preferred alias of manylinux2014
ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
-###################################
+#===================================
# Install Python build requirements
-RUN /opt/python/cp36-cp36m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp37-cp37m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<3.0.0rc1'
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
#=================
-# Install ccache
+# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
RUN unset CMAKE_TOOLCHAIN_FILE && unset AS AR CC CPP CXX LD STRIP OBJCOPY \
- && curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+ && curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
RUN git config --global protocol.file.allow always
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version
index c6f58ea8034b9..b99340a7285d7 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64:e81af0c6d454929785e8126fc993cbd93da5c014@sha256:89329900ec7fedc57cd89690acd34d07d726f6b896f60df987867737d0a0f5a8
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64:379c3240e9fd68b7c13a3b6cb24307a272558494@sha256:0e102df67f31aeb6afe68250603288c2f1c98ccf360d1c42d751b8451da94b48
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile
index ae959de2db4e9..ea75ed3af7cc3 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2020 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -14,7 +14,9 @@
# Docker file for building gRPC manylinux Python artifacts.
-FROM quay.io/pypa/manylinux2014_x86_64:2023-09-17-ae90a16
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile.template`!!!
+
+FROM quay.io/pypa/manylinux2014_x86_64:2024-09-09-f386546
# manylinux_2_17 is the preferred alias of manylinux2014
ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
@@ -22,29 +24,49 @@ ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
# TODO(jtattermusch): revisit which of the deps are really required
RUN yum update -y && yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
-###################################
+#===================================
# Install Python build requirements
-RUN /opt/python/cp36-cp36m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp37-cp37m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<3.0.0rc1'
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
#=================
# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
-RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
RUN git config --global protocol.file.allow always
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version
index efbb3c35dbe9b..67a5533afbdc2 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86:fda00560d600eed356f8d6bef2cc8416d0a6b790@sha256:8fce8e094b00935dc1f2640b4c2b10216c5a8711c0f4444efbafcd8c355a75a8
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86:28eec3c9e027fd42f5852f696ed3e47aec91229b@sha256:527e2e9ec4db0c52a53b50abfd59907a1b7e221168dc401686f6a48d33bddc5c
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile
index 7736403f098bf..3ffa2f46bbb9b 100644
--- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2020 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -14,7 +14,9 @@
# Docker file for building gRPC manylinux Python artifacts.
-FROM quay.io/pypa/manylinux2014_i686:2023-09-17-ae90a16
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile.template`!!!
+
+FROM quay.io/pypa/manylinux2014_i686:2024-09-09-f386546
# manylinux_2_17 is the preferred alias of manylinux2014
ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
@@ -22,30 +24,50 @@ ENV AUDITWHEEL_PLAT manylinux_2_17_$AUDITWHEEL_ARCH
# TODO(jtattermusch): revisit which of the deps are really required
RUN yum update -y && yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
-###################################
+#===================================
# Install Python build requirements
-RUN /opt/python/cp36-cp36m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp37-cp37m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<3.0.0rc1'
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
#=================
# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
-RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
RUN git config --global protocol.file.allow always
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version
index 5365ea4a4bedf..af23ed31a5c39 100644
--- a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version
+++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x64:2f56fcee2e4964359dddcd57bb9b066ceb8331ec@sha256:c8e8eb24942a2910197cf5481d61e7cbce68b57bd6f35fae878b043b1f2c38bb
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x64:1bc8405880fdad2b22f8a6422cd6198b0b54838a@sha256:94b57e5ea31ebc29af734474bcaff3074770778e5d27557cdc06d755ee8bc7ed
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile
index a6eff9bbe715f..dc16c9133b77b 100644
--- a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2021 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,31 +12,55 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM quay.io/pypa/musllinux_1_1_x86_64:2023-09-17-ae90a16
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x64/Dockerfile.template`!!!
-###################################
+FROM quay.io/pypa/musllinux_1_1_x86_64:2024-09-09-f386546
+
+#===================================
# Install Python build requirements
-RUN /opt/python/cp36-cp36m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp37-cp37m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<3.0.0rc1'
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
#=================
# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
-RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
-RUN git config --global protocol.file.allow always
\ No newline at end of file
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
+RUN git config --global protocol.file.allow always
+
+RUN apk add openssl openssl-dev
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version
index c30b39b356a29..ba2e0cac19a88 100644
--- a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version
+++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x86:9308dccacd76fb1782a43d97e6f5062b5b58576d@sha256:c288f83435186ee675d004ee52c93195a51201bf2b5fe92581584d977a2499a3
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_1_x86:358044420e0991fe284f49848145d5145cff42ac@sha256:edf4a0c8333c9309e52f323aa7315bbc0e5643216613cab4ecd2bce3d1ec26c0
\ No newline at end of file
diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile
index c7ac549e98fcf..6509ab15003c1 100644
--- a/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright 2021 The gRPC Authors
+# Copyright 2024 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,31 +12,53 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM quay.io/pypa/musllinux_1_1_i686:2023-09-17-ae90a16
+# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/dockerfile/grpc_artifact_python_musllinux_1_1_x86/Dockerfile.template`!!!
-###################################
+FROM quay.io/pypa/musllinux_1_1_i686:2024-09-09-f386546
+
+#===================================
# Install Python build requirements
-RUN /opt/python/cp36-cp36m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp37-cp37m/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<3.0.0rc1'
-RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<3.0.0rc1'
+RUN /opt/python/cp38-cp38/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp39-cp39/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp310-cp310/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp311-cp311/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp312-cp312/bin/pip install --upgrade 'cython<4.0.0rc1'
+RUN /opt/python/cp313-cp313/bin/pip install --upgrade 'cython<4.0.0rc1'
#=================
# Install ccache
# Install ccache from source since ccache 3.x packaged with most linux distributions
# does not support Redis backend for caching.
-RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.5.1/ccache-4.5.1.tar.gz \
+RUN curl -sSL -o ccache.tar.gz https://github.com/ccache/ccache/releases/download/v4.7.5/ccache-4.7.5.tar.gz \
&& tar -zxf ccache.tar.gz \
- && cd ccache-4.5.1 \
+ && cd ccache-4.7.5 \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON .. \
&& make -j4 && make install \
&& cd ../.. \
- && rm -rf ccache-4.5.1 ccache.tar.gz
+ && rm -rf ccache-4.7.5 ccache.tar.gz
+
+# TODO: simplify the list of third_party modules list
+# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories
+# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule
RUN git config --global --add safe.directory /var/local/jenkins/grpc
-RUN git config --global protocol.file.allow always
\ No newline at end of file
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate
+RUN git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares
+RUN git config --global protocol.file.allow always
diff --git a/tools/dockerfile/test/python_debian11_default_x64.current_version b/tools/dockerfile/test/python_debian11_default_x64.current_version
index 70b0383e90a91..8b82524dba612 100644
--- a/tools/dockerfile/test/python_debian11_default_x64.current_version
+++ b/tools/dockerfile/test/python_debian11_default_x64.current_version
@@ -1 +1 @@
-us-docker.pkg.dev/grpc-testing/testing-images-public/python_debian11_default_x64:05951fbd0e77e8ba072d270ad08f0d4b6ac00841@sha256:4c539fc93d343324309939c2964204c90f4054cd9eeed093af315cb0f0ef7c26
\ No newline at end of file
+us-docker.pkg.dev/grpc-testing/testing-images-public/python_debian11_default_x64:224d8dc6c8287ee247378888ac93b9fe9e36ec8c@sha256:8beca964d6bbb80a8cb4c4628c25e9702b007c97113e74e589fa50c15000738d
\ No newline at end of file
diff --git a/tools/dockerfile/test/python_debian11_default_x64/Dockerfile b/tools/dockerfile/test/python_debian11_default_x64/Dockerfile
index 2ba17722bce69..e7c2c9a658dce 100644
--- a/tools/dockerfile/test/python_debian11_default_x64/Dockerfile
+++ b/tools/dockerfile/test/python_debian11_default_x64/Dockerfile
@@ -173,6 +173,28 @@ RUN cd /tmp && \
RUN python3.12 -m ensurepip && \
python3.12 -m pip install coverage
+#=================
+# Compile CPython 3.13.0rc2 from source
+
+RUN apt-get update && apt-get install -y zlib1g-dev libssl-dev libsqlite3-dev && apt-get clean
+RUN apt-get update && apt-get install -y jq build-essential libffi-dev && apt-get clean
+
+RUN cd /tmp && \
+ wget -q https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc2.tgz && \
+ tar xzvf Python-3.13.0rc2.tgz && \
+ cd Python-3.13.0rc2 && \
+ ./configure && \
+ make -j4 && \
+ make install
+
+
+RUN cd /tmp && \
+ echo "ad7f44153649e27ec385e7633e853e03 Python-3.13.0rc2.tgz" > checksum.md5 && \
+ md5sum -c checksum.md5
+
+RUN python3.13 -m ensurepip && \
+ python3.13 -m pip install coverage
+
# Python test coverage requires libsqlite3, and it have
# to be installed before Python.
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index e6e12bc122402..8ce9b49e79e34 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.66.1
+PROJECT_NUMBER = 1.66.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index adee4d11aa949..7e32389fe347a 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.66.1
+PROJECT_NUMBER = 1.66.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.objc b/tools/doxygen/Doxyfile.objc
index 5e048fc233d02..a89843d9b3ce7 100644
--- a/tools/doxygen/Doxyfile.objc
+++ b/tools/doxygen/Doxyfile.objc
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Objective-C"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.66.1
+PROJECT_NUMBER = 1.66.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.objc.internal b/tools/doxygen/Doxyfile.objc.internal
index f6fbc48deb209..58cae8a92269e 100644
--- a/tools/doxygen/Doxyfile.objc.internal
+++ b/tools/doxygen/Doxyfile.objc.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC Objective-C"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.66.1
+PROJECT_NUMBER = 1.66.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.php b/tools/doxygen/Doxyfile.php
index c3a2d1cc20711..1abc268c3e224 100644
--- a/tools/doxygen/Doxyfile.php
+++ b/tools/doxygen/Doxyfile.php
@@ -40,7 +40,7 @@
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.66.1
+PROJECT_NUMBER = 1.66.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/internal_ci/helper_scripts/install_python_interpreters.ps1 b/tools/internal_ci/helper_scripts/install_python_interpreters.ps1
index 902fa3b0965d7..ddeaad711f8f4 100644
--- a/tools/internal_ci/helper_scripts/install_python_interpreters.ps1
+++ b/tools/internal_ci/helper_scripts/install_python_interpreters.ps1
@@ -149,3 +149,20 @@ $Python312x64Config = @{
PythonInstallerHash = "ea1993b5227fa4c8f45a06f5fbdd23b3"
}
Install-Python @Python312x64Config
+
+# Python 3.13
+$Python313x86Config = @{
+ PythonVersion = "3.13.0"
+ PythonInstaller = "python-3.13.0rc2"
+ PythonInstallPath = "C:\Python313_32bit"
+ PythonInstallerHash = "647f429b5584d9ee2dd02fdc9c61a38e"
+}
+Install-Python @Python313x86Config
+
+$Python313x64Config = @{
+ PythonVersion = "3.13.0"
+ PythonInstaller = "python-3.13.0rc2-amd64"
+ PythonInstallPath = "C:\Python313"
+ PythonInstallerHash = "0af5ad8734962267323ef45f384de3aa"
+}
+Install-Python @Python313x64Config
\ No newline at end of file
diff --git a/tools/internal_ci/helper_scripts/prepare_build_macos_rc b/tools/internal_ci/helper_scripts/prepare_build_macos_rc
index 8b3de1ab8ffd3..066deb1a3154e 100644
--- a/tools/internal_ci/helper_scripts/prepare_build_macos_rc
+++ b/tools/internal_ci/helper_scripts/prepare_build_macos_rc
@@ -31,6 +31,14 @@ df -h /tmpfs /
launchctl limit maxfiles
ulimit -a
+# Use temp variable to detect version
+# will be cleaned up after migration is complete
+os_version=$(sw_vers -productVersion)
+is_sonoma=false
+if [[ "$os_version" == "14."* ]]; then
+ is_sonoma=true
+fi
+
# WARNING: TRY TO KEEP THIS FILE AS LEAN AS POSSIBLE
# The rules:
# - think twice before adding installer that takes long time (builds are already slow)
@@ -47,10 +55,17 @@ export HOMEBREW_NO_AUTO_UPDATE=1
# - Kokoro MacOS Mojave: 27fa87c94a6cf7be40fc8f8fc96bc7c387b7781e
brew config
+if $is_sonoma; then
+ brew install cmake
+ brew install gnupg
+fi
+
# Add GCP credentials for BQ access
pip install --user google-api-python-client oauth2client six==1.16.0
export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json
-DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+echo $DIR
+pwd
# If this is a PR using RUN_TESTS_FLAGS var, then add flags to filter tests
if [ -n "$KOKORO_GITHUB_PULL_REQUEST_NUMBER" ]; then
@@ -176,6 +191,14 @@ then
shasum -c /tmp/python_installer_checksum.sha256
time sudo installer -pkg ./python-3.12.0rc2-macos11.pkg -target /
fi
+
+ # Install Python 3.13 if it doesn't exist
+ if [ ! -f "/usr/local/bin/python3.13" ]; then
+ time curl -O https://www.python.org/ftp/python/3.13.0/python-3.13.0rc2-macos11.pkg
+ echo "75579065f9ee5c25207353fbe0f79275123ff556 python-3.13.0rc2-macos11.pkg" > /tmp/python_installer_checksum.sha256
+ shasum -c /tmp/python_installer_checksum.sha256
+ time sudo installer -pkg ./python-3.13.0rc2-macos11.pkg -target /
+ fi
fi
if [ "${PREPARE_BUILD_INSTALL_DEPS_CSHARP}" == "true" ]
diff --git a/tools/internal_ci/helper_scripts/requirements.macos.txt b/tools/internal_ci/helper_scripts/requirements.macos.txt
index 59a759b0ce231..9771c838dc334 100644
--- a/tools/internal_ci/helper_scripts/requirements.macos.txt
+++ b/tools/internal_ci/helper_scripts/requirements.macos.txt
@@ -1,6 +1,6 @@
-cython<3.0.0rc1
+cython<4.0.0rc1
cryptography==3.4.6
PyJWT==2.0.1
pyOpenSSL==20.0.1
-PyYAML==6.0
+PyYAML==6.0.2
requests==2.32.2
diff --git a/tools/internal_ci/linux/psm-dualstack.cfg b/tools/internal_ci/linux/psm-dualstack.cfg
index 78e2b9f22882c..a467a611e20a4 100644
--- a/tools/internal_ci/linux/psm-dualstack.cfg
+++ b/tools/internal_ci/linux/psm-dualstack.cfg
@@ -16,7 +16,7 @@
# Location of the continuous shell script in repository.
build_file: "grpc/tools/internal_ci/linux/psm-interop-test-cpp.sh"
-timeout_mins: 120
+timeout_mins: 240
action {
define_artifacts {
regex: "artifacts/**/*sponge_log.xml"
diff --git a/tools/internal_ci/macos/grpc_distribtests_python.sh b/tools/internal_ci/macos/grpc_distribtests_python.sh
index 8bd18de2e1d01..fa651af4e8a72 100644
--- a/tools/internal_ci/macos/grpc_distribtests_python.sh
+++ b/tools/internal_ci/macos/grpc_distribtests_python.sh
@@ -26,12 +26,12 @@ source tools/internal_ci/helper_scripts/prepare_build_macos_rc
# TODO(jtattermusch): cleanup this prepare build step (needed for python artifact build)
# install cython for all python versions
-python3.7 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
-python3.8 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
-python3.9 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
-python3.10 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
-python3.11 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
-python3.12 -m pip install -U 'cython<3.0.0rc1' setuptools==65.4.1 wheel --user
+python3.8 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
+python3.9 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
+python3.10 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
+python3.11 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
+python3.12 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
+python3.13 -m pip install -U 'cython<4.0.0rc1' setuptools==65.4.1 wheel --user
# Build all python macos artifacts (this step actually builds all the binary wheels and source archives)
tools/run_tests/task_runner.py -f artifact macos python ${TASK_RUNNER_EXTRA_FILTERS} -j 2 -x build_artifacts/sponge_log.xml || FAILED="true"
diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py
index e67be1f7bb516..e04d496d85671 100644
--- a/tools/run_tests/artifacts/artifact_targets.py
+++ b/tools/run_tests/artifacts/artifact_targets.py
@@ -160,11 +160,12 @@ def build_jobspec(self, inner_jobs=None):
),
"tools/run_tests/artifacts/build_artifact_python.sh",
environ=environ,
- timeout_seconds=60 * 60,
+ timeout_seconds=60 * 60 * 2,
)
elif "manylinux" in self.platform:
if self.arch == "x86":
environ["SETARCH_CMD"] = "linux32"
+ environ["GRPC_SKIP_TWINE_CHECK"] = "TRUE"
# Inside the manylinux container, the python installations are located in
# special places...
environ["PYTHON"] = "/opt/python/{}/bin/python".format(
@@ -201,6 +202,10 @@ def build_jobspec(self, inner_jobs=None):
environ["GRPC_SKIP_PIP_CYTHON_UPGRADE"] = "TRUE"
environ["GRPC_RUN_AUDITWHEEL_REPAIR"] = "TRUE"
environ["GRPC_PYTHON_BUILD_WITH_STATIC_LIBSTDCXX"] = "TRUE"
+
+ if self.arch == "x86":
+ environ["GRPC_SKIP_TWINE_CHECK"] = "TRUE"
+
return create_docker_jobspec(
self.name,
"tools/dockerfile/grpc_artifact_python_%s_%s"
@@ -401,15 +406,17 @@ def targets():
PythonArtifact("manylinux2014", "x64", "cp39-cp39", presubmit=True),
PythonArtifact("manylinux2014", "x64", "cp310-cp310"),
PythonArtifact("manylinux2014", "x64", "cp311-cp311"),
+ PythonArtifact("manylinux2014", "x64", "cp312-cp312"),
PythonArtifact(
- "manylinux2014", "x64", "cp312-cp312", presubmit=True
+ "manylinux2014", "x64", "cp313-cp313", presubmit=True
),
PythonArtifact("manylinux2014", "x86", "cp38-cp38", presubmit=True),
PythonArtifact("manylinux2014", "x86", "cp39-cp39", presubmit=True),
PythonArtifact("manylinux2014", "x86", "cp310-cp310"),
PythonArtifact("manylinux2014", "x86", "cp311-cp311"),
+ PythonArtifact("manylinux2014", "x86", "cp312-cp312"),
PythonArtifact(
- "manylinux2014", "x86", "cp312-cp312", presubmit=True
+ "manylinux2014", "x86", "cp313-cp313", presubmit=True
),
PythonArtifact(
"manylinux2014", "aarch64", "cp38-cp38", presubmit=True
@@ -417,45 +424,52 @@ def targets():
PythonArtifact("manylinux2014", "aarch64", "cp39-cp39"),
PythonArtifact("manylinux2014", "aarch64", "cp310-cp310"),
PythonArtifact("manylinux2014", "aarch64", "cp311-cp311"),
+ PythonArtifact("manylinux2014", "aarch64", "cp312-cp312"),
PythonArtifact(
- "manylinux2014", "aarch64", "cp312-cp312", presubmit=True
+ "manylinux2014", "aarch64", "cp313-cp313", presubmit=True
),
PythonArtifact("linux_extra", "armv7", "cp38-cp38", presubmit=True),
PythonArtifact("linux_extra", "armv7", "cp39-cp39"),
PythonArtifact("linux_extra", "armv7", "cp310-cp310"),
PythonArtifact("linux_extra", "armv7", "cp311-cp311"),
+ PythonArtifact("linux_extra", "armv7", "cp312-cp312"),
PythonArtifact(
- "linux_extra", "armv7", "cp312-cp312", presubmit=True
+ "linux_extra", "armv7", "cp313-cp313", presubmit=True
),
PythonArtifact("musllinux_1_1", "x64", "cp38-cp38", presubmit=True),
PythonArtifact("musllinux_1_1", "x64", "cp39-cp39"),
PythonArtifact("musllinux_1_1", "x64", "cp310-cp310"),
PythonArtifact("musllinux_1_1", "x64", "cp311-cp311"),
+ PythonArtifact("musllinux_1_1", "x64", "cp312-cp312"),
PythonArtifact(
- "musllinux_1_1", "x64", "cp312-cp312", presubmit=True
+ "musllinux_1_1", "x64", "cp313-cp313", presubmit=True
),
PythonArtifact("musllinux_1_1", "x86", "cp38-cp38", presubmit=True),
PythonArtifact("musllinux_1_1", "x86", "cp39-cp39"),
PythonArtifact("musllinux_1_1", "x86", "cp310-cp310"),
PythonArtifact("musllinux_1_1", "x86", "cp311-cp311"),
+ PythonArtifact("musllinux_1_1", "x86", "cp312-cp312"),
PythonArtifact(
- "musllinux_1_1", "x86", "cp312-cp312", presubmit=True
+ "musllinux_1_1", "x86", "cp313-cp313", presubmit=True
),
PythonArtifact("macos", "x64", "python3.8", presubmit=True),
PythonArtifact("macos", "x64", "python3.9"),
PythonArtifact("macos", "x64", "python3.10"),
PythonArtifact("macos", "x64", "python3.11"),
- PythonArtifact("macos", "x64", "python3.12", presubmit=True),
+ PythonArtifact("macos", "x64", "python3.12"),
+ PythonArtifact("macos", "x64", "python3.13", presubmit=True),
PythonArtifact("windows", "x86", "Python38_32bit", presubmit=True),
PythonArtifact("windows", "x86", "Python39_32bit"),
PythonArtifact("windows", "x86", "Python310_32bit"),
PythonArtifact("windows", "x86", "Python311_32bit"),
- PythonArtifact("windows", "x86", "Python312_32bit", presubmit=True),
+ PythonArtifact("windows", "x86", "Python312_32bit"),
+ PythonArtifact("windows", "x86", "Python313_32bit", presubmit=True),
PythonArtifact("windows", "x64", "Python38", presubmit=True),
PythonArtifact("windows", "x64", "Python39"),
PythonArtifact("windows", "x64", "Python310"),
PythonArtifact("windows", "x64", "Python311"),
- PythonArtifact("windows", "x64", "Python312", presubmit=True),
+ PythonArtifact("windows", "x64", "Python312"),
+ PythonArtifact("windows", "x64", "Python313", presubmit=True),
RubyArtifact("linux", "x86-mingw32", presubmit=True),
RubyArtifact("linux", "x64-mingw32", presubmit=True),
RubyArtifact("linux", "x64-mingw-ucrt", presubmit=True),
diff --git a/tools/run_tests/artifacts/build_artifact_python.bat b/tools/run_tests/artifacts/build_artifact_python.bat
index ee17381bc1b68..4ac49183af4e7 100644
--- a/tools/run_tests/artifacts/build_artifact_python.bat
+++ b/tools/run_tests/artifacts/build_artifact_python.bat
@@ -56,7 +56,7 @@ python setup.py bdist_wheel || goto :error
popd
@rem Ensure the generate artifacts are valid.
-python -m pip install packaging==21.3 twine==3.8.0
+python -m pip install packaging==21.3 twine==5.0.0
python -m twine check dist\* tools\distrib\python\grpcio_tools\dist\* || goto :error
xcopy /Y /I /S dist\* %ARTIFACT_DIR% || goto :error
diff --git a/tools/run_tests/artifacts/build_artifact_python.sh b/tools/run_tests/artifacts/build_artifact_python.sh
index 1598d2edc183c..b00ae1e372c42 100755
--- a/tools/run_tests/artifacts/build_artifact_python.sh
+++ b/tools/run_tests/artifacts/build_artifact_python.sh
@@ -39,7 +39,7 @@ then
# Any installation step is a potential source of breakages,
# so we are trying to perform as few download-and-install operations
# as possible.
- "${PYTHON}" -m pip install --upgrade 'cython<3.0.0rc1'
+ "${PYTHON}" -m pip install --upgrade 'cython<4.0.0rc1'
fi
# Allow build_ext to build C/C++ files in parallel
@@ -167,7 +167,8 @@ then
"${PYTHON}" -m pip install virtualenv
"${PYTHON}" -m virtualenv venv || { "${PYTHON}" -m pip install virtualenv==20.0.23 && "${PYTHON}" -m virtualenv venv; }
# Ensure the generated artifacts are valid using "twine check"
- venv/bin/python -m pip install "twine<=2.0" "readme_renderer<40.0"
+ # pinning twine's dependency package `cryptography` version to 3.3.2 (last version without Rust dependency)
+ venv/bin/python -m pip install "cryptography==3.3.2" "twine==5.0.0" "readme_renderer<40.0"
venv/bin/python -m twine check dist/* tools/distrib/python/grpcio_tools/dist/*
if [ "$GRPC_BUILD_MAC" == "" ]; then
venv/bin/python -m twine check src/python/grpcio_observability/dist/*
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index e2b5f92262e18..aa97e90903d53 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -844,6 +844,13 @@ def _get_pythons(self, args):
bits=bits,
config_vars=config_vars,
)
+ python313_config = _python_config_generator(
+ name="py313",
+ major="3",
+ minor="13",
+ bits=bits,
+ config_vars=config_vars,
+ )
pypy27_config = _pypy_config_generator(
name="pypy", major="2", config_vars=config_vars
)
@@ -880,6 +887,8 @@ def _get_pythons(self, args):
return (python311_config,)
elif args.compiler == "python3.12":
return (python312_config,)
+ elif args.compiler == "python3.13":
+ return (python313_config,)
elif args.compiler == "pypy":
return (pypy27_config,)
elif args.compiler == "pypy3":
@@ -893,6 +902,7 @@ def _get_pythons(self, args):
python310_config,
python311_config,
python312_config,
+ python313_config,
)
else:
raise Exception("Compiler %s not supported." % args.compiler)