aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/cpp/test/docker_repository.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cpp/test/docker_repository.bzl')
-rw-r--r--tools/cpp/test/docker_repository.bzl57
1 files changed, 57 insertions, 0 deletions
diff --git a/tools/cpp/test/docker_repository.bzl b/tools/cpp/test/docker_repository.bzl
new file mode 100644
index 0000000000..4f96170176
--- /dev/null
+++ b/tools/cpp/test/docker_repository.bzl
@@ -0,0 +1,57 @@
+# Copyright 2016 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Rule for importing the docker binary for tests (experimental)."""
+
+def _impl(ctx):
+ docker = ctx.which("docker")
+ if docker == None:
+ # We cannot find docker, we won't be able to run tests depending
+ # on it, silently ignoring.
+ ctx.file("BUILD",
+ "\n".join([
+ "filegroup(",
+ " name = 'docker',",
+ " visibility = ['//visibility:public'],",
+ ")"
+ ]))
+ else:
+ exports = []
+ for k in ctx.os.environ:
+ # DOCKER* environment variable are used by the docker client
+ # to know how to talk to the docker daemon.
+ if k.startswith("DOCKER"):
+ exports.append("export %s='%s'" % (k, ctx.os.environ[k]))
+ ctx.symlink(docker, "docker-bin")
+ ctx.file("docker.sh", "\n".join([
+ "#!/bin/bash",
+ "\n".join(exports),
+"""BIN="$0"
+while [ -L "${BIN}" ]; do
+ BIN="$(readlink "${BIN}")"
+done
+exec "${BIN%%.sh}-bin" "$@"
+"""]))
+ ctx.file("BUILD", "\n".join([
+ "sh_binary(",
+ " name = 'docker',",
+ " srcs = ['docker.sh'],",
+ " data = [':docker-bin'],",
+ " visibility = ['//visibility:public'],",
+ ")"]))
+
+docker_repository_ = repository_rule(_impl)
+
+def docker_repository():
+ """Declare a @docker repository that provide a docker binary."""
+ docker_repository_(name = "docker")