# 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")