diff options
Diffstat (limited to 'tools/cpp/test/docker_repository.bzl')
-rw-r--r-- | tools/cpp/test/docker_repository.bzl | 57 |
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") |