Shard further docker-tests and use tags for sharding

To select which test to run on bazel-docker-tests, use
the docker and shard- tag intead of hard to read queries and
shard based on the compilation mode.

Also copy the file to bazel-slow-tests in prevision from
renaming the job on CI.

Issue bazelbuild/continuous-integration#98.

Change-Id: Ie8e9a21c5a1ce93c9ecaa74cbb2734c150c7f592
PiperOrigin-RevId: 167752261
diff --git a/scripts/ci/bazel-docker-tests.json b/scripts/ci/bazel-docker-tests.json
index 0fc2cd21..02a76e4 100644
--- a/scripts/ci/bazel-docker-tests.json
+++ b/scripts/ci/bazel-docker-tests.json
@@ -1,22 +1,23 @@
 [
     {
         "node": "docker",
-        "shard": "1",
+        "configurations": [
+            {
+                "shard": 1,
+                "parameters": {"test_tag_filters": ["docker", "shard-1"]}
+            },
+            {
+                "shard": 2,
+                "parameters": {"test_tag_filters": ["docker", "shard-2"]}
+            },
+            {
+                "shard": 3,
+                "parameters": {"test_tag_filters": ["docker", "shard-3"]}
+            }
+        ],
         "parameters": {
             "targets": [],
-            "tests": [
-                "filter(ubuntu, //src/test/docker/...)"
-            ]
-        }
-    },
-    {
-        "node": "docker",
-        "shard": "2",
-        "parameters": {
-            "targets": [],
-            "tests": [
-                "//src/test/docker/... - filter(ubuntu, //src/test/docker/...)"
-            ]
+            "tests": ["//src/test/docker/..."]
         }
     }
 ]
diff --git a/scripts/ci/bazel-slow-tests.json b/scripts/ci/bazel-slow-tests.json
new file mode 100644
index 0000000..02a76e4
--- /dev/null
+++ b/scripts/ci/bazel-slow-tests.json
@@ -0,0 +1,23 @@
+[
+    {
+        "node": "docker",
+        "configurations": [
+            {
+                "shard": 1,
+                "parameters": {"test_tag_filters": ["docker", "shard-1"]}
+            },
+            {
+                "shard": 2,
+                "parameters": {"test_tag_filters": ["docker", "shard-2"]}
+            },
+            {
+                "shard": 3,
+                "parameters": {"test_tag_filters": ["docker", "shard-3"]}
+            }
+        ],
+        "parameters": {
+            "targets": [],
+            "tests": ["//src/test/docker/..."]
+        }
+    }
+]
diff --git a/scripts/ci/bazel-tests.json b/scripts/ci/bazel-tests.json
index 076136a..08233a3 100644
--- a/scripts/ci/bazel-tests.json
+++ b/scripts/ci/bazel-tests.json
@@ -22,10 +22,11 @@
             ],
             "tests": [
                 "//scripts/...",
-                "filter(\"^(?!//src/test/docker).*$\", //src/test/...)",
+                "//src/test/...",
                 "//third_party/ijar/...",
                 "//tools/android/..."
             ],
+            "test_tag_filters": ["-docker"],
             "targets": []
         }
     }, {
@@ -71,11 +72,11 @@
             "build_opts": ["--define IPHONE_SDK=1"],
             "tests": [
                 "//scripts/...",
-                "filter(\"^(?!//src/test/docker).*$\", //src/test/...)",
+                "//src/test/...",
                 "//third_party/ijar/...",
-                "//tools/android/...",
-                "//src/test/shell/bazel:cpp_darwin_integration_test"
+                "//tools/android/..."
             ],
+            "test_tag_filters": ["-docker"],
             "targets": []
         }
     }, {
diff --git a/src/test/docker/BUILD b/src/test/docker/BUILD
index e489a6b..cf01798 100644
--- a/src/test/docker/BUILD
+++ b/src/test/docker/BUILD
@@ -27,7 +27,14 @@
     for flavour in FLAVOURS
 ]
 
-# TODO(#2418): reactivate debian-stretch opt (flaky)
+# Shard the docker test by compilation mode
+SHARD_NUMBER = {
+    "opt": 1,
+    "fastbuild": 2,
+    "dbg": 3,
+}
+
+# TODO(#2418): reactivate debian-stretch (flaky)
 [
     [py_test(
         name = "test_cc_configure-%s-%s" % (flavour, mode),
@@ -43,19 +50,15 @@
         ],
         local = 1,
         main = "docker_test.py",
-        tags = [
+        tags = ([
             "docker",
             "exclusive",
             "local",
-        ],
+            "shard-%s" % SHARD_NUMBER[mode],
+        ] + ["manual"]) if (flavour == "debian-stretch") else [],
         deps = ["//third_party/py/gflags"],
-    ) for mode in [
-        "dbg",
-        "opt",
-        "fastbuild",
-    ]]
+    ) for mode in SHARD_NUMBER]
     for flavour in FLAVOURS
-    if flavour != "debian-stretch"
 ]
 
 filegroup(