From 010d62175e6b073ebf66b3abc9dcd85a396e1478 Mon Sep 17 00:00:00 2001 From: Richard Belleville Date: Fri, 4 Dec 2020 17:40:31 -0800 Subject: [PATCH 1/3] Pin protobuf version dependency for grpcio-tools --- build_handwritten.yaml | 1 + templates/grpc.gemspec.template | 2 +- .../csharp/build/dependencies.props.template | 2 +- ...otoCompiler-gRPCCppPlugin.podspec.template | 2 +- ...!ProtoCompiler-gRPCPlugin.podspec.template | 2 +- .../!ProtoCompiler.podspec.template | 135 ++++++++++++++++++ .../distrib/python/grpc_version.py.template | 1 + .../grpcio_tools/grpc_version.py.template | 1 + tools/buildgen/plugins/expand_version.py | 2 + tools/distrib/python/grpc_version.py | 1 + .../python/grpcio_tools/grpc_version.py | 1 + tools/distrib/python/grpcio_tools/setup.py | 2 +- 12 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 templates/src/objective-c/!ProtoCompiler.podspec.template diff --git a/build_handwritten.yaml b/build_handwritten.yaml index f4225299f95..a0c05180062 100644 --- a/build_handwritten.yaml +++ b/build_handwritten.yaml @@ -15,6 +15,7 @@ settings: core_version: 14.0.0 csharp_major_version: 2 g_stands_for: gecko + protobuf_version: 3.13.0 version: 1.35.0-dev targets: - name: check_epollexclusive diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template index c9a5cc7840d..d29ee85af11 100644 --- a/templates/grpc.gemspec.template +++ b/templates/grpc.gemspec.template @@ -34,7 +34,7 @@ s.require_paths = %w( src/ruby/lib src/ruby/bin src/ruby/pb ) s.platform = Gem::Platform::RUBY - s.add_dependency 'google-protobuf', '~> 3.13' + s.add_dependency 'google-protobuf', '~> ${settings.protobuf_short_version}' s.add_dependency 'googleapis-common-protos-types', '~> 1.0' s.add_development_dependency 'bundler', '>= 1.9' diff --git a/templates/src/csharp/build/dependencies.props.template b/templates/src/csharp/build/dependencies.props.template index 8c21a9ff541..ca55dd94cbf 100755 --- a/templates/src/csharp/build/dependencies.props.template +++ b/templates/src/csharp/build/dependencies.props.template @@ -4,6 +4,6 @@ ${settings.csharp_version} - 3.13.0 + ${settings.protobuf_version} diff --git a/templates/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec.template b/templates/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec.template index 626e3c82b3a..27aaacfde3b 100644 --- a/templates/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec.template +++ b/templates/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec.template @@ -102,7 +102,7 @@ s.preserve_paths = plugin # Restrict the protoc version to the one supported by this plugin. - s.dependency '!ProtoCompiler', '3.13.0' + s.dependency '!ProtoCompiler', '${settings.protobuf_version}' # For the Protobuf dependency not to complain: s.ios.deployment_target = '9.0' s.osx.deployment_target = '10.10' diff --git a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template index fec89943e5c..34a244c6d32 100644 --- a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template +++ b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template @@ -104,7 +104,7 @@ s.preserve_paths = plugin # Restrict the protoc version to the one supported by this plugin. - s.dependency '!ProtoCompiler', '3.13.0' + s.dependency '!ProtoCompiler', '${settings.protobuf_version}' # For the Protobuf dependency not to complain: s.ios.deployment_target = '9.0' s.osx.deployment_target = '10.10' diff --git a/templates/src/objective-c/!ProtoCompiler.podspec.template b/templates/src/objective-c/!ProtoCompiler.podspec.template new file mode 100644 index 00000000000..c1ca9da0df4 --- /dev/null +++ b/templates/src/objective-c/!ProtoCompiler.podspec.template @@ -0,0 +1,135 @@ +%YAML 1.2 +--- | + # Proto Compiler CocoaPods podspec + + # Copyright 2016, Google Inc. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # * Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following disclaimer + # in the documentation and/or other materials provided with the + # distribution. + # * Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Pod::Spec.new do |s| + # This pod is only a utility that will be used by other pods _at install time_ (not at compile + # time). Other pods can access it in their `prepare_command` script, under /. + # Because CocoaPods installs pods in alphabetical order, beginning this pod's name with an + # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed + # before them. + s.name = '!ProtoCompiler' + v = '${settings.protobuf_version}' + s.version = v + s.summary = 'The Protobuf Compiler (protoc) generates Objective-C files from .proto files' + s.description = <<-DESC + This podspec only downloads protoc so that local pods generating protos can execute it as part + of their prepare_command. + The generated code will have a dependency on the Protobuf Objective-C runtime of the same + version. The runtime can be obtained as the "Protobuf" pod. + DESC + s.homepage = 'https://github.com/google/protobuf' + s.license = { + :type => 'New BSD', + :text => <<-LICENSE + This license applies to all parts of Protocol Buffers except the following: + + - Atomicops support for generic gcc, located in + src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. + This file is copyrighted by Red Hat Inc. + + - Atomicops support for AIX/POWER, located in + src/google/protobuf/stubs/atomicops_internals_power.h. + This file is copyrighted by Bloomberg Finance LP. + + Copyright 2014, Google Inc. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Code generated by the Protocol Buffer compiler is owned by the owner + of the input file used when generating it. This code is not + standalone and requires a support library to be linked with it. This + support library is itself covered by the above license. + LICENSE + } + # "The name and email addresses of the library maintainers, not the Podspec maintainer." + s.authors = { 'The Protocol Buffers contributors' => 'protobuf@googlegroups.com' } + + repo = 'google/protobuf' + file = "protoc-#{v}-osx-x86_64.zip" + s.source = { + :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}", + # TODO(jcanizales): Add sha1 or sha256 + # :sha1 => '??', + } + + s.preserve_paths = 'protoc', + 'google/**/*.proto' # Well-known protobuf types + + # Restrict the protobuf runtime version to the one supported by this version of protoc. + s.dependency 'Protobuf', '~> 3.0' + # For the Protobuf dependency not to complain: + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.10' + s.tvos.deployment_target = '10.0' + s.watchos.deployment_target = '4.0' + + # This is only for local development of protoc: If the Podfile brings this pod from a local + # directory using `:path`, CocoaPods won't download the zip file and so the compiler won't be + # present in this pod's directory. We use that knowledge to check for the existence of the file + # and, if absent, build it from the local sources. + repo_root = '../..' + bazel = "#{repo_root}/tools/bazel" + + s.prepare_command = <<-CMD + if [ ! -f bin/protoc ]; then + #{bazel} build @com_google_protobuf//:protoc + else + mv bin/protoc . + mv include/google . + fi + CMD + end diff --git a/templates/tools/distrib/python/grpc_version.py.template b/templates/tools/distrib/python/grpc_version.py.template index a2f471aff74..5031353b871 100644 --- a/templates/tools/distrib/python/grpc_version.py.template +++ b/templates/tools/distrib/python/grpc_version.py.template @@ -17,3 +17,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! VERSION = '${settings.python_version.pep440()}' + PROTOBUF_VERSION = '${settings.protobuf_version}' diff --git a/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template b/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template index e25791dd0e5..8532d6a301b 100644 --- a/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template +++ b/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template @@ -17,3 +17,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! VERSION = '${settings.python_version.pep440()}' + PROTOBUF_VERSION = '${settings.protobuf_version}' diff --git a/tools/buildgen/plugins/expand_version.py b/tools/buildgen/plugins/expand_version.py index 26e11bc1aae..f862080c0a6 100755 --- a/tools/buildgen/plugins/expand_version.py +++ b/tools/buildgen/plugins/expand_version.py @@ -127,3 +127,5 @@ def mako_plugin(dictionary): else: settings[version_tag] = Version(version_str, override_major=override_major) + settings['protobuf_short_version'] = ( + '.'.join(settings['protobuf_version'].split('.')[:-1])) diff --git a/tools/distrib/python/grpc_version.py b/tools/distrib/python/grpc_version.py index 1687e7a7e5a..82a79dbda08 100644 --- a/tools/distrib/python/grpc_version.py +++ b/tools/distrib/python/grpc_version.py @@ -15,3 +15,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! VERSION = '1.35.0.dev0' +PROTOBUF_VERSION = '3.13.0' diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py index 3cedbe1ac72..ecb1cf90071 100644 --- a/tools/distrib/python/grpcio_tools/grpc_version.py +++ b/tools/distrib/python/grpcio_tools/grpc_version.py @@ -15,3 +15,4 @@ # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!! VERSION = '1.35.0.dev0' +PROTOBUF_VERSION = '3.13.0' diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py index 164088bf7bf..0e5362a2ae9 100644 --- a/tools/distrib/python/grpcio_tools/setup.py +++ b/tools/distrib/python/grpcio_tools/setup.py @@ -230,7 +230,7 @@ setuptools.setup( ext_modules=extension_modules(), packages=setuptools.find_packages('.'), install_requires=[ - 'protobuf>=3.5.0.post1, < 4.0dev', + 'protobuf=={}'.format(grpc_version.PROTOBUF_VERSION), 'grpcio>={version}'.format(version=grpc_version.VERSION), 'setuptools', ], From 38124ab0c6616cd54cd6e020c96bdf527b6fb3ef Mon Sep 17 00:00:00 2001 From: Richard Belleville Date: Mon, 7 Dec 2020 11:52:44 -0800 Subject: [PATCH 2/3] Review comments --- templates/grpc.gemspec.template | 2 +- tools/buildgen/plugins/expand_version.py | 2 +- tools/distrib/python/grpcio_tools/setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template index d29ee85af11..a5e0801296d 100644 --- a/templates/grpc.gemspec.template +++ b/templates/grpc.gemspec.template @@ -34,7 +34,7 @@ s.require_paths = %w( src/ruby/lib src/ruby/bin src/ruby/pb ) s.platform = Gem::Platform::RUBY - s.add_dependency 'google-protobuf', '~> ${settings.protobuf_short_version}' + s.add_dependency 'google-protobuf', '~> ${settings.protobuf_major_minor_version}' s.add_dependency 'googleapis-common-protos-types', '~> 1.0' s.add_development_dependency 'bundler', '>= 1.9' diff --git a/tools/buildgen/plugins/expand_version.py b/tools/buildgen/plugins/expand_version.py index f862080c0a6..8996c6c37ba 100755 --- a/tools/buildgen/plugins/expand_version.py +++ b/tools/buildgen/plugins/expand_version.py @@ -127,5 +127,5 @@ def mako_plugin(dictionary): else: settings[version_tag] = Version(version_str, override_major=override_major) - settings['protobuf_short_version'] = ( + settings['protobuf_major_minor_version'] = ( '.'.join(settings['protobuf_version'].split('.')[:-1])) diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py index 0e5362a2ae9..164088bf7bf 100644 --- a/tools/distrib/python/grpcio_tools/setup.py +++ b/tools/distrib/python/grpcio_tools/setup.py @@ -230,7 +230,7 @@ setuptools.setup( ext_modules=extension_modules(), packages=setuptools.find_packages('.'), install_requires=[ - 'protobuf=={}'.format(grpc_version.PROTOBUF_VERSION), + 'protobuf>=3.5.0.post1, < 4.0dev', 'grpcio>={version}'.format(version=grpc_version.VERSION), 'setuptools', ], From 9c0497a0b03a63beb648b5f674c97366c2ffba58 Mon Sep 17 00:00:00 2001 From: Richard Belleville Date: Mon, 7 Dec 2020 13:41:18 -0800 Subject: [PATCH 3/3] Yapf. Index from beginning --- tools/buildgen/plugins/expand_version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/buildgen/plugins/expand_version.py b/tools/buildgen/plugins/expand_version.py index 8996c6c37ba..7958dd41fb2 100755 --- a/tools/buildgen/plugins/expand_version.py +++ b/tools/buildgen/plugins/expand_version.py @@ -127,5 +127,5 @@ def mako_plugin(dictionary): else: settings[version_tag] = Version(version_str, override_major=override_major) - settings['protobuf_major_minor_version'] = ( - '.'.join(settings['protobuf_version'].split('.')[:-1])) + settings['protobuf_major_minor_version'] = ('.'.join( + settings['protobuf_version'].split('.')[:2]))