feat(dev-infra): create shared platform for remote execution (#41767)

Introduces a shared Bazel platform for remote execution builds
using Google cloud. Previously we used `bazel_toolchains` for
providing the platform w/ additional CPP and Java toolchains

`bazel_toolchains` no longer provides default toolchains with the
latest version, but provides a tool (linux and windows only) for
generating toolchain/platforms, which then need to be checked
into the repository. This is quite inconvenient and cumbersome
(especially with no macOS support), so we just provide our own
platform and CPP toolchain within `//dev-infra`. This is more
simple than all the effort we'd need to make the toolchain
generation tool work (while it would also increase the amount
of checked-in sources significantly; with more unused toolchains
for CPP or Java)

PR Close #41767
This commit is contained in:
Paul Gschwendtner 2021-04-22 16:34:36 +02:00 committed by Jessica Janiuk
parent a0a373be8d
commit 59bb24148e
3 changed files with 96 additions and 0 deletions

View File

@ -5,5 +5,6 @@ filegroup(
srcs = [
"BUILD.bazel",
"expand_template.bzl",
"//dev-infra/bazel/remote-execution:files",
],
)

View File

@ -0,0 +1,38 @@
package(default_visibility = ["//visibility:public"])
platform(
name = "platform",
constraint_values = [
"@bazel_tools//platforms:linux",
"@bazel_tools//platforms:x86_64",
"@bazel_tools//tools/cpp:clang",
],
# We use a basic docker image from the Google Cloud container registry that supports
# browser tests. Note that we usually do not use any of the local browsers, but the image
# guarantees that necessary dependencies for launching browsers are installed. Since we
# do not rely on many binaries/tools from the image, the image doesn't need to be updated
# frequently. There are rare cases where it needs to be updated. e.g. for a more recent Bash
# version, or new system settings that are required for launching browsers. In order to do that,
# we need to either see if the `rbe-ubuntu16-04-webtest` image can be updated, or if we need to
# build and publish our own image to the Google cloud image registry. Additionally, we set th
# `SYS_ADMIN` capability so that browsers can be launched with sandbox mode enabled. Related
# information: https://developers.google.com/web/tools/puppeteer/troubleshooting#running_puppeteer_in_docker
remote_execution_properties = """
properties: {
name: "container-image"
value:"docker://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04-webtest@sha256:886a12dc4726f5b991b46386292afa8d943b6703a5496c8a1e07cfde778d9044"
}
properties: {
name: "dockerAddCapabilities"
value: "SYS_ADMIN"
}
""",
)
filegroup(
name = "files",
srcs = [
"BUILD.bazel",
"//dev-infra/bazel/remote-execution/cpp:files",
],
)

View File

@ -0,0 +1,57 @@
load("@bazel_tools//tools/cpp:cc_toolchain_config.bzl", "cc_toolchain_config")
package(default_visibility = ["//visibility:public"])
filegroup(
name = "files",
srcs = ["BUILD.bazel"],
)
cc_toolchain_suite(
name = "cc_toolchain_suite",
toolchains = {
"k8": ":cc_compiler_k8",
},
)
toolchain(
name = "cc_toolchain",
exec_compatible_with = [
"@bazel_tools//platforms:linux",
"@bazel_tools//platforms:x86_64",
"@bazel_tools//tools/cpp:clang",
],
target_compatible_with = [
"@bazel_tools//platforms:linux",
"@bazel_tools//platforms:x86_64",
],
toolchain = ":cc_compiler_k8",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
# Basic CC toolchain for k8 remote containers. Based on the default k8
# toolchain provided in Bazel (but unfortunately internal).
# https://github.com/bazelbuild/bazel/blob/c951753097b45cfb9be512c02199aa891b9646b8/tools/cpp/BUILD.tools#L298-L311
cc_toolchain(
name = "cc_compiler_k8",
all_files = ":empty",
ar_files = ":empty",
as_files = ":empty",
compiler_files = ":empty",
dwp_files = ":empty",
linker_files = ":empty",
objcopy_files = ":empty",
strip_files = ":empty",
supports_param_files = 1,
toolchain_config = ":k8_toolchain_config",
toolchain_identifier = "cc-k8-compiler",
)
cc_toolchain_config(
name = "k8_toolchain_config",
compiler = "compiler",
cpu = "local",
)
# Empty filegroup used for defining the CC toolchain.
filegroup(name = "empty")