load("//tools/build_defs/docker:docker.bzl", "docker_build") load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar") # This is totally non hermetic, we should really replace that by a # docker_pull rule. FLAVOURS = [f[f.find(".") + 1:] for f in glob(["Dockerfile.*"])] [ # This is totally non hermetic. genrule( name = "docker-" + flavour, srcs = ["Dockerfile." + flavour], outs = ["docker-%s.tar" % flavour], cmd = "\n".join([ "DIR=\"$$(dirname $<)\"", "IMG=\"$$(basename $<)\"", "DOCKER=\"$${PWD}/$(location @docker//:docker)\"", "(", " cd $$DIR", " $$DOCKER build -f $$IMG -t bazel_tools_cpp_test:%s ." % flavour, ")", "$$DOCKER save bazel_tools_cpp_test:%s > $@" % flavour, ]), tags = ["local"], # Docker needs to knows how to contact the daemon from the environment. # @docker//:docker point to a docker wrapper that copy the environment # of the user. tools = ["@docker//:docker"], ) for flavour in FLAVOURS ] # Just to avoid re-reading docker images all the time [ docker_build( name = "base-" + flavour, base = "docker-" + flavour, ) for flavour in FLAVOURS ] pkg_tar( name = "bazel_cc_configure", package_dir = "/opt/workspace", strip_prefix = "/", deps = ["//:bazel-distfile-tar"], ) [ [docker_build( name = "bazel_cc_configure-%s-%s" % (flavour, mode), base = ":base-" + flavour, entrypoint = "/opt/workspace/compile.sh && ./output/bazel test ${EXTRA_BAZEL_ARGS} //examples/cpp:hello-success_test", env = { "EXTRA_BAZEL_ARGS": "--spawn_strategy=standalone --genrule_strategy=standalone -c %s" % mode, }, tars = [":bazel_cc_configure"], workdir = "/opt/workspace", ) for mode in [ "dbg", "opt", "fastbuild", ]] for flavour in FLAVOURS ] [ [py_test( name = "test_cc_configure-%s-%s" % (flavour, mode), size = "large", srcs = ["docker_test.py"], args = [ "--main='$(location :bazel_cc_configure-%s-%s)'" % (flavour, mode), "--docker='../docker/docker'", ], data = [ ":bazel_cc_configure-%s-%s" % (flavour, mode), "@docker//:docker", ], local = 1, main = "docker_test.py", tags = [ "exclusive", "local", ], deps = ["//third_party/py/gflags"], ) for mode in [ "dbg", "opt", "fastbuild", ]] for flavour in FLAVOURS ] filegroup( name = "srcs", srcs = glob(["**"]), visibility = ["//tools/cpp:__pkg__"], )