diff --git a/.bazelrc b/.bazelrc index af0654099e..c089caad37 100644 --- a/.bazelrc +++ b/.bazelrc @@ -74,3 +74,28 @@ test --experimental_ui # to determine if the compiler used should be Ivy or ViewEngine one can use `--define=compile=local` on # any bazel target. This is a temporary flag until codebase is permanently switched to Ivy. build --define=compile=legacy + +############################### +# Remote Build Execution support +# Turn on these settings with +# --config=remote +############################### + +# Load default settings for Remote Build Execution +import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.20.0.bazelrc + +# Increase the default number of jobs by 50% because our build has lots of +# parallelism +build:remote --jobs=150 + +# Point to our custom execution platform; see tools/BUILD.bazel +build:remote --extra_execution_platforms=//tools:rbe_ubuntu1604-angular +build:remote --host_platform=//tools:rbe_ubuntu1604-angular +build:remote --platforms=//tools:rbe_ubuntu1604-angular + +# Remote instance. +build:remote --remote_instance_name=projects/internal-200822/instances/default_instance + +# Do not accept remote cache. +# We need to understand the security risks of using prior build artifacts. +build:remote --remote_accept_cached=false diff --git a/.circleci/bazel.rc b/.circleci/bazel.rc index 30d07b276e..754a970122 100644 --- a/.circleci/bazel.rc +++ b/.circleci/bazel.rc @@ -1,6 +1,6 @@ # These options are enabled when running on CI # We do this by copying this file to /etc/bazel.bazelrc at the start of the build. -# See remote cache documentation in /docs/BAZEL.md +# See documentation in /docs/BAZEL.md # Don't be spammy in the logs # TODO(gmagolan): Hide progress again once build performance improves @@ -8,9 +8,6 @@ # error: Too long with no output (exceeded 10m0s) # build --noshow_progress -# Don't run manual tests -test --test_tag_filters=-manual - # Print all the options that apply to the build. # This helps us diagnose which options override others # (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc) diff --git a/.circleci/config.yml b/.circleci/config.yml index 258387bb6b..b9f46f5128 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,7 +25,10 @@ var_4: &define_env_vars var_5: &setup_bazel_remote_execution run: name: "Setup bazel RBE remote execution" - command: openssl aes-256-cbc -d -in .circleci/gcp_token -k "$CI_REPO_NAME" -out /home/circleci/.gcp_credentials && echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/circleci/.gcp_credentials" >> $BASH_ENV && sudo bash -c "cat .circleci/rbe-bazel.rc >> /etc/bazel.bazelrc" + command: | + openssl aes-256-cbc -d -in .circleci/gcp_token -k "$CI_REPO_NAME" -out /home/circleci/.gcp_credentials + echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/circleci/.gcp_credentials" >> $BASH_ENV + sudo bash -c "echo 'build --config=remote' >> /etc/bazel.bazelrc" # Settings common to each job var_6: &job_defaults diff --git a/.circleci/rbe-bazel.rc b/.circleci/rbe-bazel.rc deleted file mode 100644 index 74608cfc79..0000000000 --- a/.circleci/rbe-bazel.rc +++ /dev/null @@ -1,77 +0,0 @@ -# These options are enabled when running on CI with Remote Build Execution. - -################################################################ -# Toolchain related flags for remote build execution. # -################################################################ -# Remote Build Execution requires a strong hash function, such as SHA256. -startup --host_jvm_args=-Dbazel.DigestFunction=SHA256 - -# Depending on how many machines are in the remote execution instance, setting -# this higher can make builds faster by allowing more jobs to run in parallel. -# Setting it too high can result in jobs that timeout, however, while waiting -# for a remote machine to execute them. -build --jobs=150 - -# Set several flags related to specifying the platform, toolchain and java -# properties. -# These flags are duplicated rather than imported from (for example) -# %workspace%/configs/ubuntu16_04_clang/1.0/toolchain.bazelrc to make this -# bazelrc a standalone file that can be copied more easily. -# These flags should only be used as is for the rbe-ubuntu16-04 container -# and need to be adapted to work with other toolchain containers. -build --host_javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.0:jdk8 -build --javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.0:jdk8 -build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 -build --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 -build --crosstool_top=@bazel_toolchains//configs/ubuntu16_04_clang/1.0/bazel_0.15.0/default:toolchain -build --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 -# Platform flags: -# The toolchain container used for execution is defined in the target indicated -# by "extra_execution_platforms", "host_platform" and "platforms". -# If you are using your own toolchain container, you need to create a platform -# target with "constraint_values" that allow for the toolchain specified with -# "extra_toolchains" to be selected (given constraints defined in -# "exec_compatible_with"). -# More about platforms: https://docs.bazel.build/versions/master/platforms.html -build --extra_toolchains=@bazel_toolchains//configs/ubuntu16_04_clang/1.0/bazel_0.15.0/cpp:cc-toolchain-clang-x86_64-default -build --extra_execution_platforms=//tools:rbe_ubuntu1604-angular -build --host_platform=//tools:rbe_ubuntu1604-angular -build --platforms=//tools:rbe_ubuntu1604-angular - -# Set various strategies so that all actions execute remotely. Mixing remote -# and local execution will lead to errors unless the toolchain and remote -# machine exactly match the host machine. -build --spawn_strategy=remote -build --strategy=Javac=remote -build --strategy=Closure=remote -build --genrule_strategy=remote -build --define=EXECUTOR=remote - -# Enable the remote cache so action results can be shared across machines, -# developers, and workspaces. -build --remote_cache=remotebuildexecution.googleapis.com - -# Enable remote execution so actions are performed on the remote systems. -build --remote_executor=remotebuildexecution.googleapis.com - -# Remote instance. -build --remote_instance_name=projects/internal-200822/instances/default_instance - -# Enable encryption. -build --tls_enabled=true - -# Enforce stricter environment rules, which eliminates some non-hermetic -# behavior and therefore improves both the remote cache hit rate and the -# correctness and repeatability of the build. -build --experimental_strict_action_env=true - -# Set a higher timeout value, just in case. -build --remote_timeout=3600 - -# Enable authentication. This will pick up application default credentials by -# default. You can use --auth_credentials=some_file.json to use a service -# account credential instead. -build --auth_enabled=true - -# Do not accept remote cache. -build --remote_accept_cached=false diff --git a/WORKSPACE b/WORKSPACE index 04b6cb1c4a..4257235643 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -7,6 +7,12 @@ load( "rules_angular_dev_dependencies", ) +http_archive( + name = "io_bazel_rules_go", + sha256 = "b7a62250a3a73277ade0ce306d22f122365b513f5402222403e507f2f997d421", + url = "https://github.com/bazelbuild/rules_go/releases/download/0.16.3/rules_go-0.16.3.tar.gz", +) + # Uncomment for local bazel rules development #local_repository( # name = "build_bazel_rules_nodejs", @@ -20,6 +26,11 @@ load( # Angular Bazel users will call this function rules_angular_dependencies() +# Install transitive deps of rules_nodejs +load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dependencies") + +rules_nodejs_dependencies() + # These are the dependencies only for us rules_angular_dev_dependencies() @@ -28,11 +39,6 @@ load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dependenci rules_typescript_dependencies() -# Install transitive deps of rules_nodejs -load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dependencies") - -rules_nodejs_dependencies() - # # Point Bazel to WORKSPACEs that live in subdirectories # @@ -55,9 +61,11 @@ local_repository( # load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install") -check_bazel_version("0.18.0", """ -If you are on a Mac and using Homebrew, there is a breaking change to the installation in Bazel 0.16 -See https://blog.bazel.build/2018/08/22/bazel-homebrew.html +check_bazel_version("0.20.0", """ +You no longer need to install Bazel on your machine. +Angular has a dependency on the @bazel/bazel package which supplies it. +Try running `yarn bazel` instead. + (If you did run that, check that you've got a fresh `yarn install`) """) diff --git a/integration/bazel/WORKSPACE b/integration/bazel/WORKSPACE index a25c5ed581..e34220c94e 100644 --- a/integration/bazel/WORKSPACE +++ b/integration/bazel/WORKSPACE @@ -1,5 +1,7 @@ workspace(name = "bazel_integration_test") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + # # Download Bazel toolchain dependencies as needed by build actions # diff --git a/package.json b/package.json index a062ffd873..9e9e69e181 100644 --- a/package.json +++ b/package.json @@ -88,9 +88,10 @@ }, "// 2": "devDependencies are not used under Bazel. Many can be removed after test.sh is deleted.", "devDependencies": { - "@bazel/bazel": "^0.18.1", + "@bazel/bazel": "~0.20.0", "@bazel/buildifier": "^0.19.2", "@bazel/ibazel": "~0.8.2", + "@bazel/karma": "0.21.0", "@types/angular": "^1.6.47", "@types/base64-js": "1.2.5", "@types/jasminewd2": "^2.0.4", diff --git a/packages/bazel/package.bzl b/packages/bazel/package.bzl index d417094d27..a650db8895 100644 --- a/packages/bazel/package.bzl +++ b/packages/bazel/package.bzl @@ -38,11 +38,11 @@ def rules_angular_dependencies(): _maybe( http_archive, name = "bazel_toolchains", - sha256 = "c3b08805602cd1d2b67ebe96407c1e8c6ed3d4ce55236ae2efe2f1948f38168d", - strip_prefix = "bazel-toolchains-5124557861ebf4c0b67f98180bff1f8551e0b421", + sha256 = "07a81ee03f5feae354c9f98c884e8e886914856fb2b6a63cba4619ef10aaaf0b", + strip_prefix = "bazel-toolchains-31b5dc8c4e9c7fd3f5f4d04c6714f2ce87b126c1", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/5124557861ebf4c0b67f98180bff1f8551e0b421.tar.gz", - "https://github.com/bazelbuild/bazel-toolchains/archive/5124557861ebf4c0b67f98180bff1f8551e0b421.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/31b5dc8c4e9c7fd3f5f4d04c6714f2ce87b126c1.tar.gz", + "https://github.com/bazelbuild/bazel-toolchains/archive/31b5dc8c4e9c7fd3f5f4d04c6714f2ce87b126c1.tar.gz", ], ) @@ -79,17 +79,15 @@ def rules_angular_dev_dependencies(): ############################################# http_archive( name = "io_bazel_rules_sass", - sha256 = "dbe9fb97d5a7833b2a733eebc78c9c1e3880f676ac8af16e58ccf2139cbcad03", - strip_prefix = "rules_sass-1.11.0", - url = "https://github.com/bazelbuild/rules_sass/archive/1.11.0.zip", + strip_prefix = "rules_sass-1.15.1", + url = "https://github.com/bazelbuild/rules_sass/archive/1.15.1.zip", ) http_archive( name = "io_bazel_skydoc", - sha256 = "7bfb5545f59792a2745f2523b9eef363f9c3e7274791c030885e7069f8116016", - strip_prefix = "skydoc-fe2e9f888d28e567fef62ec9d4a93c425526d701", + strip_prefix = "skydoc-a9550cb3ca3939cbabe3b589c57b6f531937fa99", # TODO: switch to upstream when https://github.com/bazelbuild/skydoc/pull/103 is merged - url = "https://github.com/alexeagle/skydoc/archive/fe2e9f888d28e567fef62ec9d4a93c425526d701.zip", + url = "https://github.com/alexeagle/skydoc/archive/a9550cb3ca3939cbabe3b589c57b6f531937fa99.zip", ) def _maybe(repo_rule, name, **kwargs): diff --git a/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.20.0.bazelrc b/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.20.0.bazelrc new file mode 100644 index 0000000000..8f5db01d29 --- /dev/null +++ b/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.20.0.bazelrc @@ -0,0 +1,133 @@ +# Copyright 2016 The Bazel Authors. All rights reserved. +# +# 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. + +# This file is auto-generated from release/bazelrc.tpl and should not be +# modified directly. + +# This .bazelrc file contains all of the flags required for the toolchain, +# Remote Build Execution, and the Bazel Build Results UI. Specific flags in +# your Bazel command allow you to use only the remote build, to use only the +# results UI, or to use them both together. +# +# This .bazelrc file also contains all of the flags required for the local +# docker sandboxing. + +# Depending on how many machines are in the remote execution instance, setting +# this higher can make builds faster by allowing more jobs to run in parallel. +# Setting it too high can result in jobs that timeout, however, while waiting +# for a remote machine to execute them. +build:remote --jobs=50 + +# Set several flags related to specifying the platform, toolchain and java +# properties. +# These flags are duplicated rather than imported from (for example) +# %workspace%/configs/ubuntu16_04_clang/1.1/toolchain.bazelrc to make this +# bazelrc a standalone file that can be copied more easily. +# These flags should only be used as is for the rbe-ubuntu16-04 container +# and need to be adapted to work with other toolchain containers. +build:remote --host_javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 +build:remote --javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 +build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 +build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 +build:remote --crosstool_top=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.20.0/default:toolchain +build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 +# Platform flags: +# The toolchain container used for execution is defined in the target indicated +# by "extra_execution_platforms", "host_platform" and "platforms". +# If you are using your own toolchain container, you need to create a platform +# target with "constraint_values" that allow for the toolchain specified with +# "extra_toolchains" to be selected (given constraints defined in +# "exec_compatible_with"). +# More about platforms: https://docs.bazel.build/versions/master/platforms.html +build:remote --extra_toolchains=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.20.0/cpp:cc-toolchain-clang-x86_64-default +build:remote --extra_execution_platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 +build:remote --host_platform=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 +build:remote --platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:rbe_ubuntu1604 + +# Set various strategies so that all actions execute remotely. Mixing remote +# and local execution will lead to errors unless the toolchain and remote +# machine exactly match the host machine. +build:remote --spawn_strategy=remote +build:remote --strategy=Javac=remote +build:remote --strategy=Closure=remote +build:remote --genrule_strategy=remote +build:remote --define=EXECUTOR=remote + +# Enable the remote cache so action results can be shared across machines, +# developers, and workspaces. +build:remote --remote_cache=remotebuildexecution.googleapis.com + +# Enable remote execution so actions are performed on the remote systems. +build:remote --remote_executor=remotebuildexecution.googleapis.com + +# Enable encryption. +build:remote --tls_enabled=true + +# Enforce stricter environment rules, which eliminates some non-hermetic +# behavior and therefore improves both the remote cache hit rate and the +# correctness and repeatability of the build. +build:remote --experimental_strict_action_env=true + +# Set a higher timeout value, just in case. +build:remote --remote_timeout=3600 + +# Enable authentication. This will pick up application default credentials by +# default. You can use --auth_credentials=some_file.json to use a service +# account credential instead. +build:remote --auth_enabled=true + +# Set flags for uploading to BES in order to view results in the Bazel Build +# Results UI. +build:results --bes_backend="buildeventservice.googleapis.com" +build:results --bes_timeout=60s +build:results --tls_enabled + +# Output BES results url +build:results --bes_results_url="https://source.cloud.google.com/results/invocations/" + +# Set flags for uploading to BES without Remote Build Execution. +build:results-local --bes_backend="buildeventservice.googleapis.com" +build:results-local --bes_timeout=60s +build:results-local --tls_enabled=true +build:results-local --auth_enabled=true +build:results-local --spawn_strategy=local +build:results-local --remote_cache=remotebuildexecution.googleapis.com +build:results-local --remote_timeout=3600 +build:results-local --bes_results_url="https://source.cloud.google.com/results/invocations/" + +# The following flags are only necessary for local docker sandboxing +# with the rbe-ubuntu16-04 container. Use of these flags is still experimental. +build:docker-sandbox --host_javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 +build:docker-sandbox --javabase=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:jdk8 +build:docker-sandbox --crosstool_top=@bazel_toolchains//configs/ubuntu16_04_clang/1.1/bazel_0.20.0/default:toolchain +build:docker-sandbox --experimental_docker_image=gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:9bd8ba020af33edb5f11eff0af2f63b3bcb168cd6566d7b27c6685e717787928 +build:docker-sandbox --spawn_strategy=docker +build:docker-sandbox --strategy=Javac=docker +build:docker-sandbox --strategy=Closure=docker +build:docker-sandbox --genrule_strategy=docker +build:docker-sandbox --define=EXECUTOR=remote +build:docker-sandbox --experimental_docker_verbose +build:docker-sandbox --experimental_enable_docker_sandbox + +# The following flags enable the remote cache so action results can be shared +# across machines, developers, and workspaces. +build:remote-cache --remote_cache=remotebuildexecution.googleapis.com +build:remote-cache --tls_enabled=true +build:remote-cache --experimental_strict_action_env=true +build:remote-cache --remote_timeout=3600 +build:remote-cache --auth_enabled=true +build:remote-cache --spawn_strategy=standalone +build:remote-cache --strategy=Javac=standalone +build:remote-cache --strategy=Closure=standalone +build:remote-cache --genrule_strategy=standalone diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index 04c8cc83c1..f42efff9ef 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -31,7 +31,7 @@ platform( remote_execution_properties = """ properties: { name: "container-image" - value:"docker://gcr.io/asci-toolchain/nosla-ubuntu16_04-webtest@sha256:55fae2e51ecf38fec9778ab93a9b4edd7d318eeb5f420602450d3b509b52edf9" + value:"docker://gcr.io/asci-toolchain/nosla-ubuntu16_04-webtest@sha256:e874885f5e3d9ac0c0d3176e5369cb5969467dbf9ad8d42b862829cec8d84b9b" } properties: { name: "dockerAddCapabilities" diff --git a/yarn.lock b/yarn.lock index 4da53a7530..64aff3e34a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,29 +40,29 @@ "@angular-devkit/core" "7.0.5" rxjs "6.3.3" -"@bazel/bazel-darwin_x64@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.18.0.tgz#bab437605a702279d42f59caa4741bb327eb7dbc" - integrity sha512-um2OzgLL2Gd/W6joOpvrSTcqpnupliPNpwe/uE7sB0huBSJ/4Im0w2IlCTI6C7OfgMcbpUj4YxgUa9T6u6WY6w== +"@bazel/bazel-darwin_x64@0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.20.0.tgz#648d61c32a3c5fccb7bf70b753071b6e54b11f21" + integrity sha512-zeoeVK504341GfnaxdaB4pFzQV0YOK1HLiYj3/ocamPFxAJRh9abvKB8iOpqD5Oal0j7VsINxnXCjovp9a4urA== -"@bazel/bazel-linux_x64@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.18.0.tgz#0c02b2404ec95c180e17615cc7079ee07df48a69" - integrity sha512-Rq8X8bL6SgQvbOHnfPhSgF6hp+f6Fbt2w6pRmBlFvV1J+CeUyrSrrRXfnnO1bjIuq05Ur3mV8ULA0qK6rtA5lQ== +"@bazel/bazel-linux_x64@0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.20.0.tgz#2568628a0d0b85dcc69d0ab701b1d6e10551357d" + integrity sha512-PpHzoEqfXty8dc1/p1tVFXtbPyrE1n0N79QmYePjJ5mJMyW7uBF/zV4IajYY8+IpJEcDVq5v4BavSexOmVJRmA== -"@bazel/bazel-win32_x64@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.18.0.tgz#aa4575fb00066dcf59a6d464971774dea6a0bafd" - integrity sha512-U2TbfK8B7dc3JqXSFwj2oXCQrxEaSzCCUkAHjAOIGOKzx/HLKIKs+NJj9IQkLLr7BsMU+Qqzo8aqo11E+Vs+aA== +"@bazel/bazel-win32_x64@0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.20.0.tgz#af7d041dae4c066e7aa8618949e2de1aad07495e" + integrity sha512-3bqHXFBvLnbvNzr1KCQ1zryTYvHMoQffaWVekbckgPyT2VPEj3abuB91+DrRYmZdPjcgPYnjnyanxZHDkKuF2g== -"@bazel/bazel@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.18.1.tgz#97c235bcc4d40139dd9029b232273b69270ad3a5" - integrity sha512-2KjB0umWsW5or78hTG/RVLmAKmeouyDjqjNsGlOY3pzpj9yqDMG5iDPJh4Q1/hXxiDmF2qZWwqWIEh55LFZXaQ== +"@bazel/bazel@~0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.20.0.tgz#46688e915896b27200df61ab8175a7ba3e378915" + integrity sha512-JT6hOR6CU24K8Vxdfedkm/MOCjF2stl/GodDw2jmEeDEEcxDId4LQVwYxAt7zAsaJ4a7UB1xjIH7GN5GBuUaYQ== optionalDependencies: - "@bazel/bazel-darwin_x64" "0.18.0" - "@bazel/bazel-linux_x64" "0.18.0" - "@bazel/bazel-win32_x64" "0.18.0" + "@bazel/bazel-darwin_x64" "0.20.0" + "@bazel/bazel-linux_x64" "0.20.0" + "@bazel/bazel-win32_x64" "0.20.0" "@bazel/buildifier-darwin_x64@0.19.2": version "0.19.2"