add rbe-debian8 container by container_layer
* make use of container_layer rule to generate the experimental
rbe-debian8 container.
* rbe-debian8 container can pass the same tests as the current
debian8-clang-fully-loaded container
* since `layers` attr is used in container_image rule, we rename
`layers` -> `language_layers`
Tested:
- bazel test //container/debian8-clang-fully-loaded:all
- bazel test //container/experimental/rbe-debian8:all
Change-Id: I7c4a9e626d720d94f6f730f31f3f4d57c35a9a10
diff --git a/WORKSPACE b/WORKSPACE
index 48b6657..dcf8f28 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -22,9 +22,9 @@
# https://docs.bazel.build/versions/master/be/workspace.html#git_repository
http_archive(
name = "io_bazel_rules_docker",
- sha256 = "bc2182a51e19bf1fe5c3c33636b3e2827fac7be34af07690f9d612ca9bf31c3b",
- strip_prefix = "rules_docker-4d49182a85c745065e621c145238c5e9420ed91b",
- urls = ["https://github.com/bazelbuild/rules_docker/archive/4d49182a85c745065e621c145238c5e9420ed91b.tar.gz"],
+ sha256 = "d2e6408b8f8b03ad1f2172acadf979204dedd0423c5194a82a1301cc6d1c224b",
+ strip_prefix = "rules_docker-17f2587dc58642cd494b9d56890e6210f406380d",
+ urls = ["https://github.com/bazelbuild/rules_docker/archive/17f2587dc58642cd494b9d56890e6210f406380d.tar.gz"],
)
load(
diff --git a/container/debian8-clang-fully-loaded/BUILD b/container/debian8-clang-fully-loaded/BUILD
index a16aa31..7080e11 100644
--- a/container/debian8-clang-fully-loaded/BUILD
+++ b/container/debian8-clang-fully-loaded/BUILD
@@ -43,9 +43,9 @@
env = {
# PATH envvar is a special case, and currently only the one in the
# topmost layer is set. So that we override it here to include all.
- "PATH": "/usr/local/go/bin:/opt/python3.6/bin:$PATH",
+ "PATH": "/opt/python3.6/bin:/usr/local/go/bin:$PATH",
},
- layers = [
+ language_layers = [
"base-ltl",
"clang-ltl",
"go-ltl",
@@ -118,6 +118,6 @@
container_test(
name = "fl-toolchain-test",
- configs = ["test.yaml"],
+ configs = ["//container/test:rbe-debian8.yaml"],
image = ":fl-toolchain",
)
diff --git a/container/experimental/rbe-debian8/BUILD b/container/experimental/rbe-debian8/BUILD
new file mode 100644
index 0000000..92b0437
--- /dev/null
+++ b/container/experimental/rbe-debian8/BUILD
@@ -0,0 +1,113 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"]) # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+load("@distroless//cacerts:cacerts.bzl", "cacerts")
+load("@jessie_package_bundle//file:packages.bzl", "packages")
+load(
+ "//skylib:packages.bzl",
+ "base_layer_packages",
+ "clang_layer_packages",
+ "java_layer_packages",
+ "python_layer_packages",
+)
+load("@io_bazel_rules_docker//contrib:test.bzl", "container_test")
+load(
+ "@io_bazel_rules_docker//container:container.bzl",
+ "container_image",
+ "container_layer",
+)
+
+cacerts(
+ name = "cacerts",
+ deb = packages["ca-certificates"],
+)
+
+container_image(
+ name = "fl-toolchain",
+ base = "@debian8//image",
+ layers = [
+ "base-ltl",
+ "clang-ltl",
+ "go-ltl",
+ "java-ltl",
+ "python-ltl",
+ ],
+ tags = ["manual"],
+)
+
+container_layer(
+ name = "base-ltl",
+ debs = base_layer_packages(),
+ tags = ["manual"],
+ tars = [
+ ":cacerts.tar",
+ ],
+)
+
+container_layer(
+ name = "clang-ltl",
+ debs = clang_layer_packages(),
+ env = {
+ "CC": "/usr/local/bin/clang",
+ },
+ tags = ["manual"],
+ tars = ["//third_party/clang:tar"],
+)
+
+container_layer(
+ name = "go-ltl",
+ env = {
+ "GOPATH": "/go",
+ "PATH": "/usr/local/go/bin:$PATH",
+ },
+ tags = ["manual"],
+ tars = ["//third_party/golang:tar"],
+)
+
+container_layer(
+ name = "java-ltl",
+ debs = java_layer_packages(),
+ env = {
+ "JAVA_HOME": "/usr/lib/jvm/java-8-openjdk-amd64",
+ },
+ symlinks = {
+ "/usr/bin/java": "/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java",
+ },
+ tags = ["manual"],
+)
+
+container_layer(
+ name = "python-ltl",
+ debs = python_layer_packages(),
+ env = {
+ "PATH": "/opt/python3.6/bin:$PATH",
+ },
+ symlinks = {
+ "/usr/bin/python": "/usr/bin/python2.7",
+ "/opt/python3.6/bin/python3": "/opt/python3.6/bin/python3.6",
+ "/opt/python3.6/bin/pip3": "/opt/python3.6/bin/pip3.6",
+ },
+ tags = ["manual"],
+ tars = ["//third_party/python:tar"],
+)
+
+container_test(
+ name = "fl-toolchain-test",
+ configs = ["//container/test:rbe-debian8.yaml"],
+ image = ":fl-toolchain",
+)
diff --git a/container/rules/docker_toolchains.bzl b/container/rules/docker_toolchains.bzl
index 418ded8..468430b 100644
--- a/container/rules/docker_toolchains.bzl
+++ b/container/rules/docker_toolchains.bzl
@@ -76,7 +76,7 @@
symlinks = {}
# TODO(ngiraldo): we rewrite env and symlinks if there are conficts,
# warn the user of conflicts or error out.
- for layer in ctx.attr.layers:
+ for layer in ctx.attr.language_layers:
debs.extend(layer.debs)
tars.extend(layer.tars)
files.extend(layer.input_files)
@@ -92,7 +92,7 @@
toolchain_container_ = rule(
attrs = _container.image.attrs + {
- "layers": attr.label_list(),
+ "language_layers": attr.label_list(),
},
executable = True,
outputs = _container.image.outputs,
diff --git a/container/test/BUILD b/container/test/BUILD
new file mode 100644
index 0000000..263db40
--- /dev/null
+++ b/container/test/BUILD
@@ -0,0 +1,19 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"]) # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(glob(["**"]))
diff --git a/container/debian8-clang-fully-loaded/test.yaml b/container/test/rbe-debian8.yaml
similarity index 82%
rename from container/debian8-clang-fully-loaded/test.yaml
rename to container/test/rbe-debian8.yaml
index 6f8ee0c..7a34884 100644
--- a/container/debian8-clang-fully-loaded/test.yaml
+++ b/container/test/rbe-debian8.yaml
@@ -1,9 +1,21 @@
schemaVersion: "1.0.0"
commandTests:
-- name: 'path'
+- name: 'path-envvar'
command: ['sh', '-c', 'echo $PATH']
- expectedOutput: ['/usr/local/go/bin:/opt/python3.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin']
+ expectedOutput: ['/opt/python3.6/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin']
+- name: 'cc-envvar'
+ command: ['sh', '-c', 'echo $CC']
+ expectedOutput: ['/usr/local/bin/clang']
+- name: 'javahome-envvar'
+ command: ['sh', '-c', 'echo $JAVA_HOME']
+ expectedOutput: ['/usr/lib/jvm/java-8-openjdk-amd64']
+- name: 'gopath-envvar'
+ command: ['sh', '-c', 'echo $GOPATH']
+ expectedOutput: ['/go']
+- name: 'python3-version'
+ command: ['python3', '-V']
+ expectedOutput: ['Python 3.6.2']
fileExistenceTests:
- name: 'Root'