feat: Make GAPIC Bazel rules production ready#402
feat: Make GAPIC Bazel rules production ready#402vam-google merged 8 commits intogoogleapis:masterfrom
Conversation
This includes: 1) Fix long time initial load time (5+ min). This was caused by python_rules buildling `grpcio` dependency from sources in one core (which was super slow). Switched to using bazel-native `"@com_github_grpc_grpc//src/python/grpcio/grpc:grpcio"` target instead, which is not only much faster, but is also already used in googleapis, so there is no additional cost for reusing it in microgenerator rules. 2) Properly handle `pandoc` dependency (platform-sepcific version of pandoc is properly pulled by bazel itself using toolchains). 3) Add simplistic version of the `py_gapic_assembly_pkg` rule, to make output of microgenerator compatible with `GAPICBazel` class in synthtool. 4) Add `plugin_args` argument for python_gapic_library rule to pass custom argumetns to the plugin (similar to PHP rules).
|
@software-dov @aohren PTAL |
software-dov
left a comment
There was a problem hiding this comment.
I'm assuming the bazel bits are all correct. Just a few nits to pick
| # Import grpc as a native bazel dependency. This avoids duplication and also | ||
| # spedds up loading phase a lot (otherwise python_rules will be building grpcio | ||
| # from sources in a single-core speed, which takes around 5 minutes on a regular | ||
| # workstation) |
There was a problem hiding this comment.
Wat? Why is it building single-cored?
There was a problem hiding this comment.
I dont know how exactly it does it, but based on time it takes and the CPU load on the build machine I assumed it must be single core
| srcjar_srcs = [] | ||
| for dep in ctx.attr.deps: | ||
| for f in dep.files.to_list(): | ||
| if f.extension in ("srcjar", "jar", "zip"): | ||
| srcjar_srcs.append(f) |
There was a problem hiding this comment.
Does skylark allow list comprehensions? Personal preference, feel free to ignore, but I think
srcjar_srcs = [
dep_file
for dep in ctx.attr.deps
for dep_file in dep.files.to_list()
if dep_file.extension in ("srcjar", "jar", "zip")
]is more readable because of the indentation.
There was a problem hiding this comment.
It is a reduced verison of more complicated for loops copied from the other rules. Starlak support list comprehension. For sake of style consistency with the other rules lets keep it like that.
WORKSPACE
Outdated
|
|
||
| # | ||
| # Import grpc as a native bazel dependency. This avoids duplication and also | ||
| # spedds up loading phase a lot (otherwise python_rules will be building grpcio |
|
Any updates or increased bandwidth? |
|
@software-dov Still trying to make CI work with gapic-generator-python (python3.7 requirement issue). Before that issue is solved this PR can't be used (can't integrate it in googleapis). |
This includes: 1) Fix long time initial load time (5+ min). This was caused by python_rules buildling `grpcio` dependency from sources in one core (which was super slow). Switched to using bazel-native `"@com_github_grpc_grpc//src/python/grpcio/grpc:grpcio"` target instead, which is not only much faster, but is also already used in googleapis, so there is no additional cost for reusing it in microgenerator rules. 2) Properly handle `pandoc` dependency (platform-sepcific version of pandoc is properly pulled by bazel itself using toolchains). 3) Add simplistic version of the `py_gapic_assembly_pkg` rule, to make output of microgenerator compatible with `GAPICBazel` class in synthtool. 4) Add `plugin_args` argument for python_gapic_library rule to pass custom argumetns to the plugin (similar to PHP rules). 5) Add python3.6 support via `--define=gapic_gen_python.3.6` command line argument for for `bazel build command`. Otherwise gapic-generator-python can be executed only on systems with python3.7+.
|
@software-dov PTAL. I finally made it wokr from kokoro under pyenv 3.6.1 python (the available on a kokoro instance) |
software-dov
left a comment
There was a problem hiding this comment.
LG, just a few nits/questions.
BUILD.bazel
Outdated
| ":gapic_gen_python_3_6": [requirement("dataclasses")], | ||
| "//conditions:default": [], | ||
| }), | ||
| ) No newline at end of file |
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
…ary generator. (#255) * Integrate Python GAPIC Microgenerator in googleapis. This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e * fix: add resource reference to proto files chore: update copyright and comments PiperOrigin-RevId: 309990843 Source-Author: Google APIs <noreply@google.com> Source-Date: Tue May 5 11:51:12 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: 4bef0001ac7040431ea24b6187424fdec9c08b1b Source-Link: googleapis/googleapis@4bef000
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
Update comments on protos to clarify size limits on values. * Integrate Python GAPIC Microgenerator in googleapis. This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e * fix(python): use python installed by pyenv for bazel (#520) Source-Author: Jeff Ching <chingor@google.com> Source-Date: Mon May 4 15:52:28 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: a2c1c4f89a5e220e7b39420ebea33623c7c72804 Source-Link: googleapis/synthtool@a2c1c4f * Fix documentation for string_value. The value does not have to be at least 1MB, but rather, at most 1MB. PiperOrigin-RevId: 309845930 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 16:55:46 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: 1b5a8d2bbb69c5a04db26bd546d2888e609c6bab Source-Link: googleapis/googleapis@1b5a8d2 * fix: make args optional (#521) Source-Author: Summer Ji <summerji@google.com> Source-Date: Tue May 5 09:52:17 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: ea3ae392fced25d7d6f5c7ef9c8a1f24768a0936 Source-Link: googleapis/synthtool@ea3ae39 * fix: make .kokoro-autosynth executable (#522) to fix googleapis/synthtool#519 Source-Author: Jeffrey Rennie <rennie@google.com> Source-Date: Tue May 5 10:12:11 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: ab883569eb0257bbf16a6d825fd018b3adde3912 Source-Link: googleapis/synthtool@ab88356 * fix: add resource reference to proto files chore: update copyright and comments PiperOrigin-RevId: 309990843 Source-Author: Google APIs <noreply@google.com> Source-Date: Tue May 5 11:51:12 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: 4bef0001ac7040431ea24b6187424fdec9c08b1b Source-Link: googleapis/googleapis@4bef000
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
* Integrate Python GAPIC Microgenerator in googleapis. This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e * ci(java): switch to GitHub Actions (#533) * ci: switch to GitHub Actions * update based on comment Source-Author: Stephanie Wang <stephaniewang526@users.noreply.github.com> Source-Date: Mon May 11 12:54:00 2020 -0400 Source-Repo: googleapis/synthtool Source-Sha: 55cdc844877d97139f25004229842624a6a86a02 Source-Link: googleapis/synthtool@55cdc84 * chore: move ci.yaml to workflows dir (#535) Source-Author: Stephanie Wang <stephaniewang526@users.noreply.github.com> Source-Date: Mon May 11 16:24:04 2020 -0400 Source-Repo: googleapis/synthtool Source-Sha: 98c50772ec23295c64cf0d2ddf199ea52961fd4c Source-Link: googleapis/synthtool@98c5077
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
This PR uses using documentai as an example. Depends on googleapis/gapic-generator-python#402 PiperOrigin-RevId: 309824146 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon May 4 15:06:44 2020 -0700 Source-Repo: googleapis/googleapis Source-Sha: e0f9d9e1f9de890db765be46f45ca8490723e3eb Source-Link: googleapis/googleapis@e0f9d9e
Shoud fix #400 and #390, plus a bunch of other not-yet-opened issues.
This includes:
Fix long initial load time (5+ min). This was caused by python_rules buildling
grpciodependency from sources in one core (which was super slow). Switched to using bazel-native"@com_github_grpc_grpc//src/python/grpcio/grpc:grpcio"target instead, which is not only much faster, but is also already used in googleapis, so there is no additional cost for reusing it in microgenerator rules.Properly handle
pandocdependency (platform-sepcific version of pandoc is properly pulled by bazel itself using toolchains).Add simplistic version of the
py_gapic_assembly_pkgrule, to make output of microgenerator compatible withGAPICBazelclass in synthtool.Add
plugin_argsargument for python_gapic_library rule to pass custom argumetns to the plugin (similar to PHP rules).Add compatibility with
python3.6runtime (otherwisepython3.7is minimum because of dependency ondataclassesmodule). Python 3.6 compatibility can be enabled by adding--define=gapic_gen_python=3.6command line argument tobazel buildcommand.Add support for Python runtimes installed with
pyenv. To tell bazel using Python3 installed via pyenv add--extra_toolchains=@gapic_generator_python//:pyenv3_toolchainargument tobazel buildcommand.