Run bazel clean in culprit finder

Change-Id: Ie2cbacbf65a713fd2defbfaff92f4e599e0a5198
diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index b4eea0d..b101c7f 100644
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -457,6 +457,7 @@
     use_bazel_at_commit,
     use_but,
     save_but,
+    clean,
     build_only,
     test_only,
     monitor_flaky_tests,
@@ -527,6 +528,9 @@
                 time.sleep(1)
             print("Sauce Connect Proxy is ready, continuing...")
 
+        if clean:
+            execute_bazel_clean(bazel_binary, platform)
+
         if not test_only:
             execute_bazel_build(
                 bazel_binary,
@@ -956,6 +960,17 @@
     return aggregated_flags
 
 
+def execute_bazel_clean(bazel_binary, platform):
+    print_expanded_group(":bazel: Clean")
+
+    try:
+        execute_command(
+            [bazel_binary] + common_startup_flags(platform) + ["clean"]
+        )
+    except subprocess.CalledProcessError as e:
+        raise BuildkiteException("bazel clean failed with exit code {}".format(e.returncode))
+
+
 def execute_bazel_build(bazel_binary, platform, flags, targets, bep_file, incompatible_flags):
     print_expanded_group(":bazel: Build")
 
@@ -1771,6 +1786,7 @@
     )
     runner.add_argument("--use_but", type=bool, nargs="?", const=True)
     runner.add_argument("--save_but", type=bool, nargs="?", const=True)
+    runner.add_argument("--clean", type=bool, nargs="?", const=True)
     runner.add_argument("--build_only", type=bool, nargs="?", const=True)
     runner.add_argument("--test_only", type=bool, nargs="?", const=True)
     runner.add_argument("--monitor_flaky_tests", type=bool, nargs="?", const=True)
@@ -1822,6 +1838,7 @@
                 use_bazel_at_commit=args.use_bazel_at_commit,
                 use_but=args.use_but,
                 save_but=args.save_but,
+                clean=args.clean,
                 build_only=args.build_only,
                 test_only=args.test_only,
                 monitor_flaky_tests=args.monitor_flaky_tests,