Add Travis CI for enforcing buildifier formatting (#68)
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..e5bafee
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,40 @@
+dist: trusty
+sudo: required
+
+os:
+ - linux
+
+python:
+ - "2.7"
+
+jdk:
+ - oraclejdk8 # Building Bazel requires JDK8.
+
+language: go
+go: 1.10.x
+install: true
+
+services:
+ - docker
+
+addons:
+ apt:
+ sources:
+ - sourceline: 'deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8'
+ key_url: 'https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg'
+ packages:
+ - bazel
+
+install:
+ - go get -u github.com/bazelbuild/buildifier/buildifier
+
+ script:
+ # Check that our direct testing passes.
+ # The tests takes long to finish and currently we cover bazel tests in Bazel CI
+ # TODO: add tests cannot be run by bazel here
+ # - bazel clean && bazel test --test_output=errors //...
+
+ # Check for issues with the format of our bazel config files.
+ - buildifier -mode=check $(find . -name BUILD -type f)
+ - buildifier -mode=check $(find . -name WORKSPACE -type f)
+ - buildifier -mode=check $(find . -name '*.bzl' -type f)
diff --git a/WORKSPACE b/WORKSPACE
index 537219a..1f06430 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -30,8 +30,8 @@
load(
"@io_bazel_rules_docker//container:container.bzl",
- container_repositories = "repositories",
"container_pull",
+ container_repositories = "repositories",
)
container_repositories()
@@ -92,7 +92,7 @@
url = "https://github.com/bazelbuild/rules_go/releases/download/0.10.1/rules_go-0.10.1.tar.gz",
)
-load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains")
+load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies")
go_rules_dependencies()
@@ -128,9 +128,9 @@
load(
"@distroless//package_manager:package_manager.bzl",
- "package_manager_repositories",
- "dpkg_src",
"dpkg_list",
+ "dpkg_src",
+ "package_manager_repositories",
)
package_manager_repositories()
@@ -225,9 +225,9 @@
load(
"//third_party/libcxx:revision.bzl",
- "LIBCXX_REVISION",
"DEBIAN8_LIBCXX_SHA256",
"DEBIAN9_LIBCXX_SHA256",
+ "LIBCXX_REVISION",
"UBUNTU16_04_LIBCXX_SHA256",
)
diff --git a/configs/debian8_clang/0.1.0/bazel_0.5.2/BUILD b/configs/debian8_clang/0.1.0/bazel_0.5.2/BUILD
index ae0d85f..ba3bfcd 100755
--- a/configs/debian8_clang/0.1.0/bazel_0.5.2/BUILD
+++ b/configs/debian8_clang/0.1.0/bazel_0.5.2/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.1.0/bazel_0.5.4/BUILD b/configs/debian8_clang/0.1.0/bazel_0.5.4/BUILD
index ae0d85f..ba3bfcd 100755
--- a/configs/debian8_clang/0.1.0/bazel_0.5.4/BUILD
+++ b/configs/debian8_clang/0.1.0/bazel_0.5.4/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.1.0/bazel_0.6.0/BUILD b/configs/debian8_clang/0.1.0/bazel_0.6.0/BUILD
index ba8e4e0..5f639d1 100755
--- a/configs/debian8_clang/0.1.0/bazel_0.6.0/BUILD
+++ b/configs/debian8_clang/0.1.0/bazel_0.6.0/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.1.0/bazel_0.6.0/dummy_toolchain.bzl b/configs/debian8_clang/0.1.0/bazel_0.6.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.1.0/bazel_0.6.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.1.0/bazel_0.6.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.2.0/bazel_0.10.0/BUILD b/configs/debian8_clang/0.2.0/bazel_0.10.0/BUILD
index bc64924..0efd037 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.10.0/BUILD
+++ b/configs/debian8_clang/0.2.0/bazel_0.10.0/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.2.0/bazel_0.10.0/dummy_toolchain.bzl b/configs/debian8_clang/0.2.0/bazel_0.10.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.10.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.2.0/bazel_0.10.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.2.0/bazel_0.6.0/BUILD b/configs/debian8_clang/0.2.0/bazel_0.6.0/BUILD
index ba8e4e0..5f639d1 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.6.0/BUILD
+++ b/configs/debian8_clang/0.2.0/bazel_0.6.0/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.2.0/bazel_0.6.0/dummy_toolchain.bzl b/configs/debian8_clang/0.2.0/bazel_0.6.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.6.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.2.0/bazel_0.6.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.2.0/bazel_0.7.0/BUILD b/configs/debian8_clang/0.2.0/bazel_0.7.0/BUILD
index 1db02e1..887cb71 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.7.0/BUILD
+++ b/configs/debian8_clang/0.2.0/bazel_0.7.0/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.2.0/bazel_0.7.0/dummy_toolchain.bzl b/configs/debian8_clang/0.2.0/bazel_0.7.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.7.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.2.0/bazel_0.7.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.2.0/bazel_0.8.0/dummy_toolchain.bzl b/configs/debian8_clang/0.2.0/bazel_0.8.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.8.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.2.0/bazel_0.8.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.2.0/bazel_0.9.0/BUILD b/configs/debian8_clang/0.2.0/bazel_0.9.0/BUILD
index fdfe552..946e790 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.9.0/BUILD
+++ b/configs/debian8_clang/0.2.0/bazel_0.9.0/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
@@ -104,6 +103,7 @@
)
filegroup(name = "toolchain_category")
+
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
diff --git a/configs/debian8_clang/0.2.0/bazel_0.9.0/dummy_toolchain.bzl b/configs/debian8_clang/0.2.0/bazel_0.9.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.2.0/bazel_0.9.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.2.0/bazel_0.9.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.10.0/BUILD b/configs/debian8_clang/0.3.0/bazel_0.10.0/BUILD
index bc64924..0efd037 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.10.0/BUILD
+++ b/configs/debian8_clang/0.3.0/bazel_0.10.0/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.3.0/bazel_0.10.0/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.10.0/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.10.0/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.10.0/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
index 5346d06..6db7164 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
+++ b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.12.0/default/BUILD b/configs/debian8_clang/0.3.0/bazel_0.12.0/default/BUILD
index 5346d06..6db7164 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.12.0/default/BUILD
+++ b/configs/debian8_clang/0.3.0/bazel_0.12.0/default/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.3.0/bazel_0.12.0/default/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.12.0/default/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.12.0/default/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.12.0/default/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/BUILD b/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/BUILD
index 5346d06..6db7164 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/BUILD
+++ b/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.12.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.13.0/default/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.13.0/default/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.13.0/default/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.13.0/default/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/0.3.0/bazel_0.13.0/msan/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.13.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/debian8_clang/0.3.0/bazel_0.13.0/msan/dummy_toolchain.bzl
+++ b/configs/debian8_clang/0.3.0/bazel_0.13.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/debian8_clang/BUILD b/configs/debian8_clang/BUILD
index 08e3bd9..f3ff7d8 100644
--- a/configs/debian8_clang/BUILD
+++ b/configs/debian8_clang/BUILD
@@ -17,11 +17,12 @@
package(default_visibility = ["//visibility:public"])
load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
-load("@bazel_toolchains//rules:environments.bzl",
+load(
+ "@bazel_toolchains//rules:environments.bzl",
"clang_env",
"debian8_clang_default_keys",
"debian8_clang_default_packages",
- "debian8_clang_default_repos"
+ "debian8_clang_default_repos",
)
# Created on 2017.10.18
@@ -100,7 +101,7 @@
base = "@debian8-clang//image",
bazel_version = "0.11.0",
env = clang_env() + {
- "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+ "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
},
keys = debian8_clang_default_keys(),
packages = debian8_clang_default_packages(),
@@ -130,7 +131,7 @@
base = "@debian8-clang//image",
bazel_version = "0.12.0",
env = clang_env() + {
- "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+ "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
},
keys = debian8_clang_default_keys(),
packages = debian8_clang_default_packages(),
@@ -160,7 +161,7 @@
base = "@debian8-clang//image",
bazel_version = "0.13.0",
env = clang_env() + {
- "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+ "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
},
keys = debian8_clang_default_keys(),
packages = debian8_clang_default_packages(),
diff --git a/configs/experimental/BUILD b/configs/experimental/BUILD
index 976a447..f176103 100644
--- a/configs/experimental/BUILD
+++ b/configs/experimental/BUILD
@@ -17,11 +17,12 @@
package(default_visibility = ["//visibility:public"])
load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
-load("@bazel_toolchains//rules:environments.bzl",
+load(
+ "@bazel_toolchains//rules:environments.bzl",
"clang_env",
"debian8_clang_default_keys",
"debian8_clang_default_packages",
- "debian8_clang_default_repos"
+ "debian8_clang_default_repos",
)
# Created on 2018.02.13
@@ -34,11 +35,10 @@
base = "@debian8-clang//image",
bazel_version = "0.11.0",
env = clang_env() + {
- "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+ "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
},
keys = debian8_clang_default_keys(),
packages = debian8_clang_default_packages(),
tags = ["manual"],
test = True,
)
-
diff --git a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/BUILD b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/BUILD
index b9a945e..3d2434a 100755
--- a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/BUILD
+++ b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
@@ -104,6 +103,7 @@
)
filegroup(name = "toolchain_category")
+
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
diff --git a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/dummy_toolchain.bzl b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/dummy_toolchain.bzl
+++ b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/BUILD b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/BUILD
index dfca639..dc70b7f 100755
--- a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/BUILD
+++ b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/BUILD
@@ -60,7 +60,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
@@ -104,6 +103,7 @@
)
filegroup(name = "toolchain_category")
+
toolchain(
name = "dummy_cc_toolchain",
toolchain = "dummy_cc_toolchain_impl",
diff --git a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/dummy_toolchain.bzl b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/dummy_toolchain.bzl
+++ b/configs/experimental/debian8_clang/0.2.0/bazel_0.9.0/ubsan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/BUILD b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/BUILD
index f2ddcf9..4b7f687 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/BUILD
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/dummy_toolchain.bzl b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/dummy_toolchain.bzl
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/BUILD b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/BUILD
index 757963b..1b56888 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/BUILD
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/dummy_toolchain.bzl b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/dummy_toolchain.bzl
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.10.0/ubsan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/BUILD b/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/BUILD
index 5346d06..6db7164 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/BUILD
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/BUILD
@@ -65,7 +65,6 @@
supports_param_files = 1,
)
-
# Android tooling requires a default toolchain for the armeabi-v7a cpu.
cc_toolchain(
name = "cc-compiler-armeabi-v7a",
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/dummy_toolchain.bzl b/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/dummy_toolchain.bzl
+++ b/configs/experimental/debian8_clang/0.3.0/bazel_0.12.0/ubsan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan/dummy_toolchain.bzl b/configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan/dummy_toolchain.bzl
+++ b/configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp/BUILD b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp/BUILD
index 259a890..02d28a5 100644
--- a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp/BUILD
+++ b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp/BUILD
@@ -32,7 +32,6 @@
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
-
toolchain(
name = "cc-toolchain-clang-x86_64-msan",
exec_compatible_with = [
diff --git a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default/dummy_toolchain.bzl b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default/dummy_toolchain.bzl
+++ b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/msan/dummy_toolchain.bzl b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/msan/dummy_toolchain.bzl
index c787f73..45c0285 100755
--- a/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/msan/dummy_toolchain.bzl
+++ b/configs/ubuntu16_04_clang/1.0/bazel_0.13.0/msan/dummy_toolchain.bzl
@@ -14,10 +14,10 @@
# limitations under the License.
"""Skylark rule that stubs a toolchain."""
+
def _dummy_toolchain_impl(ctx):
- ctx = ctx # unused argument
- toolchain = platform_common.ToolchainInfo()
- return [toolchain]
+ ctx = ctx # unused argument
+ toolchain = platform_common.ToolchainInfo()
+ return [toolchain]
dummy_toolchain = rule(_dummy_toolchain_impl, attrs = {})
-
diff --git a/configs/ubuntu16_04_clang/BUILD b/configs/ubuntu16_04_clang/BUILD
index 0702928..19150b9 100644
--- a/configs/ubuntu16_04_clang/BUILD
+++ b/configs/ubuntu16_04_clang/BUILD
@@ -17,11 +17,12 @@
package(default_visibility = ["//visibility:public"])
load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
-load("@bazel_toolchains//rules:environments.bzl",
+load(
+ "@bazel_toolchains//rules:environments.bzl",
"clang_env",
"ubuntu16_04_clang_default_keys",
"ubuntu16_04_clang_default_packages",
- "ubuntu16_04_clang_default_repos"
+ "ubuntu16_04_clang_default_repos",
)
# Created on 2018.05.09
@@ -46,7 +47,7 @@
base = "@ubuntu16_04-clang//image",
bazel_version = "0.13.0",
env = clang_env() + {
- "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+ "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
},
keys = ubuntu16_04_clang_default_keys(),
packages = ubuntu16_04_clang_default_packages(),
diff --git a/container/experimental/rbe-debian8/BUILD b/container/experimental/rbe-debian8/BUILD
index 19b3d40..d82fb70 100644
--- a/container/experimental/rbe-debian8/BUILD
+++ b/container/experimental/rbe-debian8/BUILD
@@ -42,13 +42,13 @@
base = "@debian8//image",
env = {
"LC_ALL ": "C.UTF-8",
- }
+ },
layers = [
- "base-ltl",
- "clang-ltl",
- "go-ltl",
- "java-ltl",
- "python-ltl",
+ ":base-ltl",
+ ":clang-ltl",
+ ":go-ltl",
+ ":java-ltl",
+ ":python-ltl",
],
tags = ["manual"],
)
diff --git a/container/rules/docker_toolchains.bzl b/container/rules/docker_toolchains.bzl
index a598e57..98bcec8 100644
--- a/container/rules/docker_toolchains.bzl
+++ b/container/rules/docker_toolchains.bzl
@@ -20,162 +20,173 @@
load("@base_images_docker//package_managers:apt_key.bzl", _key = "key")
def _input_validation(kwargs):
- if "debs" in kwargs:
- fail("debs is not supported.")
+ if "debs" in kwargs:
+ fail("debs is not supported.")
- if "packages" in kwargs and "installables_tar" in kwargs:
- fail("'packages' and 'installables_tar' cannot be specified at the same time.")
+ if "packages" in kwargs and "installables_tar" in kwargs:
+ fail("'packages' and 'installables_tar' cannot be specified at the same time.")
- has_no_packages = "packages" not in kwargs or kwargs["packages"] == []
- if has_no_packages and "additional_repos" in kwargs:
- fail("'additional_repos' can only be specified when 'packages' is not empty.")
- if has_no_packages and "keys" in kwargs:
- fail("'keys' can only be specified when 'packages' is not empty.")
+ has_no_packages = "packages" not in kwargs or kwargs["packages"] == []
+ if has_no_packages and "additional_repos" in kwargs:
+ fail("'additional_repos' can only be specified when 'packages' is not empty.")
+ if has_no_packages and "keys" in kwargs:
+ fail("'keys' can only be specified when 'packages' is not empty.")
- has_no_tar = "installables_tar" not in kwargs or kwargs["installables_tar"] == ""
- if has_no_packages and has_no_tar and "installation_cleanup_commands" in kwargs:
- fail("'installation_cleanup_commands' can only be specified when at least " +
- "one of 'packages' or 'installables_tar' is not empty.")
+ has_no_tar = "installables_tar" not in kwargs or kwargs["installables_tar"] == ""
+ if has_no_packages and has_no_tar and "installation_cleanup_commands" in kwargs:
+ fail("'installation_cleanup_commands' can only be specified when at least " +
+ "one of 'packages' or 'installables_tar' is not empty.")
-def _language_tool_layer_impl(ctx, symlinks=None, env=None, tars=None,
- files=None, packages=None, additional_repos=None,
- keys=None, installables_tars=None,
- installation_cleanup_commands=""):
- """Implementation for the language_tool_layer rule.
-
- Args:
- ctx: ctx of container_image rule
- (https://github.com/bazelbuild/rules_docker#container_image-1) +
- ctx of download_pkgs rule
- (https://github.com/GoogleCloudPlatform/base-images-docker/blob/master/package_managers/download_pkgs.bzl) +
- ctx of install_pkgs rule
- (https://github.com/GoogleCloudPlatform/base-images-docker/blob/master/package_managers/install_pkgs.bzl) +
- some overrides.
- symlinks: str Dict, overrides ctx.attr.symlinks
- env: str Dict, overrides ctx.attr.env
- tars: File list, overrides ctx.files.tars
- files: File list, overrides ctx.files.files
- packages: str List, overrides ctx.attr.packages
- additional_repos: str List, overrides ctx.attr.additional_repos
- keys: File list, overrides ctx.files.keys
- installables_tars: File list, overrides [ctx.file.installables_tar]
- installation_cleanup_commands: str, overrides ctx.attr.installation_cleanup_commands
-
- TODO(ngiraldo): add validations to restrict use of any other attrs.
- """
-
- symlinks = symlinks or ctx.attr.symlinks
- env = env or ctx.attr.env
- tars = tars or ctx.files.tars
- files = files or ctx.files.files
- packages = packages or ctx.attr.packages
- additional_repos = additional_repos or ctx.attr.additional_repos
- keys = keys or ctx.files.keys
- installables_tars = installables_tars or []
- installation_cleanup_commands = installation_cleanup_commands or ctx.attr.installation_cleanup_commands
-
- # If ctx.file.installables_tar is specified, ignore 'packages' and other tars in installables_tars.
- if ctx.file.installables_tar:
- installables_tars = [ctx.file.installables_tar]
- # Otherwise, download packages if packages list is not empty, and add the tar of downloaded
- # debs to installables_tars.
- elif packages != []:
-
- # Prepare base image for the download_pkgs rule.
- download_base = ctx.files.base[0]
-
- # Create an intermediate image with additional gpg keys used to download packages.
- if keys != []:
- image_with_keys = "%s_with_keys" % ctx.attr.name
- # Declare intermediate output file generated by add_apt_key rule.
- image_with_keys_output_executable = ctx.actions.declare_file(image_with_keys)
- image_with_keys_output_tarball = ctx.actions.declare_file(image_with_keys + ".tar")
- image_with_keys_output_layer = ctx.actions.declare_file(image_with_keys + "-layer.tar")
-
- _key.implementation(
+def _language_tool_layer_impl(
ctx,
- name = image_with_keys,
- image_tar=ctx.files.base[0],
- keys=keys,
- output_executable=image_with_keys_output_executable,
- output_tarball=image_with_keys_output_tarball,
- output_layer=image_with_keys_output_layer
- )
- download_base = image_with_keys_output_tarball
+ symlinks = None,
+ env = None,
+ tars = None,
+ files = None,
+ packages = None,
+ additional_repos = None,
+ keys = None,
+ installables_tars = None,
+ installation_cleanup_commands = ""):
+ """Implementation for the language_tool_layer rule.
- # Declare intermediate output file generated by download_pkgs rule.
- download_pkgs_output_executable = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_executable.sh")
- download_pkgs_output_tar = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_tar.tar")
- download_pkgs_output_script = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_script.sh")
+ Args:
+ ctx: ctx of container_image rule
+ (https://github.com/bazelbuild/rules_docker#container_image-1) +
+ ctx of download_pkgs rule
+ (https://github.com/GoogleCloudPlatform/base-images-docker/blob/master/package_managers/download_pkgs.bzl) +
+ ctx of install_pkgs rule
+ (https://github.com/GoogleCloudPlatform/base-images-docker/blob/master/package_managers/install_pkgs.bzl) +
+ some overrides.
+ symlinks: str Dict, overrides ctx.attr.symlinks
+ env: str Dict, overrides ctx.attr.env
+ tars: File list, overrides ctx.files.tars
+ files: File list, overrides ctx.files.files
+ packages: str List, overrides ctx.attr.packages
+ additional_repos: str List, overrides ctx.attr.additional_repos
+ keys: File list, overrides ctx.files.keys
+ installables_tars: File list, overrides [ctx.file.installables_tar]
+ installation_cleanup_commands: str, overrides ctx.attr.installation_cleanup_commands
- # download_pkgs rule consumes 'packages' and 'additional_repos'.
- _download.implementation(
- ctx,
- image_tar=download_base,
- packages=packages,
- additional_repos=additional_repos,
- output_executable=download_pkgs_output_executable,
- output_tar=download_pkgs_output_tar,
- output_script=download_pkgs_output_script
- )
- installables_tars.append(download_pkgs_output_tar)
+ TODO(ngiraldo): add validations to restrict use of any other attrs.
+ """
- # Prepare new base image for the container_image rule.
- new_base = ctx.files.base[0]
+ symlinks = symlinks or ctx.attr.symlinks
+ env = env or ctx.attr.env
+ tars = tars or ctx.files.tars
+ files = files or ctx.files.files
+ packages = packages or ctx.attr.packages
+ additional_repos = additional_repos or ctx.attr.additional_repos
+ keys = keys or ctx.files.keys
+ installables_tars = installables_tars or []
+ installation_cleanup_commands = installation_cleanup_commands or ctx.attr.installation_cleanup_commands
- # Install debian packages in the base image.
- if installables_tars != []:
- # Create a list of paths of installables_tars.
- installables_tars_paths = []
- for tar in installables_tars:
- if tar:
- installables_tars_paths.append(tar.path)
+ # If ctx.file.installables_tar is specified, ignore 'packages' and other tars in installables_tars.
+ if ctx.file.installables_tar:
+ installables_tars = [ctx.file.installables_tar]
+ # Otherwise, download packages if packages list is not empty, and add the tar of downloaded
+ # debs to installables_tars.
- # Declare file for final tarball of debian packages to install.
- final_installables_tar = ctx.actions.declare_file(ctx.attr.name + "-packages.tar")
+ elif packages != []:
+ # Prepare base image for the download_pkgs rule.
+ download_base = ctx.files.base[0]
- # Combine all installables_tars into one tar. install_pkgs only takes a
- # single installables_tar as input.
- ctx.actions.run_shell(
- inputs=installables_tars,
- outputs=[final_installables_tar],
- command="tar cvf {output_tar} --files-from /dev/null && \
- for i in {input_tars}; do tar A --file={output_tar} $i; done".format(
- output_tar=final_installables_tar.path,
- input_tars=' '.join(installables_tars_paths)
- ),
- )
+ # Create an intermediate image with additional gpg keys used to download packages.
+ if keys != []:
+ image_with_keys = "%s_with_keys" % ctx.attr.name
- # Declare intermediate output file generated by install_pkgs rule.
- install_pkgs_out = ctx.actions.declare_file(ctx.attr.name + "-with-packages.tar")
- # install_pkgs rule consumes 'final_installables_tar' and 'installation_cleanup_commands'.
- _install.implementation(
- ctx,
- image_tar=ctx.files.base[0],
- installables_tar= final_installables_tar,
- installation_cleanup_commands = installation_cleanup_commands,
- output_image_name = ctx.attr.name + "-with-packages",
- output_tar=install_pkgs_out
- )
- # Set the image with packages installed to be the new base.
- new_base = install_pkgs_out
+ # Declare intermediate output file generated by add_apt_key rule.
+ image_with_keys_output_executable = ctx.actions.declare_file(image_with_keys)
+ image_with_keys_output_tarball = ctx.actions.declare_file(image_with_keys + ".tar")
+ image_with_keys_output_layer = ctx.actions.declare_file(image_with_keys + "-layer.tar")
- # Install tars and configure env, symlinks using the container_image rule.
- result = _container.image.implementation(ctx, base=new_base, symlinks=symlinks, env=env, tars=tars, files=files)
-
- return struct(runfiles = result.runfiles,
- files = result.files,
- container_parts = result.container_parts,
- tars = tars,
- input_files = files,
- env = env,
- symlinks = symlinks,
- packages = packages,
- additional_repos = additional_repos,
+ _key.implementation(
+ ctx,
+ name = image_with_keys,
+ image_tar = ctx.files.base[0],
keys = keys,
- installables_tar = ctx.file.installables_tar,
- installation_cleanup_commands = installation_cleanup_commands
- )
+ output_executable = image_with_keys_output_executable,
+ output_tarball = image_with_keys_output_tarball,
+ output_layer = image_with_keys_output_layer,
+ )
+ download_base = image_with_keys_output_tarball
+
+ # Declare intermediate output file generated by download_pkgs rule.
+ download_pkgs_output_executable = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_executable.sh")
+ download_pkgs_output_tar = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_tar.tar")
+ download_pkgs_output_script = ctx.actions.declare_file(ctx.attr.name + "-download_pkgs_output_script.sh")
+
+ # download_pkgs rule consumes 'packages' and 'additional_repos'.
+ _download.implementation(
+ ctx,
+ image_tar = download_base,
+ packages = packages,
+ additional_repos = additional_repos,
+ output_executable = download_pkgs_output_executable,
+ output_tar = download_pkgs_output_tar,
+ output_script = download_pkgs_output_script,
+ )
+ installables_tars.append(download_pkgs_output_tar)
+
+ # Prepare new base image for the container_image rule.
+ new_base = ctx.files.base[0]
+
+ # Install debian packages in the base image.
+ if installables_tars != []:
+ # Create a list of paths of installables_tars.
+ installables_tars_paths = []
+ for tar in installables_tars:
+ if tar:
+ installables_tars_paths.append(tar.path)
+
+ # Declare file for final tarball of debian packages to install.
+ final_installables_tar = ctx.actions.declare_file(ctx.attr.name + "-packages.tar")
+
+ # Combine all installables_tars into one tar. install_pkgs only takes a
+ # single installables_tar as input.
+ ctx.actions.run_shell(
+ inputs = installables_tars,
+ outputs = [final_installables_tar],
+ command = "tar cvf {output_tar} --files-from /dev/null && \
+ for i in {input_tars}; do tar A --file={output_tar} $i; done".format(
+ output_tar = final_installables_tar.path,
+ input_tars = " ".join(installables_tars_paths),
+ ),
+ )
+
+ # Declare intermediate output file generated by install_pkgs rule.
+ install_pkgs_out = ctx.actions.declare_file(ctx.attr.name + "-with-packages.tar")
+
+ # install_pkgs rule consumes 'final_installables_tar' and 'installation_cleanup_commands'.
+ _install.implementation(
+ ctx,
+ image_tar = ctx.files.base[0],
+ installables_tar = final_installables_tar,
+ installation_cleanup_commands = installation_cleanup_commands,
+ output_image_name = ctx.attr.name + "-with-packages",
+ output_tar = install_pkgs_out,
+ )
+
+ # Set the image with packages installed to be the new base.
+ new_base = install_pkgs_out
+
+ # Install tars and configure env, symlinks using the container_image rule.
+ result = _container.image.implementation(ctx, base = new_base, symlinks = symlinks, env = env, tars = tars, files = files)
+
+ return struct(
+ runfiles = result.runfiles,
+ files = result.files,
+ container_parts = result.container_parts,
+ tars = tars,
+ input_files = files,
+ env = env,
+ symlinks = symlinks,
+ packages = packages,
+ additional_repos = additional_repos,
+ keys = keys,
+ installables_tar = ctx.file.installables_tar,
+ installation_cleanup_commands = installation_cleanup_commands,
+ )
language_tool_layer_attrs = _container.image.attrs + _key.attrs + _download.attrs + _install.attrs + {
# Redeclare following attributes as non-mandatory.
@@ -202,100 +213,101 @@
)
def language_tool_layer(**kwargs):
- """A wrapper around attrs in container_image, download_pkgs and install_pkgs rules.
+ """A wrapper around attrs in container_image, download_pkgs and install_pkgs rules.
- Downloads and installs debian packages using
- https://github.com/GoogleCloudPlatform/base-images-docker/tree/master/package_managers,
- and configures the rest using https://github.com/bazelbuild/rules_docker#container_image-1.
+ Downloads and installs debian packages using
+ https://github.com/GoogleCloudPlatform/base-images-docker/tree/master/package_managers,
+ and configures the rest using https://github.com/bazelbuild/rules_docker#container_image-1.
- Args:
- Same args as https://github.com/bazelbuild/rules_docker#container_image-1
- minus:
- debs: debian packages should be listed in 'packages', or be included in
- 'installables_tar' as .deb files.
- plus:
- packages: list of packages to fetch and install in the base image.
- additional_repos: list of additional debian package repos to use,
- in sources.list format.
- keys: list of labels of additional gpg keys to use while downloading
- packages.
- installables_tar: a tar of debian packages to install in the base image.
- installation_cleanup_commands: cleanup commands to run after package
- installation.
+ Args:
+ Same args as https://github.com/bazelbuild/rules_docker#container_image-1
+ minus:
+ debs: debian packages should be listed in 'packages', or be included in
+ 'installables_tar' as .deb files.
+ plus:
+ packages: list of packages to fetch and install in the base image.
+ additional_repos: list of additional debian package repos to use,
+ in sources.list format.
+ keys: list of labels of additional gpg keys to use while downloading
+ packages.
+ installables_tar: a tar of debian packages to install in the base image.
+ installation_cleanup_commands: cleanup commands to run after package
+ installation.
- Note:
- - 'additional_repos' can only be specified when 'packages' is speficified.
- - 'installation_cleanup_commands' can only be specified when at least one of
- 'packages' or 'installables_tar' is specified.
+ Note:
+ - 'additional_repos' can only be specified when 'packages' is speficified.
+ - 'installation_cleanup_commands' can only be specified when at least one of
+ 'packages' or 'installables_tar' is specified.
- Experimental rule.
- """
+ Experimental rule.
+ """
- _input_validation(kwargs)
+ _input_validation(kwargs)
- language_tool_layer_(**kwargs)
+ language_tool_layer_(**kwargs)
def _toolchain_container_impl(ctx):
- """Implementation for the toolchain_container rule.
+ """Implementation for the toolchain_container rule.
- toolchain_container rule composes all attrs from itself and language_tool_layer(s),
- and generates container using container_image rule.
+ toolchain_container rule composes all attrs from itself and language_tool_layer(s),
+ and generates container using container_image rule.
- Args:
- ctx: ctx as the same as for container_image + list of language_tool_layer(s)
- https://github.com/bazelbuild/rules_docker#container_image
- """
+ Args:
+ ctx: ctx as the same as for container_image + list of language_tool_layer(s)
+ https://github.com/bazelbuild/rules_docker#container_image
+ """
- tars = []
- files = []
- env = {}
- symlinks = {}
- packages = []
- additional_repos = []
- keys = []
- installables_tars = []
- installation_cleanup_commands = "cd ."
+ tars = []
+ files = []
+ env = {}
+ symlinks = {}
+ packages = []
+ additional_repos = []
+ keys = []
+ installables_tars = []
+ installation_cleanup_commands = "cd ."
- # TODO(ngiraldo): we rewrite env and symlinks if there are conficts,
- # warn the user of conflicts or error out.
- for layer in ctx.attr.language_layers:
- tars.extend(layer.tars)
- files.extend(layer.input_files)
- env.update(layer.env)
- symlinks.update(layer.symlinks)
- packages.extend(layer.packages)
- additional_repos.extend(layer.additional_repos)
- keys.extend(layer.keys)
- if layer.installables_tar:
- installables_tars.append(layer.installables_tar)
- if layer.installation_cleanup_commands:
- installation_cleanup_commands += (" && " + layer.installation_cleanup_commands)
- tars.extend(ctx.files.tars)
- env.update(ctx.attr.env)
- symlinks.update(ctx.attr.symlinks)
- packages.extend(ctx.attr.packages)
- additional_repos.extend(ctx.attr.additional_repos)
- keys.extend(ctx.files.keys)
- if ctx.attr.installation_cleanup_commands:
- installation_cleanup_commands += (" && " + ctx.attr.installation_cleanup_commands)
+ # TODO(ngiraldo): we rewrite env and symlinks if there are conficts,
+ # warn the user of conflicts or error out.
+ for layer in ctx.attr.language_layers:
+ tars.extend(layer.tars)
+ files.extend(layer.input_files)
+ env.update(layer.env)
+ symlinks.update(layer.symlinks)
+ packages.extend(layer.packages)
+ additional_repos.extend(layer.additional_repos)
+ keys.extend(layer.keys)
+ if layer.installables_tar:
+ installables_tars.append(layer.installables_tar)
+ if layer.installation_cleanup_commands:
+ installation_cleanup_commands += (" && " + layer.installation_cleanup_commands)
+ tars.extend(ctx.files.tars)
+ env.update(ctx.attr.env)
+ symlinks.update(ctx.attr.symlinks)
+ packages.extend(ctx.attr.packages)
+ additional_repos.extend(ctx.attr.additional_repos)
+ keys.extend(ctx.files.keys)
+ if ctx.attr.installation_cleanup_commands:
+ installation_cleanup_commands += (" && " + ctx.attr.installation_cleanup_commands)
- files = depset(files).to_list()
- packages = depset(packages).to_list()
- additional_repos = depset(additional_repos).to_list()
- keys = depset(keys).to_list()
- installables_tars = depset(installables_tars).to_list()
+ files = depset(files).to_list()
+ packages = depset(packages).to_list()
+ additional_repos = depset(additional_repos).to_list()
+ keys = depset(keys).to_list()
+ installables_tars = depset(installables_tars).to_list()
- return _language_tool_layer_impl(ctx,
- symlinks=symlinks,
- env=env,
- tars=tars,
- files=files,
- packages=packages,
- additional_repos=additional_repos,
- keys=keys,
- installables_tars=installables_tars,
- installation_cleanup_commands=installation_cleanup_commands
- )
+ return _language_tool_layer_impl(
+ ctx,
+ symlinks = symlinks,
+ env = env,
+ tars = tars,
+ files = files,
+ packages = packages,
+ additional_repos = additional_repos,
+ keys = keys,
+ installables_tars = installables_tars,
+ installation_cleanup_commands = installation_cleanup_commands,
+ )
toolchain_container_ = rule(
attrs = language_tool_layer_attrs + {
@@ -307,31 +319,31 @@
)
def toolchain_container(**kwargs):
- """Composes multiple language_tool_layers into a single resulting image.
+ """Composes multiple language_tool_layers into a single resulting image.
- Args:
- Same args as https://github.com/bazelbuild/rules_docker#container_image-1
- minus:
- debs: debian packages should be listed in 'packages', or be included in
- 'installables_tar' as .deb files.
- plus:
- language_layers: a list of language_tool_layer.
- installables_tar: a tar of debian packages to install in the base image.
- packages: list of packages to fetch and install in the base image.
- additional_repos: list of additional debian package repos to use,
- in sources.list format.
- keys: list of labels of additional gpg keys to use while downloading
- packages.
- installation_cleanup_commands: cleanup commands to run after package
- installation.
+ Args:
+ Same args as https://github.com/bazelbuild/rules_docker#container_image-1
+ minus:
+ debs: debian packages should be listed in 'packages', or be included in
+ 'installables_tar' as .deb files.
+ plus:
+ language_layers: a list of language_tool_layer.
+ installables_tar: a tar of debian packages to install in the base image.
+ packages: list of packages to fetch and install in the base image.
+ additional_repos: list of additional debian package repos to use,
+ in sources.list format.
+ keys: list of labels of additional gpg keys to use while downloading
+ packages.
+ installation_cleanup_commands: cleanup commands to run after package
+ installation.
- If 'installables_tar' is specified in the 'toolchain_container' rule, then
- 'packages' or 'installables_tar' specified in any of the 'language_layers'
- passed to this 'toolchain_container' rule will be ignored.
+ If 'installables_tar' is specified in the 'toolchain_container' rule, then
+ 'packages' or 'installables_tar' specified in any of the 'language_layers'
+ passed to this 'toolchain_container' rule will be ignored.
- Experimental rule.
- """
+ Experimental rule.
+ """
- _input_validation(kwargs)
+ _input_validation(kwargs)
- toolchain_container_(**kwargs)
+ toolchain_container_(**kwargs)
diff --git a/container/test/BUILD b/container/test/BUILD
index 0c9d377..e067d88 100644
--- a/container/test/BUILD
+++ b/container/test/BUILD
@@ -23,19 +23,19 @@
toolchain_container(
name = "bazel-toolchain",
- base = "@debian8//image",
- packages = [
- "bazel",
- ],
additional_repos = [
- "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8",
+ "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8",
],
+ base = "@debian8//image",
keys = [
- "@bazel_gpg//file",
+ "@bazel_gpg//file",
],
language_layers = [
"//container/rbe-debian8:java-ltl",
],
+ packages = [
+ "bazel",
+ ],
)
container_test(
diff --git a/rules/BUILD b/rules/BUILD
index 20edf85..f7c8eef 100644
--- a/rules/BUILD
+++ b/rules/BUILD
@@ -31,4 +31,3 @@
"cc-sample-project/test.cc",
],
)
-
diff --git a/rules/docker_config.bzl b/rules/docker_config.bzl
index c35302a..f58bf3f 100644
--- a/rules/docker_config.bzl
+++ b/rules/docker_config.bzl
@@ -151,142 +151,152 @@
]
def _docker_toolchain_autoconfig_impl(ctx):
- """Implementation for the docker_toolchain_autoconfig rule.
+ """Implementation for the docker_toolchain_autoconfig rule.
- Args:
- ctx: context. See docker_toolchain_autoconfig below for details
- of what this ctx must include
- Returns:
- null
- """
- bazel_config_dir = "/bazel-config"
- project_repo_dir = "project_src"
+ Args:
+ ctx: context. See docker_toolchain_autoconfig below for details
+ of what this ctx must include
+ Returns:
+ null
+ """
+ bazel_config_dir = "/bazel-config"
+ project_repo_dir = "project_src"
- # Command to retrieve the project from github if requested.
- clone_repo_cmd = "cd ."
- if ctx.attr.git_repo:
- clone_repo_cmd = ("cd " + bazel_config_dir + " && git clone " +
- ctx.attr.git_repo + " " + project_repo_dir)
+ # Command to retrieve the project from github if requested.
+ clone_repo_cmd = "cd ."
+ if ctx.attr.git_repo:
+ clone_repo_cmd = ("cd " + bazel_config_dir + " && git clone " +
+ ctx.attr.git_repo + " " + project_repo_dir)
- # Command to install custom Bazel version (if requested)
- install_bazel_cmd = "cd ."
- if ctx.attr.use_bazel_head:
- # If use_bazel_head was requested, we clone the source code from github and compile
- # it using the release version with "bazel build //src:bazel".
- install_bazel_cmd = "/install_bazel_head.sh"
- elif ctx.attr.bazel_version:
- # If a specific Bazel and Bazel RC version is specified, install that version.
- bazel_url = "https://releases.bazel.build/" + ctx.attr.bazel_version
- if ctx.attr.bazel_rc_version:
- bazel_url += ("/rc" + ctx.attr.bazel_rc_version +
- "/bazel-" + ctx.attr.bazel_version + "rc" +
- ctx.attr.bazel_rc_version)
- else:
- bazel_url += "/release/bazel-" + ctx.attr.bazel_version
- bazel_url += "-installer-linux-x86_64.sh"
- install_bazel_cmd = "/install_bazel_version.sh " + bazel_url
+ # Command to install custom Bazel version (if requested)
+ install_bazel_cmd = "cd ."
+ if ctx.attr.use_bazel_head:
+ # If use_bazel_head was requested, we clone the source code from github and compile
+ # it using the release version with "bazel build //src:bazel".
+ install_bazel_cmd = "/install_bazel_head.sh"
+ elif ctx.attr.bazel_version:
+ # If a specific Bazel and Bazel RC version is specified, install that version.
+ bazel_url = "https://releases.bazel.build/" + ctx.attr.bazel_version
+ if ctx.attr.bazel_rc_version:
+ bazel_url += ("/rc" + ctx.attr.bazel_rc_version +
+ "/bazel-" + ctx.attr.bazel_version + "rc" +
+ ctx.attr.bazel_rc_version)
+ else:
+ bazel_url += "/release/bazel-" + ctx.attr.bazel_version
+ bazel_url += "-installer-linux-x86_64.sh"
+ install_bazel_cmd = "/install_bazel_version.sh " + bazel_url
- # Command to recursively convert soft links to hard links in the config_repos
- deref_symlinks_cmd = []
- for config_repo in ctx.attr.config_repos:
- symlinks_cmd = ("find $(bazel info output_base)/" +
- _EXTERNAL_FOLDER_PREFIX + config_repo +
- " -type l -exec bash -c 'ln -f \"$(readlink -m \"$0\")\" \"$0\"' {} \;")
- deref_symlinks_cmd.append(symlinks_cmd)
- deref_symlinks_cmd = " && ".join(deref_symlinks_cmd)
+ # Command to recursively convert soft links to hard links in the config_repos
+ deref_symlinks_cmd = []
+ for config_repo in ctx.attr.config_repos:
+ symlinks_cmd = ("find $(bazel info output_base)/" +
+ _EXTERNAL_FOLDER_PREFIX + config_repo +
+ " -type l -exec bash -c 'ln -f \"$(readlink -m \"$0\")\" \"$0\"' {} \;")
+ deref_symlinks_cmd.append(symlinks_cmd)
+ deref_symlinks_cmd = " && ".join(deref_symlinks_cmd)
- # Command to copy produced toolchain configs to outside of
- # the containter (to the mount_point).
- copy_cmd = []
- for config_repo in ctx.attr.config_repos:
- src_dir = "$(bazel info output_base)/" + _EXTERNAL_FOLDER_PREFIX + config_repo
- copy_cmd.append("cp -dr " + src_dir + " " + bazel_config_dir + "/")
- # We need to change the owner of the files we copied, so that they can
- # be manipulated from outside the container.
- copy_cmd.append("chown -R $USER_ID " + bazel_config_dir + "/" + config_repo)
- output_copy_cmd = " && ".join(copy_cmd)
+ # Command to copy produced toolchain configs to outside of
+ # the containter (to the mount_point).
+ copy_cmd = []
+ for config_repo in ctx.attr.config_repos:
+ src_dir = "$(bazel info output_base)/" + _EXTERNAL_FOLDER_PREFIX + config_repo
+ copy_cmd.append("cp -dr " + src_dir + " " + bazel_config_dir + "/")
- # Command to run autoconfigure targets.
- bazel_cmd = "cd " + bazel_config_dir + "/" + project_repo_dir
- if ctx.attr.use_default_project:
- bazel_cmd += " && touch WORKSPACE && mv BUILD.sample BUILD"
- # For each config repo we run the target @<config_repo>//...
- bazel_targets = "@" + "//... @".join(ctx.attr.config_repos) + "//..."
- bazel_flags = ""
- if not ctx.attr.incompatible_changes_off:
- bazel_flags += " --all_incompatible_changes"
- bazel_cmd += " && bazel build " + bazel_flags + " " + bazel_targets
+ # We need to change the owner of the files we copied, so that they can
+ # be manipulated from outside the container.
+ copy_cmd.append("chown -R $USER_ID " + bazel_config_dir + "/" + config_repo)
+ output_copy_cmd = " && ".join(copy_cmd)
- # Command to run to clean up after autoconfiguration.
- # we start with "cd ." to make sure in case of failure everything after the
- # ";" will be executed
- clean_cmd = "cd . ; bazel clean"
- if ctx.attr.use_default_project:
- clean_cmd += " && rm WORKSPACE"
- if ctx.attr.git_repo:
- clean_cmd += " && cd " + bazel_config_dir + " && rm -drf " + project_repo_dir
+ # Command to run autoconfigure targets.
+ bazel_cmd = "cd " + bazel_config_dir + "/" + project_repo_dir
+ if ctx.attr.use_default_project:
+ bazel_cmd += " && touch WORKSPACE && mv BUILD.sample BUILD"
- # Full command to use for docker container
- # TODO(xingao): Make sure the command exits with error right away if a sub
- # command fails.
- docker_cmd = [
- "/bin/sh", "-c", " && ".join([
- "set -ex",
- ctx.attr.setup_cmd,
- install_bazel_cmd,
- "echo === Cloning project repo ===",
- clone_repo_cmd,
- "echo === Running Bazel autoconfigure command ===",
- bazel_cmd,
- "echo === Copying outputs ===",
- deref_symlinks_cmd,
- output_copy_cmd,
- "echo === Cleaning up ===",
- clean_cmd])]
+ # For each config repo we run the target @<config_repo>//...
+ bazel_targets = "@" + "//... @".join(ctx.attr.config_repos) + "//..."
+ bazel_flags = ""
+ if not ctx.attr.incompatible_changes_off:
+ bazel_flags += " --all_incompatible_changes"
+ bazel_cmd += " && bazel build " + bazel_flags + " " + bazel_targets
- # Expand contents of repo_pkg_tar
- # (and remove them after we're done running the docker command).
- # A dummy command that does nothing in case git_repo was used
- expand_repo_cmd = "cd ."
- remove_repo_cmd = "cd ."
- if ctx.attr.repo_pkg_tar:
- repo_pkg_tar = str(ctx.attr.repo_pkg_tar.label.name)
- package_name = _EXTERNAL_FOLDER_PREFIX + _WORKSPACE_NAME + "/" + str(ctx.attr.repo_pkg_tar.label.package)
- # Expand the tar file pointed by repo_pkg_tar
- expand_repo_cmd = ("mkdir ./%s ; tar -xf %s/%s.tar -C ./%s" %
- (project_repo_dir, package_name, repo_pkg_tar, project_repo_dir))
- remove_repo_cmd = ("rm -drf ./%s" % project_repo_dir)
+ # Command to run to clean up after autoconfiguration.
+ # we start with "cd ." to make sure in case of failure everything after the
+ # ";" will be executed
+ clean_cmd = "cd . ; bazel clean"
+ if ctx.attr.use_default_project:
+ clean_cmd += " && rm WORKSPACE"
+ if ctx.attr.git_repo:
+ clean_cmd += " && cd " + bazel_config_dir + " && rm -drf " + project_repo_dir
- result = _container.image.implementation(ctx, cmd=docker_cmd, output_executable=ctx.outputs.load_image)
+ # Full command to use for docker container
+ # TODO(xingao): Make sure the command exits with error right away if a sub
+ # command fails.
+ docker_cmd = [
+ "/bin/sh",
+ "-c",
+ " && ".join([
+ "set -ex",
+ ctx.attr.setup_cmd,
+ install_bazel_cmd,
+ "echo === Cloning project repo ===",
+ clone_repo_cmd,
+ "echo === Running Bazel autoconfigure command ===",
+ bazel_cmd,
+ "echo === Copying outputs ===",
+ deref_symlinks_cmd,
+ output_copy_cmd,
+ "echo === Cleaning up ===",
+ clean_cmd,
+ ]),
+ ]
- # By default we copy the produced tar file to /tmp/
- output_location = "/tmp/" + ctx.attr.name + ".tar"
- if _DOCKER_AUTOCONF_OUTPUT in ctx.var:
- output_location = ctx.var[_DOCKER_AUTOCONF_OUTPUT] + "/" + ctx.attr.name + ".tar"
- # Create the script to load image and run it
- ctx.actions.expand_template(
- template = ctx.files.run_tpl[0],
- substitutions ={
- "%{EXPAND_REPO_CMD}": expand_repo_cmd,
- "%{LOAD_IMAGE_SH}": ctx.outputs.load_image.short_path,
- "%{IMAGE_NAME}": "bazel/" + ctx.label.package + ":" + ctx.label.name,
- "%{RM_REPO_CMD}": remove_repo_cmd,
- "%{CONFIG_REPOS}": " ".join(ctx.attr.config_repos),
- "%{OUTPUT}": output_location,
- },
- output = ctx.outputs.executable,
- is_executable = True
- )
+ # Expand contents of repo_pkg_tar
+ # (and remove them after we're done running the docker command).
+ # A dummy command that does nothing in case git_repo was used
+ expand_repo_cmd = "cd ."
+ remove_repo_cmd = "cd ."
+ if ctx.attr.repo_pkg_tar:
+ repo_pkg_tar = str(ctx.attr.repo_pkg_tar.label.name)
+ package_name = _EXTERNAL_FOLDER_PREFIX + _WORKSPACE_NAME + "/" + str(ctx.attr.repo_pkg_tar.label.package)
- # add to the runfiles the script to load image and (if needed) the repo_pkg_tar file
- runfiles = ctx.runfiles(files = result.runfiles.files.to_list() + [ctx.outputs.load_image])
- if ctx.attr.repo_pkg_tar:
- runfiles = ctx.runfiles(files = result.runfiles.files.to_list() +
- [ctx.outputs.load_image] + ctx.files.repo_pkg_tar)
+ # Expand the tar file pointed by repo_pkg_tar
+ expand_repo_cmd = ("mkdir ./%s ; tar -xf %s/%s.tar -C ./%s" %
+ (project_repo_dir, package_name, repo_pkg_tar, project_repo_dir))
+ remove_repo_cmd = ("rm -drf ./%s" % project_repo_dir)
- return struct(runfiles = runfiles,
- files = result.files,
- container_parts = result.container_parts)
+ result = _container.image.implementation(ctx, cmd = docker_cmd, output_executable = ctx.outputs.load_image)
+
+ # By default we copy the produced tar file to /tmp/
+ output_location = "/tmp/" + ctx.attr.name + ".tar"
+ if _DOCKER_AUTOCONF_OUTPUT in ctx.var:
+ output_location = ctx.var[_DOCKER_AUTOCONF_OUTPUT] + "/" + ctx.attr.name + ".tar"
+
+ # Create the script to load image and run it
+ ctx.actions.expand_template(
+ template = ctx.files.run_tpl[0],
+ substitutions = {
+ "%{EXPAND_REPO_CMD}": expand_repo_cmd,
+ "%{LOAD_IMAGE_SH}": ctx.outputs.load_image.short_path,
+ "%{IMAGE_NAME}": "bazel/" + ctx.label.package + ":" + ctx.label.name,
+ "%{RM_REPO_CMD}": remove_repo_cmd,
+ "%{CONFIG_REPOS}": " ".join(ctx.attr.config_repos),
+ "%{OUTPUT}": output_location,
+ },
+ output = ctx.outputs.executable,
+ is_executable = True,
+ )
+
+ # add to the runfiles the script to load image and (if needed) the repo_pkg_tar file
+ runfiles = ctx.runfiles(files = result.runfiles.files.to_list() + [ctx.outputs.load_image])
+ if ctx.attr.repo_pkg_tar:
+ runfiles = ctx.runfiles(files = result.runfiles.files.to_list() +
+ [ctx.outputs.load_image] + ctx.files.repo_pkg_tar)
+
+ return struct(
+ runfiles = runfiles,
+ files = result.files,
+ container_parts = result.container_parts,
+ )
docker_toolchain_autoconfig_ = rule(
attrs = _container.image.attrs + {
@@ -353,134 +363,134 @@
]
def docker_toolchain_autoconfig(**kwargs):
- """Generate toolchain configs for a docker container.
+ """Generate toolchain configs for a docker container.
- This rule produces a tar file with toolchain configs produced from the
- execution of targets in skylark remote repositories. Typically, this rule is
- used to produce toolchain configs for the local_config_cc repository.
- This repo (as well as others, depending on the project) contains generated
- toolchain configs that Bazel uses to properly use a toolchain. For instance,
- the local_config_cc repo generates a cc_toolchain rule.
+ This rule produces a tar file with toolchain configs produced from the
+ execution of targets in skylark remote repositories. Typically, this rule is
+ used to produce toolchain configs for the local_config_cc repository.
+ This repo (as well as others, depending on the project) contains generated
+ toolchain configs that Bazel uses to properly use a toolchain. For instance,
+ the local_config_cc repo generates a cc_toolchain rule.
- The toolchain configs that this rule produces, can be used to, for
- instance, use a remote execution service that runs actions inside docker
- containers.
+ The toolchain configs that this rule produces, can be used to, for
+ instance, use a remote execution service that runs actions inside docker
+ containers.
- All the toolchain configs published in the bazel-toolchains
- repo (https://github.com/bazelbuild/bazel-toolchains/) have been produced
- using this rule.
+ All the toolchain configs published in the bazel-toolchains
+ repo (https://github.com/bazelbuild/bazel-toolchains/) have been produced
+ using this rule.
- This rule is implemented by extending the container_image rule in
- https://github.com/bazelbuild/rules_docker. The rule installs debs packages
- to run bazel (using the package manager rules offered by
- https://github.com/GoogleCloudPlatform/distroless/tree/master/package_manager).
- The rule creates the container with a command that pulls a repo from github,
- and runs bazel build for a series of remote repos. Files generated in these
- repos are copied to a mount point inside the Bazel output tree, and finally
- copied to the /tmp directory or to the DOCKER_AUTOCONF_OUTPUT directory
- if passed as build variable.
+ This rule is implemented by extending the container_image rule in
+ https://github.com/bazelbuild/rules_docker. The rule installs debs packages
+ to run bazel (using the package manager rules offered by
+ https://github.com/GoogleCloudPlatform/distroless/tree/master/package_manager).
+ The rule creates the container with a command that pulls a repo from github,
+ and runs bazel build for a series of remote repos. Files generated in these
+ repos are copied to a mount point inside the Bazel output tree, and finally
+ copied to the /tmp directory or to the DOCKER_AUTOCONF_OUTPUT directory
+ if passed as build variable.
- Args:
- **kwargs:
- Required Args
- name: A unique name for this rule.
- base: Docker image base - optionally with all tools pre-installed for
- which a configuration will be generated. Packages can also be installed
- by listing them in the 'packages' attriute.
- Default Args:
- config_repos: a list of remote repositories. Autoconfig will run targets in
- each of these remote repositories and copy all contents to the mount
- point.
- env: Dictionary of env variables for Bazel / project specific autoconfigure
- git_repo: A git repo with the sources for the project to be used for
- autoconfigure. If no git_repo is passed, autoconfig will run with a
- sample c++ project.
- bazel_version: a specific version of Bazel used to generate toolchain
- configs. Format: x.x.x
- bazel_rc_version: a specific version of Bazel release candidate used to
- generate toolchain configs. Input "2" if you would like to use rc2.
- use_bazel_head = Download bazel head from github, compile it and use it
- to run autoconfigure targets.
- setup_cmd: a customized command that will run as the very first command
- inside the docker container.
- packages: list of packages to fetch and install in the base image.
- additional_repos: list of additional debian package repos to use,
- in sources.list format.
- keys: list of additional gpg keys to use while downloading packages.
- incompatible_changes_off: If True Bazel will run without the
- all_incompatible_changes flag. Default False.
- test: a boolean which specifies whether a test target for this
- docker_toolchain_autoconfig will be added.
- If True, a test target with name {name}_test will be added.
- The test will build this docker_toolchain_autoconfig target, run the
- output script, and check the toolchain configs for the c++ auto
- generated config exist.
- """
- for reserved in reserved_attrs:
- if reserved in kwargs:
- fail("reserved for internal use by docker_toolchain_autoconfig macro", attr=reserved)
+ Args:
+ **kwargs:
+ Required Args
+ name: A unique name for this rule.
+ base: Docker image base - optionally with all tools pre-installed for
+ which a configuration will be generated. Packages can also be installed
+ by listing them in the 'packages' attriute.
+ Default Args:
+ config_repos: a list of remote repositories. Autoconfig will run targets in
+ each of these remote repositories and copy all contents to the mount
+ point.
+ env: Dictionary of env variables for Bazel / project specific autoconfigure
+ git_repo: A git repo with the sources for the project to be used for
+ autoconfigure. If no git_repo is passed, autoconfig will run with a
+ sample c++ project.
+ bazel_version: a specific version of Bazel used to generate toolchain
+ configs. Format: x.x.x
+ bazel_rc_version: a specific version of Bazel release candidate used to
+ generate toolchain configs. Input "2" if you would like to use rc2.
+ use_bazel_head = Download bazel head from github, compile it and use it
+ to run autoconfigure targets.
+ setup_cmd: a customized command that will run as the very first command
+ inside the docker container.
+ packages: list of packages to fetch and install in the base image.
+ additional_repos: list of additional debian package repos to use,
+ in sources.list format.
+ keys: list of additional gpg keys to use while downloading packages.
+ incompatible_changes_off: If True Bazel will run without the
+ all_incompatible_changes flag. Default False.
+ test: a boolean which specifies whether a test target for this
+ docker_toolchain_autoconfig will be added.
+ If True, a test target with name {name}_test will be added.
+ The test will build this docker_toolchain_autoconfig target, run the
+ output script, and check the toolchain configs for the c++ auto
+ generated config exist.
+ """
+ for reserved in reserved_attrs:
+ if reserved in kwargs:
+ fail("reserved for internal use by docker_toolchain_autoconfig macro", attr = reserved)
- for required in required_attrs:
- if required not in kwargs:
- fail("required for docker_toolchain_autoconfig", attr=required)
+ for required in required_attrs:
+ if required not in kwargs:
+ fail("required for docker_toolchain_autoconfig", attr = required)
- # Input validations
- if "use_bazel_head" in kwargs and ("bazel_version" in kwargs or "bazel_rc_version" in kwargs):
- fail ("Only one of use_bazel_head or a combination of bazel_version and" +
- "bazel_rc_version can be set at a time.")
+ # Input validations
+ if "use_bazel_head" in kwargs and ("bazel_version" in kwargs or "bazel_rc_version" in kwargs):
+ fail("Only one of use_bazel_head or a combination of bazel_version and" +
+ "bazel_rc_version can be set at a time.")
- packages_is_empty = "packages" not in kwargs or kwargs["packages"] == []
+ packages_is_empty = "packages" not in kwargs or kwargs["packages"] == []
- if packages_is_empty and "additional_repos" in kwargs:
- fail("'additional_repos' can only be specified when 'packages' is not empty.")
- if packages_is_empty and "keys" in kwargs:
- fail("'keys' can only be specified when 'packages' is not empty.")
+ if packages_is_empty and "additional_repos" in kwargs:
+ fail("'additional_repos' can only be specified when 'packages' is not empty.")
+ if packages_is_empty and "keys" in kwargs:
+ fail("'keys' can only be specified when 'packages' is not empty.")
- # If the git_repo was not provided, use the default autoconfig project
- if "git_repo" not in kwargs:
- kwargs["repo_pkg_tar"] = _DEFAULT_AUTOCONFIG_PROJECT_PKG_TAR
- kwargs["use_default_project"] = True
- kwargs["files"] = [
- _WORKSPACE_PREFIX + "rules:install_bazel_head.sh",
- _WORKSPACE_PREFIX + "rules:install_bazel_version.sh",
- ]
+ # If the git_repo was not provided, use the default autoconfig project
+ if "git_repo" not in kwargs:
+ kwargs["repo_pkg_tar"] = _DEFAULT_AUTOCONFIG_PROJECT_PKG_TAR
+ kwargs["use_default_project"] = True
+ kwargs["files"] = [
+ _WORKSPACE_PREFIX + "rules:install_bazel_head.sh",
+ _WORKSPACE_PREFIX + "rules:install_bazel_version.sh",
+ ]
- # The template for the main script to execute for this rule, which produces
- # the toolchain configs
- kwargs["run_tpl"] = _WORKSPACE_PREFIX + "rules:docker_config.sh.tpl"
+ # The template for the main script to execute for this rule, which produces
+ # the toolchain configs
+ kwargs["run_tpl"] = _WORKSPACE_PREFIX + "rules:docker_config.sh.tpl"
- # Do not install packags if 'packages' is not specified or is an ampty list.
- if not packages_is_empty:
- # "additional_repos" and "keys" are optional for docker_toolchain_autoconfig,
- # but required for toolchain_container". Use empty lists as placeholder.
- if "additional_repos" not in kwargs:
- kwargs["additional_repos"] = []
- if "keys" not in kwargs:
- kwargs["keys"] = []
+ # Do not install packags if 'packages' is not specified or is an ampty list.
+ if not packages_is_empty:
+ # "additional_repos" and "keys" are optional for docker_toolchain_autoconfig,
+ # but required for toolchain_container". Use empty lists as placeholder.
+ if "additional_repos" not in kwargs:
+ kwargs["additional_repos"] = []
+ if "keys" not in kwargs:
+ kwargs["keys"] = []
- # Install packages in the base image.
- toolchain_container(
- name = kwargs["name"] + "_image",
- base = kwargs["base"],
- packages = kwargs["packages"],
- additional_repos = kwargs["additional_repos"],
- keys = kwargs["keys"],
- )
+ # Install packages in the base image.
+ toolchain_container(
+ name = kwargs["name"] + "_image",
+ base = kwargs["base"],
+ packages = kwargs["packages"],
+ additional_repos = kwargs["additional_repos"],
+ keys = kwargs["keys"],
+ )
- # Use the image with packages installed as the new base for autoconfiguring.
- kwargs["base"] = ":" + kwargs["name"] + "_image.tar"
+ # Use the image with packages installed as the new base for autoconfiguring.
+ kwargs["base"] = ":" + kwargs["name"] + "_image.tar"
- if "test" in kwargs and kwargs["test"] == True:
- # Create a test target for the current docker_toolchain_autoconfig target,
- # which builds this docker_toolchain_autoconfig target, runs the output
- # script, and checks the toolchain configs for the c++ auto generated config
- # exist.
- native.sh_test(
- name = kwargs["name"] + "_test",
- size = "medium",
- timeout = "long",
- srcs = ["//test/configs:autoconfig_test.sh"],
- data = [":" + kwargs["name"]],
- )
+ if "test" in kwargs and kwargs["test"] == True:
+ # Create a test target for the current docker_toolchain_autoconfig target,
+ # which builds this docker_toolchain_autoconfig target, runs the output
+ # script, and checks the toolchain configs for the c++ auto generated config
+ # exist.
+ native.sh_test(
+ name = kwargs["name"] + "_test",
+ size = "medium",
+ timeout = "long",
+ srcs = ["//test/configs:autoconfig_test.sh"],
+ data = [":" + kwargs["name"]],
+ )
- docker_toolchain_autoconfig_(**kwargs)
+ docker_toolchain_autoconfig_(**kwargs)
diff --git a/rules/environments.bzl b/rules/environments.bzl
index f2fe693..c150023 100644
--- a/rules/environments.bzl
+++ b/rules/environments.bzl
@@ -13,82 +13,80 @@
# limitations under the License.
"""Default dictionaries of env variables."""
-
def gcc_env():
- return {
- "ABI_VERSION": "gcc",
- "ABI_LIBC_VERSION": "glibc_2.19",
- "BAZEL_COMPILER": "gcc",
- "BAZEL_HOST_SYSTEM": "i686-unknown-linux-gnu",
- "BAZEL_TARGET_LIBC": "glibc_2.19",
- "BAZEL_TARGET_CPU": "k8",
- "BAZEL_TARGET_SYSTEM": "x86_64-unknown-linux-gnu",
- "CC_TOOLCHAIN_NAME": "linux_gnu_x86"
- }
-
+ return {
+ "ABI_VERSION": "gcc",
+ "ABI_LIBC_VERSION": "glibc_2.19",
+ "BAZEL_COMPILER": "gcc",
+ "BAZEL_HOST_SYSTEM": "i686-unknown-linux-gnu",
+ "BAZEL_TARGET_LIBC": "glibc_2.19",
+ "BAZEL_TARGET_CPU": "k8",
+ "BAZEL_TARGET_SYSTEM": "x86_64-unknown-linux-gnu",
+ "CC_TOOLCHAIN_NAME": "linux_gnu_x86",
+ }
def clang_env():
- return {
- "ABI_VERSION": "clang",
- "ABI_LIBC_VERSION": "glibc_2.19",
- "BAZEL_COMPILER": "clang",
- "BAZEL_HOST_SYSTEM": "i686-unknown-linux-gnu",
- "BAZEL_TARGET_LIBC": "glibc_2.19",
- "BAZEL_TARGET_CPU": "k8",
- "BAZEL_TARGET_SYSTEM": "x86_64-unknown-linux-gnu",
- "CC_TOOLCHAIN_NAME": "linux_gnu_x86",
- "CC": "clang"
- }
+ return {
+ "ABI_VERSION": "clang",
+ "ABI_LIBC_VERSION": "glibc_2.19",
+ "BAZEL_COMPILER": "clang",
+ "BAZEL_HOST_SYSTEM": "i686-unknown-linux-gnu",
+ "BAZEL_TARGET_LIBC": "glibc_2.19",
+ "BAZEL_TARGET_CPU": "k8",
+ "BAZEL_TARGET_SYSTEM": "x86_64-unknown-linux-gnu",
+ "CC_TOOLCHAIN_NAME": "linux_gnu_x86",
+ "CC": "clang",
+ }
def debian8_clang_default_packages():
- return [
- "bazel",
- "ca-certificates-java=20161107'*'",
- "curl",
- "git",
- "openjdk-8-jdk-headless",
- "openjdk-8-jre-headless",
- "python-dev",
- "unzip",
- "wget",
- "zip",
- ]
+ return [
+ "bazel",
+ "ca-certificates-java=20161107'*'",
+ "curl",
+ "git",
+ "openjdk-8-jdk-headless",
+ "openjdk-8-jre-headless",
+ "python-dev",
+ "unzip",
+ "wget",
+ "zip",
+ ]
def debian8_clang_default_repos():
- return [
- "deb http://deb.debian.org/debian jessie-backports main",
- bazel_repo(),
- ]
+ return [
+ "deb http://deb.debian.org/debian jessie-backports main",
+ bazel_repo(),
+ ]
def debian8_clang_default_keys():
- return bazel_key()
+ return bazel_key()
def ubuntu16_04_clang_default_packages():
- return [
- "bazel",
- "ca-certificates-java",
- "curl",
- "git",
- "openjdk-8-jdk-headless",
- "openjdk-8-jre-headless",
- "python-dev",
- "unzip",
- "wget",
- "zip",
- ]
+ return [
+ "bazel",
+ "ca-certificates-java",
+ "curl",
+ "git",
+ "openjdk-8-jdk-headless",
+ "openjdk-8-jre-headless",
+ "python-dev",
+ "unzip",
+ "wget",
+ "zip",
+ ]
def ubuntu16_04_clang_default_repos():
- return [
- bazel_repo(),
- ]
+ return [
+ bazel_repo(),
+ ]
def ubuntu16_04_clang_default_keys():
- return bazel_key()
+ return bazel_key()
def bazel_key():
- return [
- "@bazel_gpg//file",
- ]
+ return [
+ "@bazel_gpg//file",
+ ]
def bazel_repo():
- return "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8"
+ return "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8"
diff --git a/skylib/container_file_export.bzl b/skylib/container_file_export.bzl
index 35e4044..f2a258f 100644
--- a/skylib/container_file_export.bzl
+++ b/skylib/container_file_export.bzl
@@ -14,32 +14,34 @@
"""Rules to export a file/directory located inside a container available as a tarball."""
def _container_file_export_impl(ctx):
- """Implementation of the container_file_export rule."""
- input = ctx.file._container_file_export_exec
- args = [
- input.path,
- ctx.attr.image,
- ctx.attr.src_path,
- ctx.outputs.out.path,
- ]
- # The command may only access files declared in inputs.
- ctx.actions.run_shell(
- arguments = args,
- inputs = [input],
- outputs = [ctx.outputs.out],
- progress_message = "copying %{} out of docker image %{} ...".format(ctx.attr.src_path, ctx.attr.image),
- command = "$1 $2 $3 $4",
- )
+ """Implementation of the container_file_export rule."""
+ input = ctx.file._container_file_export_exec
+ args = [
+ input.path,
+ ctx.attr.image,
+ ctx.attr.src_path,
+ ctx.outputs.out.path,
+ ]
+
+ # The command may only access files declared in inputs.
+ ctx.actions.run_shell(
+ arguments = args,
+ inputs = [input],
+ outputs = [ctx.outputs.out],
+ progress_message = "copying %{} out of docker image %{} ...".format(ctx.attr.src_path, ctx.attr.image),
+ command = "$1 $2 $3 $4",
+ )
_container_file_export = rule(
implementation = _container_file_export_impl,
attrs = {
- "image": attr.string(mandatory=True),
- "src_path": attr.string(mandatory=True),
+ "image": attr.string(mandatory = True),
+ "src_path": attr.string(mandatory = True),
"_container_file_export_exec": attr.label(
- default=Label("//skylib:container_file_export.sh"),
- single_file=True,
- allow_files=True)
+ default = Label("//skylib:container_file_export.sh"),
+ single_file = True,
+ allow_files = True,
+ ),
},
outputs = {
"out": "%{name}.tar.gz",
@@ -57,4 +59,4 @@
# src_path = '/opt/python3.6'
# )
def container_file_export(**kwargs):
- _container_file_export(**kwargs)
+ _container_file_export(**kwargs)
diff --git a/skylib/package_names.bzl b/skylib/package_names.bzl
index d26f091..c21269e 100644
--- a/skylib/package_names.bzl
+++ b/skylib/package_names.bzl
@@ -43,389 +43,389 @@
)
def jessie_tools():
- return {
- tool_names.binutils: _jessie_binutils_package_names(),
- tool_names.curl: _jessie_curl_package_names(),
- tool_names.ed: _jessie_ed_package_names(),
- tool_names.file: _jessie_file_package_names(),
- tool_names.gcc: _jessie_gcc_package_names(),
- tool_names.git: _jessie_git_package_names(),
- tool_names.java: _jessie_java_package_names(),
- tool_names.java_no_ca_certs: _jessie_java_no_ca_certs_package_names(),
- tool_names.lib_cpp: _jessie_lib_cpp_package_names(),
- tool_names.openssh_client: _jessie_openssh_client_package_names(),
- tool_names.python_dev: _jessie_python_dev_package_names(),
- tool_names.python_numpy: _jessie_python_numpy_package_names(),
- tool_names.python_pip: _jessie_python_pip_package_names(),
- tool_names.python3_dev: _jessie_python3_dev_package_names(),
- tool_names.python3_numpy: _jessie_python3_numpy_package_names(),
- tool_names.python3_pip: _jessie_python3_pip_package_names(),
- tool_names.wget: _jessie_wget_package_names(),
- tool_names.zip: _zip_package_names(),
- }
+ return {
+ tool_names.binutils: _jessie_binutils_package_names(),
+ tool_names.curl: _jessie_curl_package_names(),
+ tool_names.ed: _jessie_ed_package_names(),
+ tool_names.file: _jessie_file_package_names(),
+ tool_names.gcc: _jessie_gcc_package_names(),
+ tool_names.git: _jessie_git_package_names(),
+ tool_names.java: _jessie_java_package_names(),
+ tool_names.java_no_ca_certs: _jessie_java_no_ca_certs_package_names(),
+ tool_names.lib_cpp: _jessie_lib_cpp_package_names(),
+ tool_names.openssh_client: _jessie_openssh_client_package_names(),
+ tool_names.python_dev: _jessie_python_dev_package_names(),
+ tool_names.python_numpy: _jessie_python_numpy_package_names(),
+ tool_names.python_pip: _jessie_python_pip_package_names(),
+ tool_names.python3_dev: _jessie_python3_dev_package_names(),
+ tool_names.python3_numpy: _jessie_python3_numpy_package_names(),
+ tool_names.python3_pip: _jessie_python3_pip_package_names(),
+ tool_names.wget: _jessie_wget_package_names(),
+ tool_names.zip: _zip_package_names(),
+ }
def jessie_package_names():
- return _package_names(jessie_tools)
+ return _package_names(jessie_tools)
def _package_names(tools):
- packages = []
- for tool in tools().values():
- packages.extend(tool)
- return depset(packages).to_list()
+ packages = []
+ for tool in tools().values():
+ packages.extend(tool)
+ return depset(packages).to_list()
def _jessie_binutils_package_names():
- return [
- "binutils",
- ]
+ return [
+ "binutils",
+ ]
def _jessie_curl_package_names():
- return [
- "curl",
- "libcurl3",
- "libffi6",
- "libgmp10",
- "libgnutls-deb0-28",
- "libgssapi-krb5-2",
- "libhogweed2",
- "libidn11",
- "libk5crypto3",
- "libkeyutils1",
- "libkrb5-3",
- "libkrb5support0",
- "libldap-2.4-2",
- "libnettle4",
- "libp11-kit0",
- "librtmp1",
- "libsasl2-2",
- "libsasl2-modules-db",
- "libssh2-1",
- "libtasn1-6",
- ]
+ return [
+ "curl",
+ "libcurl3",
+ "libffi6",
+ "libgmp10",
+ "libgnutls-deb0-28",
+ "libgssapi-krb5-2",
+ "libhogweed2",
+ "libidn11",
+ "libk5crypto3",
+ "libkeyutils1",
+ "libkrb5-3",
+ "libkrb5support0",
+ "libldap-2.4-2",
+ "libnettle4",
+ "libp11-kit0",
+ "librtmp1",
+ "libsasl2-2",
+ "libsasl2-modules-db",
+ "libssh2-1",
+ "libtasn1-6",
+ ]
def _jessie_gcc_package_names():
- return [
- "binutils",
- "cpp",
- "cpp-4.9",
- "g++",
- "g++-4.9",
- "gcc",
- "gcc-4.9",
- "libasan1",
- "libatomic1",
- "libc-dev-bin",
- "libc6-dev",
- "libcilkrts5",
- "libcloog-isl4",
- "libgcc-4.9-dev",
- "libgmp10",
- "libgomp1",
- "libisl10",
- "libitm1",
- "liblsan0",
- "libmpc3",
- "libmpfr4",
- "libquadmath0",
- "libstdc++-4.9-dev",
- "libtsan0",
- "libubsan0",
- "linux-libc-dev",
- ]
+ return [
+ "binutils",
+ "cpp",
+ "cpp-4.9",
+ "g++",
+ "g++-4.9",
+ "gcc",
+ "gcc-4.9",
+ "libasan1",
+ "libatomic1",
+ "libc-dev-bin",
+ "libc6-dev",
+ "libcilkrts5",
+ "libcloog-isl4",
+ "libgcc-4.9-dev",
+ "libgmp10",
+ "libgomp1",
+ "libisl10",
+ "libitm1",
+ "liblsan0",
+ "libmpc3",
+ "libmpfr4",
+ "libquadmath0",
+ "libstdc++-4.9-dev",
+ "libtsan0",
+ "libubsan0",
+ "linux-libc-dev",
+ ]
def _jessie_ed_package_names():
- return [
- "ed",
- ]
+ return [
+ "ed",
+ ]
def _jessie_file_package_names():
- return [
- "file",
- "libmagic1",
- ]
+ return [
+ "file",
+ "libmagic1",
+ ]
def _jessie_git_package_names():
- return [
- "git",
- "git-man",
- "libcurl3-gnutls",
- "liberror-perl",
- "libexpat1",
- "libffi6",
- "libgdbm3",
- "libgmp10",
- "libgnutls-deb0-28",
- "libgssapi-krb5-2",
- "libhogweed2",
- "libidn11",
- "libk5crypto3",
- "libkeyutils1",
- "libkrb5-3",
- "libkrb5support0",
- "libldap-2.4-2",
- "libnettle4",
- "libp11-kit0",
- "librtmp1",
- "libsasl2-2",
- "libsasl2-modules-db",
- "libssh2-1",
- "libtasn1-6",
- "perl",
- "perl-modules",
- # Though not strictly required, we get a 'Problem with the SSL CA cert'
- # errror w/o these packages
- "ca-certificates",
- "libssl1.0.0",
- "openssl",
- ]
+ return [
+ "git",
+ "git-man",
+ "libcurl3-gnutls",
+ "liberror-perl",
+ "libexpat1",
+ "libffi6",
+ "libgdbm3",
+ "libgmp10",
+ "libgnutls-deb0-28",
+ "libgssapi-krb5-2",
+ "libhogweed2",
+ "libidn11",
+ "libk5crypto3",
+ "libkeyutils1",
+ "libkrb5-3",
+ "libkrb5support0",
+ "libldap-2.4-2",
+ "libnettle4",
+ "libp11-kit0",
+ "librtmp1",
+ "libsasl2-2",
+ "libsasl2-modules-db",
+ "libssh2-1",
+ "libtasn1-6",
+ "perl",
+ "perl-modules",
+ # Though not strictly required, we get a 'Problem with the SSL CA cert'
+ # errror w/o these packages
+ "ca-certificates",
+ "libssl1.0.0",
+ "openssl",
+ ]
def _jessie_java_no_ca_certs_package_names():
- return [
- "fontconfig-config",
- "fonts-dejavu-core",
- "java-common",
- "libavahi-client3",
- "libavahi-common-data",
- "libavahi-common3",
- "libcups2",
- "libdbus-1-3",
- "libexpat1",
- "libffi6",
- "libfontconfig1",
- "libfreetype6",
- "libgmp10",
- "libgnutls-deb0-28",
- "libgssapi-krb5-2",
- "libhogweed2",
- "libjpeg62-turbo",
- "libk5crypto3",
- "libkeyutils1",
- "libkrb5-3",
- "libkrb5support0",
- "liblcms2-2",
- "libnettle4",
- "libnspr4",
- "libnss3",
- "libp11-kit0",
- "libpcsclite1",
- "libpng12-0",
- "libsqlite3-0",
- "libtasn1-6",
- "libx11-6",
- "libx11-data",
- "libxau6",
- "libxcb1",
- "libxdmcp6",
- "libxext6",
- "libxi6",
- "libxrender1",
- "libxtst6",
- "openjdk-8-jdk-headless",
- "openjdk-8-jre-headless",
- "ucf",
- "x11-common",
- "zlib1g",
- ]
+ return [
+ "fontconfig-config",
+ "fonts-dejavu-core",
+ "java-common",
+ "libavahi-client3",
+ "libavahi-common-data",
+ "libavahi-common3",
+ "libcups2",
+ "libdbus-1-3",
+ "libexpat1",
+ "libffi6",
+ "libfontconfig1",
+ "libfreetype6",
+ "libgmp10",
+ "libgnutls-deb0-28",
+ "libgssapi-krb5-2",
+ "libhogweed2",
+ "libjpeg62-turbo",
+ "libk5crypto3",
+ "libkeyutils1",
+ "libkrb5-3",
+ "libkrb5support0",
+ "liblcms2-2",
+ "libnettle4",
+ "libnspr4",
+ "libnss3",
+ "libp11-kit0",
+ "libpcsclite1",
+ "libpng12-0",
+ "libsqlite3-0",
+ "libtasn1-6",
+ "libx11-6",
+ "libx11-data",
+ "libxau6",
+ "libxcb1",
+ "libxdmcp6",
+ "libxext6",
+ "libxi6",
+ "libxrender1",
+ "libxtst6",
+ "openjdk-8-jdk-headless",
+ "openjdk-8-jre-headless",
+ "ucf",
+ "x11-common",
+ "zlib1g",
+ ]
def _jessie_java_package_names():
- return _jessie_java_no_ca_certs_package_names() + ["ca-certificates-java"]
+ return _jessie_java_no_ca_certs_package_names() + ["ca-certificates-java"]
def _jessie_lib_cpp_package_names():
- return [
- "libasan1",
- "libatomic1",
- "libc-dev-bin",
- "libc6-dev",
- "libcilkrts5",
- "libgcc-4.9-dev",
- "libgomp1",
- "libitm1",
- "liblsan0",
- "libquadmath0",
- "libstdc++-4.9-dev",
- "libtsan0",
- "libubsan0",
- "linux-libc-dev",
- ]
+ return [
+ "libasan1",
+ "libatomic1",
+ "libc-dev-bin",
+ "libc6-dev",
+ "libcilkrts5",
+ "libgcc-4.9-dev",
+ "libgomp1",
+ "libitm1",
+ "liblsan0",
+ "libquadmath0",
+ "libstdc++-4.9-dev",
+ "libtsan0",
+ "libubsan0",
+ "linux-libc-dev",
+ ]
def _jessie_openssh_client_package_names():
- return [
- "libbsd0",
- "libedit2",
- "libgssapi-krb5-2",
- "libk5crypto3",
- "libkeyutils1",
- "libkrb5-3",
- "libkrb5support0",
- "openssh-client",
- ]
+ return [
+ "libbsd0",
+ "libedit2",
+ "libgssapi-krb5-2",
+ "libk5crypto3",
+ "libkeyutils1",
+ "libkrb5-3",
+ "libkrb5support0",
+ "openssh-client",
+ ]
def _jessie_python3_dev_package_names():
- return [
- "dh-python",
- "libc-dev-bin",
- "libc6-dev",
- "libexpat1",
- "libexpat1-dev",
- "libffi6",
- "libmpdec2",
- "libpython3-dev",
- "libpython3-stdlib",
- "libpython3.4",
- "libpython3.4-dev",
- "libpython3.4-minimal",
- "libpython3.4-stdlib",
- "libsqlite3-0",
- "linux-libc-dev",
- "mime-support",
- "python3",
- "python3-dev",
- "python3-minimal",
- "python3.4",
- "python3.4-dev",
- "python3.4-minimal",
- ]
+ return [
+ "dh-python",
+ "libc-dev-bin",
+ "libc6-dev",
+ "libexpat1",
+ "libexpat1-dev",
+ "libffi6",
+ "libmpdec2",
+ "libpython3-dev",
+ "libpython3-stdlib",
+ "libpython3.4",
+ "libpython3.4-dev",
+ "libpython3.4-minimal",
+ "libpython3.4-stdlib",
+ "libsqlite3-0",
+ "linux-libc-dev",
+ "mime-support",
+ "python3",
+ "python3-dev",
+ "python3-minimal",
+ "python3.4",
+ "python3.4-dev",
+ "python3.4-minimal",
+ ]
def _jessie_python3_numpy_package_names():
- return [
- "dh-python",
- "libblas-common",
- "libblas3",
- "libexpat1",
- "libffi6",
- "libgfortran3",
- "liblapack3",
- "libmpdec2",
- "libpython3-stdlib",
- "libpython3.4-minimal",
- "libpython3.4-stdlib",
- "libquadmath0",
- "libsqlite3-0",
- "mime-support",
- "python3",
- "python3-minimal",
- "python3-numpy",
- "python3.4",
- "python3.4-minimal",
- ]
+ return [
+ "dh-python",
+ "libblas-common",
+ "libblas3",
+ "libexpat1",
+ "libffi6",
+ "libgfortran3",
+ "liblapack3",
+ "libmpdec2",
+ "libpython3-stdlib",
+ "libpython3.4-minimal",
+ "libpython3.4-stdlib",
+ "libquadmath0",
+ "libsqlite3-0",
+ "mime-support",
+ "python3",
+ "python3-minimal",
+ "python3-numpy",
+ "python3.4",
+ "python3.4-minimal",
+ ]
def _jessie_python3_pip_package_names():
- return [
- "dh-python",
- "libexpat1",
- "libffi6",
- "libmpdec2",
- "libpython3-stdlib",
- "libpython3.4-minimal",
- "libpython3.4-stdlib",
- "libsqlite3-0",
- "mime-support",
- "python3",
- "python3-chardet",
- "python3-colorama",
- "python3-distlib",
- "python3-html5lib",
- "python3-minimal",
- "python3-pip",
- "python3-pkg-resources",
- "python3-requests",
- "python3-setuptools",
- "python3-six",
- "python3-urllib3",
- "python3.4",
- "python3.4-minimal",
- ]
+ return [
+ "dh-python",
+ "libexpat1",
+ "libffi6",
+ "libmpdec2",
+ "libpython3-stdlib",
+ "libpython3.4-minimal",
+ "libpython3.4-stdlib",
+ "libsqlite3-0",
+ "mime-support",
+ "python3",
+ "python3-chardet",
+ "python3-colorama",
+ "python3-distlib",
+ "python3-html5lib",
+ "python3-minimal",
+ "python3-pip",
+ "python3-pkg-resources",
+ "python3-requests",
+ "python3-setuptools",
+ "python3-six",
+ "python3-urllib3",
+ "python3.4",
+ "python3.4-minimal",
+ ]
def _jessie_python_dev_package_names():
- return [
- "libc-dev-bin",
- "libc6-dev",
- "libexpat1",
- "libexpat1-dev",
- "libffi6",
- "libpython-dev",
- "libpython-stdlib",
- "libpython2.7",
- "libpython2.7-dev",
- "libpython2.7-minimal",
- "libpython2.7-stdlib",
- "libsqlite3-0",
- "linux-libc-dev",
- "mime-support",
- "python",
- "python-dev",
- "python-minimal",
- "python2.7",
- "python2.7-dev",
- "python2.7-minimal",
- ]
+ return [
+ "libc-dev-bin",
+ "libc6-dev",
+ "libexpat1",
+ "libexpat1-dev",
+ "libffi6",
+ "libpython-dev",
+ "libpython-stdlib",
+ "libpython2.7",
+ "libpython2.7-dev",
+ "libpython2.7-minimal",
+ "libpython2.7-stdlib",
+ "libsqlite3-0",
+ "linux-libc-dev",
+ "mime-support",
+ "python",
+ "python-dev",
+ "python-minimal",
+ "python2.7",
+ "python2.7-dev",
+ "python2.7-minimal",
+ ]
def _jessie_python_pip_package_names():
- return [
- "libexpat1",
- "libffi6",
- "libpython-stdlib",
- "libpython2.7-minimal",
- "libpython2.7-stdlib",
- "libsqlite3-0",
- "mime-support",
- "python",
- "python-chardet",
- "python-colorama",
- "python-distlib",
- "python-html5lib",
- "python-minimal",
- "python-pip",
- "python-pkg-resources",
- "python-requests",
- "python-setuptools",
- "python-six",
- "python-urllib3",
- "python2.7",
- "python2.7-minimal",
- ]
+ return [
+ "libexpat1",
+ "libffi6",
+ "libpython-stdlib",
+ "libpython2.7-minimal",
+ "libpython2.7-stdlib",
+ "libsqlite3-0",
+ "mime-support",
+ "python",
+ "python-chardet",
+ "python-colorama",
+ "python-distlib",
+ "python-html5lib",
+ "python-minimal",
+ "python-pip",
+ "python-pkg-resources",
+ "python-requests",
+ "python-setuptools",
+ "python-six",
+ "python-urllib3",
+ "python2.7",
+ "python2.7-minimal",
+ ]
def _jessie_python_numpy_package_names():
- return [
- "libblas-common",
- "libblas3",
- "libexpat1",
- "libffi6",
- "libgfortran3",
- "liblapack3",
- "libpython-stdlib",
- "libpython2.7-minimal",
- "libpython2.7-stdlib",
- "libquadmath0",
- "libsqlite3-0",
- "mime-support",
- "python",
- "python-minimal",
- "python-numpy",
- "python2.7",
- "python2.7-minimal",
- ]
+ return [
+ "libblas-common",
+ "libblas3",
+ "libexpat1",
+ "libffi6",
+ "libgfortran3",
+ "liblapack3",
+ "libpython-stdlib",
+ "libpython2.7-minimal",
+ "libpython2.7-stdlib",
+ "libquadmath0",
+ "libsqlite3-0",
+ "mime-support",
+ "python",
+ "python-minimal",
+ "python-numpy",
+ "python2.7",
+ "python2.7-minimal",
+ ]
def _jessie_wget_package_names():
- return [
- "libffi6",
- "libgmp10",
- "libgnutls-deb0-28",
- "libhogweed2",
- "libicu52",
- "libidn11",
- "libnettle4",
- "libp11-kit0",
- "libpsl0",
- "libtasn1-6",
- "wget",
- # Needed for cert validation done by wget
- "ca-certificates",
- "libssl1.0.0",
- "openssl",
- ]
+ return [
+ "libffi6",
+ "libgmp10",
+ "libgnutls-deb0-28",
+ "libhogweed2",
+ "libicu52",
+ "libidn11",
+ "libnettle4",
+ "libp11-kit0",
+ "libpsl0",
+ "libtasn1-6",
+ "wget",
+ # Needed for cert validation done by wget
+ "ca-certificates",
+ "libssl1.0.0",
+ "openssl",
+ ]
def _zip_package_names():
- return [
- "zip",
- "unzip",
- ]
+ return [
+ "zip",
+ "unzip",
+ ]
diff --git a/skylib/packages.bzl b/skylib/packages.bzl
index 6eb3cca..4d9c572 100644
--- a/skylib/packages.bzl
+++ b/skylib/packages.bzl
@@ -27,64 +27,64 @@
)
load(
":package_names.bzl",
- "tool_names",
"jessie_tools",
+ "tool_names",
)
def get_jessie_packages(pkg_list):
- """Common function for getting jessie packages."""
- return [jessie_packages[p] for p in pkg_list]
+ """Common function for getting jessie packages."""
+ return [jessie_packages[p] for p in pkg_list]
def base_layer_packages():
- """Base packages for fully loaded toolchain."""
- base_tools = [
- tool_names.binutils,
- tool_names.curl,
- tool_names.ed,
- tool_names.file,
- tool_names.git,
- tool_names.openssh_client,
- tool_names.wget,
- tool_names.zip,
- ]
- packages = []
- for tool in base_tools:
- packages.extend(get_jessie_packages(jessie_tools()[tool]))
- return depset(packages).to_list()
+ """Base packages for fully loaded toolchain."""
+ base_tools = [
+ tool_names.binutils,
+ tool_names.curl,
+ tool_names.ed,
+ tool_names.file,
+ tool_names.git,
+ tool_names.openssh_client,
+ tool_names.wget,
+ tool_names.zip,
+ ]
+ packages = []
+ for tool in base_tools:
+ packages.extend(get_jessie_packages(jessie_tools()[tool]))
+ return depset(packages).to_list()
def clang_layer_packages():
- """Packages for the clang layer."""
- clang_tools = [
- tool_names.binutils,
- tool_names.lib_cpp,
- ]
- packages = []
- for tool in clang_tools:
- packages.extend(get_jessie_packages(jessie_tools()[tool]))
- return depset(packages).to_list()
+ """Packages for the clang layer."""
+ clang_tools = [
+ tool_names.binutils,
+ tool_names.lib_cpp,
+ ]
+ packages = []
+ for tool in clang_tools:
+ packages.extend(get_jessie_packages(jessie_tools()[tool]))
+ return depset(packages).to_list()
def python_layer_packages():
- """Packages for the python layer."""
- python_tools = [
- tool_names.python_dev,
- tool_names.python_numpy,
- tool_names.python_pip,
- tool_names.python3_dev,
- tool_names.python3_numpy,
- tool_names.python3_pip,
- ]
- packages = []
- for tool in python_tools:
- packages.extend(get_jessie_packages(jessie_tools()[tool]))
- return depset(packages).to_list()
+ """Packages for the python layer."""
+ python_tools = [
+ tool_names.python_dev,
+ tool_names.python_numpy,
+ tool_names.python_pip,
+ tool_names.python3_dev,
+ tool_names.python3_numpy,
+ tool_names.python3_pip,
+ ]
+ packages = []
+ for tool in python_tools:
+ packages.extend(get_jessie_packages(jessie_tools()[tool]))
+ return depset(packages).to_list()
def java_layer_packages():
- """Packages for the java layer."""
- java_tools = [
- tool_names.java_no_ca_certs,
- ]
- packages = []
- for tool in java_tools:
- packages.extend(get_jessie_packages(jessie_tools()[tool]))
- packages.append(ca_certs_packages["ca-certificates-java"])
- return depset(packages).to_list()
+ """Packages for the java layer."""
+ java_tools = [
+ tool_names.java_no_ca_certs,
+ ]
+ packages = []
+ for tool in java_tools:
+ packages.extend(get_jessie_packages(jessie_tools()[tool]))
+ packages.append(ca_certs_packages["ca-certificates-java"])
+ return depset(packages).to_list()
diff --git a/test/configs/BUILD b/test/configs/BUILD
index 3781720..2a7d3e2 100644
--- a/test/configs/BUILD
+++ b/test/configs/BUILD
@@ -18,22 +18,23 @@
load("//container/rules:docker_toolchains.bzl", "toolchain_container")
load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
-load("@bazel_toolchains//rules:environments.bzl",
- "gcc_env",
+load(
+ "@bazel_toolchains//rules:environments.bzl",
"debian8_clang_default_keys",
"debian8_clang_default_packages",
- "debian8_clang_default_repos"
+ "debian8_clang_default_repos",
+ "gcc_env",
)
# Use "rbe-test-" prefix for easy identification of images to remove after the tests.
toolchain_container(
name = "rbe-test-jessie-with-pkgs",
+ additional_repos = debian8_clang_default_repos(),
base = "@official_jessie//image",
+ keys = debian8_clang_default_keys(),
packages = debian8_clang_default_packages() + [
"gcc",
],
- additional_repos = debian8_clang_default_repos(),
- keys = debian8_clang_default_keys(),
)
# Targets here are for testing purposes, we do not actually
@@ -51,8 +52,8 @@
base = ":rbe-test-jessie-with-pkgs.tar",
env = gcc_env(),
tags = ["manual"],
- use_bazel_head = True,
test = True,
+ use_bazel_head = True,
)
docker_toolchain_autoconfig(
@@ -68,8 +69,8 @@
docker_toolchain_autoconfig(
name = "debian-jessie-custom-bazel-rc-version-autoconfig",
base = ":rbe-test-jessie-with-pkgs.tar",
- bazel_version = "0.13.0",
bazel_rc_version = "1",
+ bazel_version = "0.13.0",
env = gcc_env(),
tags = ["manual"],
test = True,
@@ -78,7 +79,13 @@
# Use "rbe-test-" prefix for easy identification of images to remove after the tests.
toolchain_container(
name = "rbe-test-xenial-with-pkgs",
+ additional_repos = [
+ "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8",
+ ],
base = "@official_xenial//image",
+ keys = [
+ "@bazel_gpg//file",
+ ],
packages = [
"bazel",
"curl",
@@ -90,12 +97,6 @@
"wget",
"zip",
],
- additional_repos = [
- "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8",
- ],
- keys = [
- "@bazel_gpg//file",
- ],
)
docker_toolchain_autoconfig(
@@ -111,8 +112,8 @@
base = ":rbe-test-xenial-with-pkgs.tar",
env = gcc_env(),
tags = ["manual"],
- use_bazel_head = True,
test = True,
+ use_bazel_head = True,
)
docker_toolchain_autoconfig(
@@ -128,8 +129,8 @@
docker_toolchain_autoconfig(
name = "ubuntu-xenial-custom-bazel-rc-version-autoconfig",
base = ":rbe-test-xenial-with-pkgs.tar",
- bazel_version = "0.13.0",
bazel_rc_version = "1",
+ bazel_version = "0.13.0",
env = gcc_env(),
tags = ["manual"],
test = True,
@@ -141,7 +142,7 @@
timeout = "long",
srcs = ["debian8_clang_autoconfig_test.sh"],
data = [
- "//configs/debian8_clang:debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
- "@bazel_toolchains_test//file",
+ "//configs/debian8_clang:debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
+ "@bazel_toolchains_test//file",
],
)
diff --git a/test/container/container_determinism_test.bzl b/test/container/container_determinism_test.bzl
index 698396a..649912f 100644
--- a/test/container/container_determinism_test.bzl
+++ b/test/container/container_determinism_test.bzl
@@ -1,18 +1,18 @@
def container_determinism_test(name, container_name, container_sha):
- """Macro to invoke a sh_test rule with right parameters.
+ """Macro to invoke a sh_test rule with right parameters.
- Args:
- name: name of this rule.
- container_name: name of the container
- container_sha: value of the expected sha to check against
- """
+ Args:
+ name: name of this rule.
+ container_name: name of the container
+ container_sha: value of the expected sha to check against
+ """
- return native.sh_test(
- name = name,
- size = "medium",
- timeout = "long",
- srcs = ["container_determinism_test.sh"],
- data = [container_name],
- tags = ["manual"],
- args = ["-c %s -s %s" % (container_name, container_sha)],
- )
+ return native.sh_test(
+ name = name,
+ size = "medium",
+ timeout = "long",
+ srcs = ["container_determinism_test.sh"],
+ data = [container_name],
+ tags = ["manual"],
+ args = ["-c %s -s %s" % (container_name, container_sha)],
+ )
diff --git a/third_party/clang/revision.bzl b/third_party/clang/revision.bzl
index 5e91319..547595e 100644
--- a/third_party/clang/revision.bzl
+++ b/third_party/clang/revision.bzl
@@ -1,4 +1,4 @@
-CLANG_REVISION="r328903"
-DEBIAN8_CLANG_SHA256="8f460b909788ffd8dd467ea4ee106ccd08b4a43408dd98ac8e3938a9b6452bb7"
-DEBIAN9_CLANG_SHA256="350f77999033e39a02294406250df819cacb2106daa7b04b5fd6bfe7aa0ab5a1"
-UBUNTU16_04_CLANG_SHA256="f1874c57aa1e34c09595a4a0e03b91d7bf89dd7ad044ff4834b46198ff2e9d14"
+CLANG_REVISION = "r328903"
+DEBIAN8_CLANG_SHA256 = "8f460b909788ffd8dd467ea4ee106ccd08b4a43408dd98ac8e3938a9b6452bb7"
+DEBIAN9_CLANG_SHA256 = "350f77999033e39a02294406250df819cacb2106daa7b04b5fd6bfe7aa0ab5a1"
+UBUNTU16_04_CLANG_SHA256 = "f1874c57aa1e34c09595a4a0e03b91d7bf89dd7ad044ff4834b46198ff2e9d14"
diff --git a/third_party/golang/revision.bzl b/third_party/golang/revision.bzl
index 0484f05..9738cec 100644
--- a/third_party/golang/revision.bzl
+++ b/third_party/golang/revision.bzl
@@ -1,2 +1,2 @@
-GOLANG_REVISION="1.10"
-GOLANG_SHA256="b5a64335f1490277b585832d1f6c7f8c6c11206cba5cd3f771dcb87b98ad1a33"
+GOLANG_REVISION = "1.10"
+GOLANG_SHA256 = "b5a64335f1490277b585832d1f6c7f8c6c11206cba5cd3f771dcb87b98ad1a33"
diff --git a/third_party/libcxx/revision.bzl b/third_party/libcxx/revision.bzl
index 28baf11..8b7fe21 100644
--- a/third_party/libcxx/revision.bzl
+++ b/third_party/libcxx/revision.bzl
@@ -1,4 +1,4 @@
-LIBCXX_REVISION="r328903"
-DEBIAN8_LIBCXX_SHA256="d9798333832690577ca740acb3016a803be684ad0ed02e78922424b4b651f8ce"
-DEBIAN9_LIBCXX_SHA256="66219b838f8d243c071a4c094e13ef78082cd858d87841dd607839a351680b90"
-UBUNTU16_04_LIBCXX_SHA256="786a35a813e493342a018c04b8fb951a8b34a7d7e377e1ac793db738fc240451"
+LIBCXX_REVISION = "r328903"
+DEBIAN8_LIBCXX_SHA256 = "d9798333832690577ca740acb3016a803be684ad0ed02e78922424b4b651f8ce"
+DEBIAN9_LIBCXX_SHA256 = "66219b838f8d243c071a4c094e13ef78082cd858d87841dd607839a351680b90"
+UBUNTU16_04_LIBCXX_SHA256 = "786a35a813e493342a018c04b8fb951a8b34a7d7e377e1ac793db738fc240451"