Add new constraint and toolchain for docker support. (#235)

* Add new constraint and toolchain for docker support.

https://github.com/bazelbuild/continuous-integration/issues/376
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 7a5d974..b0eb595 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -24,6 +24,7 @@
     test_flags:
     - "--test_output=errors"
     - "--verbose_failures"
+    - "--extra_toolchains=@bazel_toolchains//configs/ubuntu16_04_clang/latest:toolchain_docker"
     - "--extra_execution_platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:nosla_xenial_docker"
     - "--host_platform=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:nosla_xenial_docker"
     - "--platforms=@bazel_toolchains//configs/ubuntu16_04_clang/1.1:nosla_xenial_docker"
diff --git a/configs/debian8_clang/latest/BUILD b/configs/debian8_clang/latest/BUILD
index 65136ac..217fd7c 100644
--- a/configs/debian8_clang/latest/BUILD
+++ b/configs/debian8_clang/latest/BUILD
@@ -52,3 +52,21 @@
     name = "javabase",
     actual = PACKAGE + LATEST_CONFIG_VERSION + ":jdk8",
 )
+
+# For internal testing purpose only.
+toolchain(
+    name = "toolchain_docker",
+    exec_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+        "@bazel_tools//tools/cpp:clang",
+        "//constraints:support_docker",
+        "//constraints:jessie",
+    ],
+    target_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+    ],
+    toolchain = PACKAGE + LATEST_CONFIG_VERSION + "/bazel_" + LATEST_BAZEL_VERSION + "/default:cc-compiler-k8",
+    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
+)
diff --git a/configs/ubuntu16_04_clang/1.0/BUILD b/configs/ubuntu16_04_clang/1.0/BUILD
index 2ef1365..9d2a98b 100644
--- a/configs/ubuntu16_04_clang/1.0/BUILD
+++ b/configs/ubuntu16_04_clang/1.0/BUILD
@@ -146,6 +146,7 @@
         "@bazel_tools//platforms:x86_64",
         "@bazel_tools//platforms:linux",
         "@bazel_tools//tools/cpp:clang",
+        "//constraints:support_docker",
         "//constraints:xenial",
         "//constraints/sanitizers:support_msan",
     ],
diff --git a/configs/ubuntu16_04_clang/1.1/BUILD b/configs/ubuntu16_04_clang/1.1/BUILD
index 32e4108..55c9048 100644
--- a/configs/ubuntu16_04_clang/1.1/BUILD
+++ b/configs/ubuntu16_04_clang/1.1/BUILD
@@ -127,6 +127,7 @@
         "@bazel_tools//platforms:x86_64",
         "@bazel_tools//platforms:linux",
         "@bazel_tools//tools/cpp:clang",
+        "//constraints:support_docker",
         "//constraints:xenial",
         "//constraints/sanitizers:support_msan",
     ],
diff --git a/configs/ubuntu16_04_clang/latest/BUILD b/configs/ubuntu16_04_clang/latest/BUILD
index 87159e1..328af0d 100644
--- a/configs/ubuntu16_04_clang/latest/BUILD
+++ b/configs/ubuntu16_04_clang/latest/BUILD
@@ -52,3 +52,21 @@
     name = "javabase",
     actual = PACKAGE + LATEST_CONFIG_VERSION + ":jdk8",
 )
+
+# For internal testing purpose only.
+toolchain(
+    name = "toolchain_docker",
+    exec_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+        "@bazel_tools//tools/cpp:clang",
+        "//constraints:support_docker",
+        "//constraints:xenial",
+    ],
+    target_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+    ],
+    toolchain = PACKAGE + LATEST_CONFIG_VERSION + "/bazel_" + LATEST_BAZEL_VERSION + "/default:cc-compiler-k8",
+    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
+)
diff --git a/constraints/BUILD b/constraints/BUILD
index 5df2572..0c22966 100644
--- a/constraints/BUILD
+++ b/constraints/BUILD
@@ -28,3 +28,12 @@
     name = "xenial",
     constraint_setting = ":linux_distribution",
 )
+
+# Constraints used to configure docker.
+
+constraint_setting(name = "docker")
+
+constraint_value(
+    name = "support_docker",
+    constraint_setting = ":docker",
+)
diff --git a/release/cc/create_artifacts.py b/release/cc/create_artifacts.py
index ddf0e2f..d7063e4 100644
--- a/release/cc/create_artifacts.py
+++ b/release/cc/create_artifacts.py
@@ -107,6 +107,9 @@
   """
 
   for container_configs in container_configs_list:
+
+    constraints = container_configs.constraints
+
     with open(container_configs.get_latest_aliases_build_path(),
               "w") as build_file:
       # Update the BUILD file with aliases for latest toolchain targets.
@@ -119,6 +122,8 @@
             CONFIG_TYPES=", ".join(
                 [("\"%s\"" % config_type)
                  for config_type in container_configs.config_types]),
+            EXTRA_CONSTRAINTS="\n".join(
+                [("\"%s\"," % constraint) for constraint in constraints])
         )
 
         build_file.write(tpl)
diff --git a/release/cc/latest.tpl b/release/cc/latest.tpl
index c3c0e87..fb9a823 100644
--- a/release/cc/latest.tpl
+++ b/release/cc/latest.tpl
@@ -49,3 +49,21 @@
     name = "javabase",
     actual = PACKAGE + LATEST_CONFIG_VERSION + ":jdk8",
 )
+
+# For internal testing purpose only.
+toolchain(
+    name = "toolchain_docker",
+    exec_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+        "@bazel_tools//tools/cpp:clang",
+        "//constraints:support_docker",
+        ${EXTRA_CONSTRAINTS}
+    ],
+    target_compatible_with = [
+        "@bazel_tools//platforms:linux",
+        "@bazel_tools//platforms:x86_64",
+    ],
+    toolchain = PACKAGE + LATEST_CONFIG_VERSION + "/bazel_" + LATEST_BAZEL_VERSION + "/default:cc-compiler-k8",
+    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
+)