Indent bazelci.py with 4 spaces
diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index a23bf1a..efd1531 100644
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -32,482 +32,479 @@
 
 
 def downstream_projects():
-  return {
-      "BUILD_file_generator": {
-          "git_repository": "https://github.com/bazelbuild/BUILD_file_generator.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/BUILD_file_generator-postsubmit.json"
-      },
-      "bazel-toolchains": {
-          "git_repository": "https://github.com/bazelbuild/bazel-toolchains.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/bazel-toolchains-postsubmit.json"
-      },
-      "buildtools": {
-          "git_repository": "https://github.com/bazelbuild/buildtools.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/buildtools-postsubmit.json"
-      },
-      "CLion Plugin": {
-          "git_repository": "https://github.com/bazelbuild/intellij.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/clion-postsubmit.json"
-      },
-      "Eclipse Plugin": {
-          "git_repository": "https://github.com/bazelbuild/eclipse.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/eclipse-postsubmit.json"
-      },
-      "Gerrit": {
-          "git_repository": "https://gerrit.googlesource.com/gerrit.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/gerrit-postsubmit.json"
-      },
-      "Google Logging": {
-          "git_repository": "https://github.com/google/glog.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/glog-postsubmit.json"
-      },
-      "IntelliJ Plugin": {
-          "git_repository": "https://github.com/bazelbuild/intellij.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/intellij-postsubmit.json"
-      },
-      "migration-tooling": {
-          "git_repository": "https://github.com/bazelbuild/migration-tooling.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/migration-tooling-postsubmit.json"
-      },
-      "protobuf": {
-          "git_repository": "https://github.com/google/protobuf.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/protobuf-postsubmit.json"
-      },
-      "re2": {
-          "git_repository": "https://github.com/google/re2.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/re2-postsubmit.json"
-      },
-      "rules_appengine": {
-          "git_repository": "https://github.com/bazelbuild/rules_appengine.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_appengine-postsubmit.json"
-      },
-      "rules_closure": {
-          "git_repository": "https://github.com/bazelbuild/rules_closure.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_closure-postsubmit.json"
-      },
-      "rules_d": {
-          "git_repository": "https://github.com/bazelbuild/rules_d.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_d-postsubmit.json"
-      },
-      "rules_go": {
-          "git_repository": "https://github.com/bazelbuild/rules_go.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_go-postsubmit.json"
-      },
-      "rules_groovy": {
-          "git_repository": "https://github.com/bazelbuild/rules_groovy.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_groovy-postsubmit.json"
-      },
-      "rules_gwt": {
-          "git_repository": "https://github.com/bazelbuild/rules_gwt.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_gwt-postsubmit.json"
-      },
-      "rules_jsonnet": {
-          "git_repository": "https://github.com/bazelbuild/rules_jsonnet.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_jsonnet-postsubmit.json"
-      },
-      "rules_k8s": {
-          "git_repository": "https://github.com/bazelbuild/rules_k8s.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_k8s-postsubmit.json"
-      },
-      "rules_nodejs": {
-          "git_repository": "https://github.com/bazelbuild/rules_nodejs.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_nodejs-postsubmit.json"
-      },
-      "rules_perl": {
-          "git_repository": "https://github.com/bazelbuild/rules_perl.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_perl-postsubmit.json"
-      },
-      "rules_python": {
-          "git_repository": "https://github.com/bazelbuild/rules_python.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_python-postsubmit.json"
-      },
-      "rules_rust": {
-          "git_repository": "https://github.com/bazelbuild/rules_rust.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_rust-postsubmit.json"
-      },
-      "rules_sass": {
-          "git_repository": "https://github.com/bazelbuild/rules_sass.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_sass-postsubmit.json"
-      },
-      "rules_scala": {
-          "git_repository": "https://github.com/bazelbuild/rules_scala.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_scala-postsubmit.json"
-      },
-      "rules_typescript": {
-          "git_repository": "https://github.com/bazelbuild/rules_typescript.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_typescript-postsubmit.json"
-      },
-      # Enable once is resolved: https://github.com/bazelbuild/continuous-integration/issues/191
-      # "rules_webtesting": {
-      #     "git_repository": "https://github.com/bazelbuild/rules_webtesting.git",
-      #     "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_webtesting-postsubmit.json"
-      # },
-      "skydoc": {
-          "git_repository": "https://github.com/bazelbuild/skydoc.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/skydoc-postsubmit.json"
-      },
-      "subpar": {
-          "git_repository": "https://github.com/google/subpar.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/subpar-postsubmit.json"
-      },
-      "TensorFlow": {
-          "git_repository": "https://github.com/tensorflow/tensorflow.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/tensorflow-postsubmit.json"
-      },
-      "TensorFlow Serving": {
-          "git_repository": "https://github.com/tensorflow/serving.git",
-          "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/tensorflow-serving-postsubmit.json"
-      }
-  }
+    return {
+        "BUILD_file_generator": {
+            "git_repository": "https://github.com/bazelbuild/BUILD_file_generator.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/BUILD_file_generator-postsubmit.json"
+        },
+        "bazel-toolchains": {
+            "git_repository": "https://github.com/bazelbuild/bazel-toolchains.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/bazel-toolchains-postsubmit.json"
+        },
+        "buildtools": {
+            "git_repository": "https://github.com/bazelbuild/buildtools.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/buildtools-postsubmit.json"
+        },
+        "CLion Plugin": {
+            "git_repository": "https://github.com/bazelbuild/intellij.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/clion-postsubmit.json"
+        },
+        "Eclipse Plugin": {
+            "git_repository": "https://github.com/bazelbuild/eclipse.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/eclipse-postsubmit.json"
+        },
+        "Gerrit": {
+            "git_repository": "https://gerrit.googlesource.com/gerrit.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/gerrit-postsubmit.json"
+        },
+        "Google Logging": {
+            "git_repository": "https://github.com/google/glog.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/glog-postsubmit.json"
+        },
+        "IntelliJ Plugin": {
+            "git_repository": "https://github.com/bazelbuild/intellij.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/intellij-postsubmit.json"
+        },
+        "migration-tooling": {
+            "git_repository": "https://github.com/bazelbuild/migration-tooling.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/migration-tooling-postsubmit.json"
+        },
+        "protobuf": {
+            "git_repository": "https://github.com/google/protobuf.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/protobuf-postsubmit.json"
+        },
+        "re2": {
+            "git_repository": "https://github.com/google/re2.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/re2-postsubmit.json"
+        },
+        "rules_appengine": {
+            "git_repository": "https://github.com/bazelbuild/rules_appengine.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_appengine-postsubmit.json"
+        },
+        "rules_closure": {
+            "git_repository": "https://github.com/bazelbuild/rules_closure.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_closure-postsubmit.json"
+        },
+        "rules_d": {
+            "git_repository": "https://github.com/bazelbuild/rules_d.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_d-postsubmit.json"
+        },
+        "rules_go": {
+            "git_repository": "https://github.com/bazelbuild/rules_go.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_go-postsubmit.json"
+        },
+        "rules_groovy": {
+            "git_repository": "https://github.com/bazelbuild/rules_groovy.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_groovy-postsubmit.json"
+        },
+        "rules_gwt": {
+            "git_repository": "https://github.com/bazelbuild/rules_gwt.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_gwt-postsubmit.json"
+        },
+        "rules_jsonnet": {
+            "git_repository": "https://github.com/bazelbuild/rules_jsonnet.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_jsonnet-postsubmit.json"
+        },
+        "rules_k8s": {
+            "git_repository": "https://github.com/bazelbuild/rules_k8s.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_k8s-postsubmit.json"
+        },
+        "rules_nodejs": {
+            "git_repository": "https://github.com/bazelbuild/rules_nodejs.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_nodejs-postsubmit.json"
+        },
+        "rules_perl": {
+            "git_repository": "https://github.com/bazelbuild/rules_perl.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_perl-postsubmit.json"
+        },
+        "rules_python": {
+            "git_repository": "https://github.com/bazelbuild/rules_python.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_python-postsubmit.json"
+        },
+        "rules_rust": {
+            "git_repository": "https://github.com/bazelbuild/rules_rust.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_rust-postsubmit.json"
+        },
+        "rules_sass": {
+            "git_repository": "https://github.com/bazelbuild/rules_sass.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_sass-postsubmit.json"
+        },
+        "rules_scala": {
+            "git_repository": "https://github.com/bazelbuild/rules_scala.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_scala-postsubmit.json"
+        },
+        "rules_typescript": {
+            "git_repository": "https://github.com/bazelbuild/rules_typescript.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_typescript-postsubmit.json"
+        },
+        # Enable once is resolved: https://github.com/bazelbuild/continuous-integration/issues/191
+        # "rules_webtesting": {
+        #     "git_repository": "https://github.com/bazelbuild/rules_webtesting.git",
+        #     "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/rules_webtesting-postsubmit.json"
+        # },
+        "skydoc": {
+            "git_repository": "https://github.com/bazelbuild/skydoc.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/skydoc-postsubmit.json"
+        },
+        "subpar": {
+            "git_repository": "https://github.com/google/subpar.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/subpar-postsubmit.json"
+        },
+        "TensorFlow": {
+            "git_repository": "https://github.com/tensorflow/tensorflow.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/tensorflow-postsubmit.json"
+        },
+        "TensorFlow Serving": {
+            "git_repository": "https://github.com/tensorflow/serving.git",
+            "http_config": "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/pipelines/tensorflow-serving-postsubmit.json"
+        }
+    }
 
 
 def python_binary():
-  return "python3.6"
+    return "python3.6"
 
 
 def bazelcipy_url():
-  '''
-  URL to the latest version of this script.
-  '''
-  return "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/bazelci.py"
+    '''
+    URL to the latest version of this script.
+    '''
+    return "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/buildkite/bazelci.py"
 
 
 def eprint(*args, **kwargs):
-  '''
-  Print to stderr and exit the process.
-  '''
-  print(*args, file=sys.stderr, **kwargs)
-  exit(1)
+    '''
+    Print to stderr and exit the process.
+    '''
+    print(*args, file=sys.stderr, **kwargs)
+    exit(1)
 
 
 def platforms_info():
-  '''
-  Returns a map containing all supported platform names as keys, with the
-  values being the platform name in a human readable format, and a the
-  buildkite-agent's working directory.
-  '''
-  return {
-      "ubuntu1404":
-      {
-          "name": "Ubuntu 14.04",
-          "agent-directory": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
-      },
-      "ubuntu1604":
-      {
-          "name": "Ubuntu 16.04",
-          "agent-directory": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
-      },
-      "macos":
-      {
-          "name": "macOS",
-          "agent-directory": "/usr/local/var/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
-      }
-  }
+    '''
+    Returns a map containing all supported platform names as keys, with the
+    values being the platform name in a human readable format, and a the
+    buildkite-agent's working directory.
+    '''
+    return {
+        "ubuntu1404": {
+            "name": "Ubuntu 14.04",
+            "agent-directory": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
+        },
+        "ubuntu1604": {
+            "name": "Ubuntu 16.04",
+            "agent-directory": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
+        },
+        "macos": {
+            "name": "macOS",
+            "agent-directory": "/usr/local/var/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
+        }
+    }
 
 
 def downstream_projects_root(platform):
-  downstream_projects_dir = os.path.expandvars(
-      "${BUILDKITE_ORGANIZATION_SLUG}-downstream-projects")
-  path = os.path.join(agent_directory(platform), downstream_projects_dir)
-  if not os.path.exists(path):
-    os.makedirs(path)
-  return path
+    downstream_projects_dir = os.path.expandvars(
+        "${BUILDKITE_ORGANIZATION_SLUG}-downstream-projects")
+    path = os.path.join(agent_directory(platform), downstream_projects_dir)
+    if not os.path.exists(path):
+        os.makedirs(path)
+    return path
 
 
 def agent_directory(platform):
-  return os.path.expandvars(platforms_info()[platform]["agent-directory"])
+    return os.path.expandvars(platforms_info()[platform]["agent-directory"])
 
 
 def supported_platforms():
-  return set(platforms_info().keys())
+    return set(platforms_info().keys())
 
 
 def platform_name(platform):
-  return platforms_info()[platform]["name"]
+    return platforms_info()[platform]["name"]
 
 
 def fetch_configs(http_url):
-  '''
-  If specified fetches the build configuration from http_url, else tries to
-  read it from .bazelci/config.json.
-  Returns the json configuration as a python data structure.
-  '''
-  if http_url is None:
-    with open(".bazelci/config.json", "r") as fd:
-      return json.load(fd)
-  with urllib.request.urlopen(http_url) as resp:
-    reader = codecs.getreader("utf-8")
-    return json.load(reader(resp))
+    '''
+    If specified fetches the build configuration from http_url, else tries to
+    read it from .bazelci/config.json.
+    Returns the json configuration as a python data structure.
+    '''
+    if http_url is None:
+        with open(".bazelci/config.json", "r") as fd:
+            return json.load(fd)
+    with urllib.request.urlopen(http_url) as resp:
+        reader = codecs.getreader("utf-8")
+        return json.load(reader(resp))
 
 
 def print_collapsed_group(name):
-  print("\n--- {0}\n".format(name))
+    print("\n--- {0}\n".format(name))
 
 
 def print_expanded_group(name):
-  print("\n+++ {0}\n".format(name))
+    print("\n+++ {0}\n".format(name))
 
 
 def execute_commands(config, platform, git_repository, use_but, save_but,
                      build_only, test_only):
-  exit_code = -1
-  tmpdir = None
-  bazel_binary = "bazel"
-  try:
-    if git_repository:
-      clone_git_repository(git_repository, platform)
-    cleanup(platform)
-    tmpdir = tempfile.mkdtemp()
-    if use_but:
-      print_collapsed_group("Downloading Bazel under test")
-      bazel_binary = download_bazel_binary(tmpdir, platform)
-    print_bazel_version_info(bazel_binary)
-    execute_shell_commands(config.get("shell_commands", None))
-    execute_bazel_run(bazel_binary, config.get("run_targets", None))
-    if not test_only:
-      execute_bazel_build(bazel_binary, config.get("build_flags", []),
-                          config.get("build_targets", None))
-      if save_but:
-        upload_bazel_binary()
-    if not build_only:
-      bep_file = os.path.join(tmpdir, "build_event_json_file.json")
-      exit_code = execute_bazel_test(bazel_binary, config.get("test_flags", []),
-                                     config.get("test_targets", None), bep_file)
-      # Fail the pipeline if there were any flaky tests.
-      if has_flaky_tests() and exit_code == 0:
-        exit_code = 1
-      upload_test_logs(bep_file, tmpdir)
-  finally:
-    if tmpdir:
-      shutil.rmtree(tmpdir)
-    cleanup(platform)
-    if exit_code > -1:
-      exit(exit_code)
+    exit_code = -1
+    tmpdir = None
+    bazel_binary = "bazel"
+    try:
+        if git_repository:
+            clone_git_repository(git_repository, platform)
+        cleanup(platform)
+        tmpdir = tempfile.mkdtemp()
+        if use_but:
+            print_collapsed_group("Downloading Bazel under test")
+            bazel_binary = download_bazel_binary(tmpdir, platform)
+        print_bazel_version_info(bazel_binary)
+        execute_shell_commands(config.get("shell_commands", None))
+        execute_bazel_run(bazel_binary, config.get("run_targets", None))
+        if not test_only:
+            execute_bazel_build(bazel_binary, config.get("build_flags", []),
+                                config.get("build_targets", None))
+            if save_but:
+                upload_bazel_binary()
+        if not build_only:
+            bep_file = os.path.join(tmpdir, "build_event_json_file.json")
+            exit_code = execute_bazel_test(bazel_binary, config.get("test_flags", []),
+                                           config.get("test_targets", None), bep_file)
+            # Fail the pipeline if there were any flaky tests.
+            if has_flaky_tests() and exit_code == 0:
+                exit_code = 1
+            upload_test_logs(bep_file, tmpdir)
+    finally:
+        if tmpdir:
+            shutil.rmtree(tmpdir)
+        cleanup(platform)
+        if exit_code > -1:
+            exit(exit_code)
 
 
 def has_flaky_tests(bep_file):
-  return len(test_logs_for_status(bep_file, status="FLAKY")) > 0
+    return len(test_logs_for_status(bep_file, status="FLAKY")) > 0
 
 
 def print_bazel_version_info(bazel_binary):
-  print_collapsed_group("Bazel Info")
-  fail_if_nonzero(execute_command([bazel_binary, "version"]))
-  fail_if_nonzero(execute_command([bazel_binary, "info"]))
+    print_collapsed_group("Bazel Info")
+    fail_if_nonzero(execute_command([bazel_binary, "version"]))
+    fail_if_nonzero(execute_command([bazel_binary, "info"]))
 
 
 def upload_bazel_binary():
-  print_collapsed_group("Uploading Bazel under test")
-  fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "upload",
-                                   "bazel-bin/src/bazel"]))
+    print_collapsed_group("Uploading Bazel under test")
+    fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "upload",
+                                     "bazel-bin/src/bazel"]))
 
 
 def download_bazel_binary(dest_dir, platform):
-  source_step = create_label(platform_name(platform), "Bazel", build_only=True,
-                             test_only=False)
-  fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "download",
-                                   "bazel-bin/src/bazel", dest_dir, "--step", source_step]))
-  bazel_binary_path = os.path.join(dest_dir, "bazel-bin/src/bazel")
-  st = os.stat(bazel_binary_path)
-  os.chmod(bazel_binary_path, st.st_mode | stat.S_IEXEC)
-  return bazel_binary_path
+    source_step = create_label(platform_name(platform), "Bazel", build_only=True,
+                               test_only=False)
+    fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "download",
+                                     "bazel-bin/src/bazel", dest_dir, "--step", source_step]))
+    bazel_binary_path = os.path.join(dest_dir, "bazel-bin/src/bazel")
+    st = os.stat(bazel_binary_path)
+    os.chmod(bazel_binary_path, st.st_mode | stat.S_IEXEC)
+    return bazel_binary_path
 
 
 def clone_git_repository(git_repository, platform):
-  root = downstream_projects_root(platform)
-  project_name = re.search("/([^/]+)\.git$", git_repository).group(1)
-  clone_path = os.path.join(root, project_name)
-  print_collapsed_group("Fetching " + project_name + " sources")
-  if os.path.exists(clone_path):
-    os.chdir(clone_path)
-    fail_if_nonzero(execute_command(
-        ["git", "remote", "set-url", "origin", git_repository]))
-    fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
-    fail_if_nonzero(execute_command(
-        ["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
-    # sync to the latest commit of HEAD. Unlikely git pull this also works after
-    # a force push.
-    fail_if_nonzero(execute_command(["git", "fetch", "origin"]))
-    remote_head = subprocess.check_output(
-        ["git", "symbolic-ref", "refs/remotes/origin/HEAD"])
-    remote_head = remote_head.decode("utf-8")
-    remote_head = remote_head.rstrip()
-    fail_if_nonzero(execute_command(
-        ["git", "reset", remote_head, "--hard"]))
-    fail_if_nonzero(execute_command(
-        ["git", "submodule", "sync", "--recursive"]))
-    fail_if_nonzero(execute_command(
-        ["git", "submodule", "update", "--init", "--recursive", "--force"]))
-    fail_if_nonzero(execute_command(
-        ["git", "submodule", "foreach", "--recursive", "git", "reset", "--hard"]))
-    fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
-    fail_if_nonzero(execute_command(
-        ["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
-  else:
-    fail_if_nonzero(execute_command(
-        ["git", "clone", "--recurse-submodules", git_repository, clone_path]))
-    os.chdir(clone_path)
+    root = downstream_projects_root(platform)
+    project_name = re.search("/([^/]+)\.git$", git_repository).group(1)
+    clone_path = os.path.join(root, project_name)
+    print_collapsed_group("Fetching " + project_name + " sources")
+    if os.path.exists(clone_path):
+        os.chdir(clone_path)
+        fail_if_nonzero(execute_command(
+            ["git", "remote", "set-url", "origin", git_repository]))
+        fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
+        fail_if_nonzero(execute_command(
+            ["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
+        # sync to the latest commit of HEAD. Unlikely git pull this also works after
+        # a force push.
+        fail_if_nonzero(execute_command(["git", "fetch", "origin"]))
+        remote_head = subprocess.check_output(
+            ["git", "symbolic-ref", "refs/remotes/origin/HEAD"])
+        remote_head = remote_head.decode("utf-8")
+        remote_head = remote_head.rstrip()
+        fail_if_nonzero(execute_command(
+            ["git", "reset", remote_head, "--hard"]))
+        fail_if_nonzero(execute_command(
+            ["git", "submodule", "sync", "--recursive"]))
+        fail_if_nonzero(execute_command(
+            ["git", "submodule", "update", "--init", "--recursive", "--force"]))
+        fail_if_nonzero(execute_command(
+            ["git", "submodule", "foreach", "--recursive", "git", "reset", "--hard"]))
+        fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
+        fail_if_nonzero(execute_command(
+            ["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
+    else:
+        fail_if_nonzero(execute_command(
+            ["git", "clone", "--recurse-submodules", git_repository, clone_path]))
+        os.chdir(clone_path)
 
 
 def cleanup(platform):
-  print_collapsed_group("Cleanup")
-  if os.path.exists("WORKSPACE"):
-    fail_if_nonzero(execute_command(["bazel", "clean", "--expunge"]))
+    print_collapsed_group("Cleanup")
+    if os.path.exists("WORKSPACE"):
+        fail_if_nonzero(execute_command(["bazel", "clean", "--expunge"]))
 
 
 def execute_shell_commands(commands):
-  if not commands:
-    return
-  print_collapsed_group("Setup (Shell Commands)")
-  shell_command = "\n".join(commands)
-  fail_if_nonzero(execute_command([shell_command], shell=True))
+    if not commands:
+        return
+    print_collapsed_group("Setup (Shell Commands)")
+    shell_command = "\n".join(commands)
+    fail_if_nonzero(execute_command([shell_command], shell=True))
 
 
 def execute_bazel_run(bazel_binary, targets):
-  if not targets:
-    return
-  print_collapsed_group("Setup (Run Targets)")
-  for target in targets:
-    fail_if_nonzero(execute_command([bazel_binary, "run", "--curses=yes",
-                                     "--color=yes", "--verbose_failurs", target]))
+    if not targets:
+        return
+    print_collapsed_group("Setup (Run Targets)")
+    for target in targets:
+        fail_if_nonzero(execute_command([bazel_binary, "run", "--curses=yes",
+                                         "--color=yes", "--verbose_failurs", target]))
 
 
 def execute_bazel_build(bazel_binary, flags, targets):
-  if not targets:
-    return
-  print_expanded_group("Build")
-  num_jobs = str(multiprocessing.cpu_count())
-  common_flags = ["--curses=yes", "--color=yes", "--keep_going",
-                  "--verbose_failures", "--jobs=" + num_jobs]
-  fail_if_nonzero(execute_command(
-      [bazel_binary, "build"] + common_flags + flags + targets))
+    if not targets:
+        return
+    print_expanded_group("Build")
+    num_jobs = str(multiprocessing.cpu_count())
+    common_flags = ["--curses=yes", "--color=yes", "--keep_going",
+                    "--verbose_failures", "--jobs=" + num_jobs]
+    fail_if_nonzero(execute_command(
+        [bazel_binary, "build"] + common_flags + flags + targets))
 
 
 def execute_bazel_test(bazel_binary, flags, targets, bep_file):
-  if not targets:
-    return 0
-  print_expanded_group("Test")
-  num_jobs = str(multiprocessing.cpu_count())
-  common_flags = ["--curses=yes", "--color=yes", "--keep_going", "--verbose_failures",
-                  "--flaky_test_attempts=3", "--build_tests_only",
-                  "--jobs=" + num_jobs, "--local_test_jobs=" + num_jobs,
-                  "--build_event_json_file=" + bep_file]
-  return execute_command([bazel_binary, "test"] + common_flags + flags + targets)
+    if not targets:
+        return 0
+    print_expanded_group("Test")
+    num_jobs = str(multiprocessing.cpu_count())
+    common_flags = ["--curses=yes", "--color=yes", "--keep_going", "--verbose_failures",
+                    "--flaky_test_attempts=3", "--build_tests_only",
+                    "--jobs=" + num_jobs, "--local_test_jobs=" + num_jobs,
+                    "--build_event_json_file=" + bep_file]
+    return execute_command([bazel_binary, "test"] + common_flags + flags + targets)
 
 
 def fail_if_nonzero(exitcode):
-  if exitcode is not 0:
-    exit(exitcode)
+    if exitcode is not 0:
+        exit(exitcode)
 
 
 def upload_test_logs(bep_file, tmpdir):
-  if not os.path.exists(bep_file):
-    return
-  test_logs = test_logs_to_upload(bep_file, tmpdir)
-  if test_logs:
-    cwd = os.getcwd()
-    try:
-      os.chdir(tmpdir)
-      print_collapsed_group("Uploading test logs")
-      for logfile in test_logs:
-        relative_path = os.path.relpath(logfile, tmpdir)
-        fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "upload",
-                                         relative_path]))
-    finally:
-      os.chdir(cwd)
+    if not os.path.exists(bep_file):
+        return
+    test_logs = test_logs_to_upload(bep_file, tmpdir)
+    if test_logs:
+        cwd = os.getcwd()
+        try:
+            os.chdir(tmpdir)
+            print_collapsed_group("Uploading test logs")
+            for logfile in test_logs:
+                relative_path = os.path.relpath(logfile, tmpdir)
+                fail_if_nonzero(execute_command(["buildkite-agent", "artifact", "upload",
+                                                 relative_path]))
+        finally:
+            os.chdir(cwd)
 
 
 def test_logs_to_upload(bep_file, tmpdir):
-  failed = test_logs_for_status(bep_file, status="FAILED")
-  timed_out = test_logs_for_status(bep_file, status="TIMEOUT")
-  flaky = test_logs_for_status(bep_file, status="FLAKY")
-  # Rename the test.log files to the target that created them
-  # so that it's easy to associate test.log and target.
-  new_paths = []
-  for label, test_logs in (failed + timed_out + flaky):
-    attempt = 0
-    if len(test_logs) > 1:
-      attempt = 1
-    for test_log in test_logs:
-      new_path = test_label_to_path(tmpdir, label, attempt)
-      os.makedirs(os.path.dirname(new_path), exist_ok=True)
-      copyfile(test_logs, new_path)
-      new_paths.append(new_path)
-      attempt = attempt + 1
-  return new_paths
+    failed = test_logs_for_status(bep_file, status="FAILED")
+    timed_out = test_logs_for_status(bep_file, status="TIMEOUT")
+    flaky = test_logs_for_status(bep_file, status="FLAKY")
+    # Rename the test.log files to the target that created them
+    # so that it's easy to associate test.log and target.
+    new_paths = []
+    for label, test_logs in (failed + timed_out + flaky):
+        attempt = 0
+        if len(test_logs) > 1:
+            attempt = 1
+        for test_log in test_logs:
+            new_path = test_label_to_path(tmpdir, label, attempt)
+            os.makedirs(os.path.dirname(new_path), exist_ok=True)
+            copyfile(test_logs, new_path)
+            new_paths.append(new_path)
+            attempt = attempt + 1
+    return new_paths
 
 
 def test_label_to_path(tmpdir, label, attempt):
-  # remove leading //
-  path = label[2:]
-  path = path.replace(":", "/")
-  if attempt == 0:
-    path = os.path.join(path, "test.log")
-  else:
-    path = os.path.join(path, "attempt_" + str(attempt) + ".log")
-  return os.path.join(tmpdir, path)
+    # remove leading //
+    path = label[2:]
+    path = path.replace(":", "/")
+    if attempt == 0:
+        path = os.path.join(path, "test.log")
+    else:
+        path = os.path.join(path, "attempt_" + str(attempt) + ".log")
+    return os.path.join(tmpdir, path)
 
 
 def test_logs_for_status(bep_file, status):
-  targets = []
-  raw_data = ""
-  with open(bep_file) as f:
-    raw_data = f.read()
-  decoder = json.JSONDecoder()
+    targets = []
+    raw_data = ""
+    with open(bep_file) as f:
+        raw_data = f.read()
+    decoder = json.JSONDecoder()
 
-  pos = 0
-  while pos < len(raw_data):
-    bep_obj, size = decoder.raw_decode(raw_data[pos:])
-    if "testResult" in bep_obj:
-      test_target = bep_obj["id"]["testResult"]["label"]
-      test_result = bep_obj["testResult"]
-      if test_result["status"] == status:
-        outputs = test_result["testActionOutput"]
-        test_logs = []
-        for output in outputs:
-          if output["name"] == "test.log":
-            test_logs.append(urlparse(output["uri"]).path)
-        if test_logs:
-          targets.append((test_target, test_logs))
-    pos += size + 1
-  return targets
+    pos = 0
+    while pos < len(raw_data):
+        bep_obj, size = decoder.raw_decode(raw_data[pos:])
+        if "testResult" in bep_obj:
+            test_target = bep_obj["id"]["testResult"]["label"]
+            test_result = bep_obj["testResult"]
+            if test_result["status"] == status:
+                outputs = test_result["testActionOutput"]
+                test_logs = []
+                for output in outputs:
+                    if output["name"] == "test.log":
+                        test_logs.append(urlparse(output["uri"]).path)
+                if test_logs:
+                    targets.append((test_target, test_logs))
+        pos += size + 1
+    return targets
 
 
 def execute_command(args, shell=False):
-  print(" ".join(args))
-  res = subprocess.run(args, shell=shell)
-  return res.returncode
+    print(" ".join(args))
+    res = subprocess.run(args, shell=shell)
+    return res.returncode
 
 
 def print_project_pipeline(platform_configs, project_name, http_config,
                            git_repository, use_but):
-  pipeline_steps = []
-  for platform, config in platform_configs.items():
-    step = runner_step(platform, project_name, http_config, git_repository,
-                       use_but)
-    pipeline_steps.append(step)
+    pipeline_steps = []
+    for platform, config in platform_configs.items():
+        step = runner_step(platform, project_name, http_config, git_repository,
+                           use_but)
+        pipeline_steps.append(step)
 
-  print_pipeline(pipeline_steps)
+    print_pipeline(pipeline_steps)
 
 
 def runner_step(platform, project_name=None, http_config=None,
                 git_repository=None, use_but=False, save_but=False, build_only=False,
                 test_only=False):
-  command = python_binary() + " bazelci.py runner --platform=" + platform
-  if http_config:
-    command = command + " --http_config=" + http_config
-  if git_repository:
-    command = command + " --git_repository=" + git_repository
-  if use_but:
-    command = command + " --use_but"
-  if save_but:
-    command = command + " --save_but"
-  if build_only:
-    command = command + " --build_only"
-  if test_only:
-    command = command + " --test_only"
-  label = create_label(platform_name(platform),
-                       project_name, build_only, test_only)
-  return """
+    command = python_binary() + " bazelci.py runner --platform=" + platform
+    if http_config:
+        command = command + " --http_config=" + http_config
+    if git_repository:
+        command = command + " --git_repository=" + git_repository
+    if use_but:
+        command = command + " --use_but"
+    if save_but:
+        command = command + " --save_but"
+    if build_only:
+        command = command + " --build_only"
+    if test_only:
+        command = command + " --test_only"
+    label = create_label(platform_name(platform),
+                         project_name, build_only, test_only)
+    return """
   - label: \"{0}\"
     command: \"{1}\\n{2}\"
     agents:
@@ -515,35 +512,35 @@
 
 
 def print_pipeline(steps):
-  print("steps:")
-  for step in steps:
-    print(step)
+    print("steps:")
+    for step in steps:
+        print(step)
 
 
 def wait_step():
-  return """
+    return """
   - wait"""
 
 
 def http_config_flag(http_config):
-  if http_config is not None:
-    return "--http_config=" + http_config
-  return ""
+    if http_config is not None:
+        return "--http_config=" + http_config
+    return ""
 
 
 def fetch_bazelcipy_command():
-  return "curl -s {0} -o bazelci.py".format(bazelcipy_url())
+    return "curl -s {0} -o bazelci.py".format(bazelcipy_url())
 
 
 def upload_project_pipeline_step(project_name, git_repository, http_config):
-  pipeline_command = ("{0} bazelci.py project_pipeline --project_name=\\\"{1}\\\" " +
-                      "--use_but --git_repository={2}").format(python_binary(), project_name,
-                                                               git_repository)
-  if http_config:
-    pipeline_command = pipeline_command + " --http_config=" + http_config
-  pipeline_command = pipeline_command + " | buildkite-agent pipeline upload"
+    pipeline_command = ("{0} bazelci.py project_pipeline --project_name=\\\"{1}\\\" " +
+                        "--use_but --git_repository={2}").format(python_binary(), project_name,
+                                                                 git_repository)
+    if http_config:
+        pipeline_command = pipeline_command + " --http_config=" + http_config
+    pipeline_command = pipeline_command + " | buildkite-agent pipeline upload"
 
-  return """
+    return """
   - label: \"Setup {0}\"
     command: \"{1}\\n{2}\"
     agents:
@@ -553,32 +550,32 @@
 
 def create_label(platform_name, project_name=None, build_only=False,
                  test_only=False):
-  label = ""
-  if build_only:
-    label = "Build "
-  if test_only:
-    label = "Test "
-  if project_name:
-    label = label + "{0} ({1})".format(project_name, platform_name)
-  else:
-    label = label + platform_name
-  return label
+    label = ""
+    if build_only:
+        label = "Build "
+    if test_only:
+        label = "Test "
+    if project_name:
+        label = label + "{0} ({1})".format(project_name, platform_name)
+    else:
+        label = label + platform_name
+    return label
 
 
 def bazel_build_step(platform, project_name, http_config=None,
                      build_only=False, test_only=False):
-  pipeline_command = python_binary() + " bazelci.py runner"
-  if build_only:
-    pipeline_command = pipeline_command + " --build_only --save_but"
-  if test_only:
-    pipeline_command = pipeline_command + " --test_only"
-  if http_config:
-    pipeline_command = pipeline_command + " --http_config=" + http_config
-  label = create_label(platform_name(platform), project_name, build_only=build_only,
-                       test_only=test_only)
-  pipeline_command = pipeline_command + " --platform=" + platform
+    pipeline_command = python_binary() + " bazelci.py runner"
+    if build_only:
+        pipeline_command = pipeline_command + " --build_only --save_but"
+    if test_only:
+        pipeline_command = pipeline_command + " --test_only"
+    if http_config:
+        pipeline_command = pipeline_command + " --http_config=" + http_config
+    label = create_label(platform_name(platform), project_name, build_only=build_only,
+                         test_only=test_only)
+    pipeline_command = pipeline_command + " --platform=" + platform
 
-  return """
+    return """
   - label: \"{0}\"
     command: \"{1}\\n{2}\"
     agents:
@@ -587,8 +584,8 @@
 
 
 def publish_bazel_binaries_step():
-  command = python_binary() + " bazelci.py publish_binaries"
-  return """
+    command = python_binary() + " bazelci.py publish_binaries"
+    return """
   - label: \"Publish Bazel Binaries\"
     command: \"{0}\\n{1}\"
     agents:
@@ -596,182 +593,182 @@
 
 
 def print_bazel_postsubmit_pipeline(configs, http_config):
-  if not configs:
-    eprint("Bazel postsubmit pipeline configuration is empty.")
-  if set(configs.keys()) != set(supported_platforms()):
-    eprint("Bazel postsubmit pipeline needs to build Bazel on all " +
-           "supported platforms.")
+    if not configs:
+        eprint("Bazel postsubmit pipeline configuration is empty.")
+    if set(configs.keys()) != set(supported_platforms()):
+        eprint("Bazel postsubmit pipeline needs to build Bazel on all " +
+               "supported platforms.")
 
-  pipeline_steps = []
-  for platform, config in configs.items():
-    pipeline_steps.append(bazel_build_step(platform, "Bazel",
-                                           http_config, build_only=True))
-  pipeline_steps.append(wait_step())
+    pipeline_steps = []
+    for platform, config in configs.items():
+        pipeline_steps.append(bazel_build_step(platform, "Bazel",
+                                               http_config, build_only=True))
+    pipeline_steps.append(wait_step())
 
-  # todo move this to the end with a wait step.
-  pipeline_steps.append(publish_bazel_binaries_step())
+    # todo move this to the end with a wait step.
+    pipeline_steps.append(publish_bazel_binaries_step())
 
-  for platform, config in configs.items():
-    pipeline_steps.append(bazel_build_step(platform, "Bazel",
-                                           http_config, test_only=True))
-  for project, config in downstream_projects().items():
-    git_repository = config["git_repository"]
-    http_config = config.get("http_config", None)
-    pipeline_steps.append(upload_project_pipeline_step(project,
-                                                       git_repository, http_config))
+    for platform, config in configs.items():
+        pipeline_steps.append(bazel_build_step(platform, "Bazel",
+                                               http_config, test_only=True))
+    for project, config in downstream_projects().items():
+        git_repository = config["git_repository"]
+        http_config = config.get("http_config", None)
+        pipeline_steps.append(upload_project_pipeline_step(project,
+                                                           git_repository, http_config))
 
-  print_pipeline(pipeline_steps)
+    print_pipeline(pipeline_steps)
 
 
 def bazelci_builds_download_url(platform, build_number):
-  return "https://storage.googleapis.com/bazel-builds/artifacts/{0}/{1}/bazel".format(platform, build_number)
+    return "https://storage.googleapis.com/bazel-builds/artifacts/{0}/{1}/bazel".format(platform, build_number)
 
 
 def bazelci_builds_upload_url(platform, build_number):
-  return "gs://bazel-builds/artifacts/{0}/{1}/bazel".format(build_number, platform)
+    return "gs://bazel-builds/artifacts/{0}/{1}/bazel".format(build_number, platform)
 
 
 def bazelci_builds_metadata_url():
-  return "gs://bazel-builds/metadata/latest_fully_tested.json"
+    return "gs://bazel-builds/metadata/latest_fully_tested.json"
 
 
 def latest_generation_and_build_number():
-  output = None
-  attempt = 0
-  while attempt < 5:
-    output = subprocess.check_output(
-        ["gsutil", "stat", bazelci_builds_metadata_url()])
-    match = re.search("Generation:[ ]*([0-9]+)", output.decode("utf-8"))
-    if not match:
-      eprint("Couldn't parse generation. gsutil output format changed?")
-    generation = match.group(1)
+    output = None
+    attempt = 0
+    while attempt < 5:
+        output = subprocess.check_output(
+            ["gsutil", "stat", bazelci_builds_metadata_url()])
+        match = re.search("Generation:[ ]*([0-9]+)", output.decode("utf-8"))
+        if not match:
+            eprint("Couldn't parse generation. gsutil output format changed?")
+        generation = match.group(1)
 
-    match = re.search("Hash \(md5\):[ ]*([^\s]+)", output.decode("utf-8"))
-    if not match:
-      eprint("Couldn't parse md5 hash. gsutil output format changed?")
-    expected_md5hash = base64.b64decode(match.group(1))
+        match = re.search("Hash \(md5\):[ ]*([^\s]+)", output.decode("utf-8"))
+        if not match:
+            eprint("Couldn't parse md5 hash. gsutil output format changed?")
+        expected_md5hash = base64.b64decode(match.group(1))
 
-    output = subprocess.check_output(
-        ["gsutil", "cat", bazelci_builds_metadata_url()])
-    hasher = hashlib.md5()
-    hasher.update(output)
-    actual_md5hash = hasher.digest()
+        output = subprocess.check_output(
+            ["gsutil", "cat", bazelci_builds_metadata_url()])
+        hasher = hashlib.md5()
+        hasher.update(output)
+        actual_md5hash = hasher.digest()
 
-    if expected_md5hash == actual_md5hash:
-      break
-    attempt = attempt + 1
-  info = json.loads(output.decode("utf-8"))
-  return (generation, info["build_number"])
+        if expected_md5hash == actual_md5hash:
+            break
+        attempt = attempt + 1
+    info = json.loads(output.decode("utf-8"))
+    return (generation, info["build_number"])
 
 
 def sha256_hexdigest(filename):
-  sha256 = hashlib.sha256()
-  with open(filename, 'rb') as f:
-    for block in iter(lambda: f.read(65536), b''):
-      sha256.update(block)
-  return sha256.hexdigest()
+    sha256 = hashlib.sha256()
+    with open(filename, 'rb') as f:
+        for block in iter(lambda: f.read(65536), b''):
+            sha256.update(block)
+    return sha256.hexdigest()
 
 
 def try_publish_binaries(build_number, expected_generation):
-  tmpdir = None
-  try:
-    tmpdir = tempfile.mkdtemp()
-    info = {
-        "build_number": build_number,
-        "git_commit": os.environ["BUILDKITE_COMMIT"],
-        "platforms": {}
-    }
-    for platform in supported_platforms():
-      bazel_binary_path = download_bazel_binary(tmpdir, platform)
-      fail_if_nonzero(execute_command(["gsutil", "cp", "-a", "public-read", bazel_binary_path,
-                                       bazelci_builds_upload_url(platform, build_number)]))
-      info["platforms"][platform] = {
-          "url": bazelci_builds_download_url(platform, build_number),
-          "sha256": sha256_hexdigest(bazel_binary_path),
-      }
+    tmpdir = None
+    try:
+        tmpdir = tempfile.mkdtemp()
+        info = {
+            "build_number": build_number,
+            "git_commit": os.environ["BUILDKITE_COMMIT"],
+            "platforms": {}
+        }
+        for platform in supported_platforms():
+            bazel_binary_path = download_bazel_binary(tmpdir, platform)
+            fail_if_nonzero(execute_command(["gsutil", "cp", "-a", "public-read", bazel_binary_path,
+                                             bazelci_builds_upload_url(platform, build_number)]))
+            info["platforms"][platform] = {
+                "url": bazelci_builds_download_url(platform, build_number),
+                "sha256": sha256_hexdigest(bazel_binary_path),
+            }
 
-    info_file = os.path.join(tmpdir, "info.json")
-    with open(info_file, mode="w", encoding="utf-8") as fp:
-      json.dump(info, fp)
-    exitcode = execute_command(["gsutil", "-h", "x-goog-if-generation-match:" + expected_generation,
-                                "-h", "Content-Type:application/json", "cp", "-a",
-                                "public-read", info_file, bazelci_builds_metadata_url(platform)])
-    return exitcode == 0
-  finally:
-    if tmpdir:
-      shutil.rmtree(tmpdir)
+        info_file = os.path.join(tmpdir, "info.json")
+        with open(info_file, mode="w", encoding="utf-8") as fp:
+            json.dump(info, fp)
+        exitcode = execute_command(["gsutil", "-h", "x-goog-if-generation-match:" + expected_generation,
+                                    "-h", "Content-Type:application/json", "cp", "-a",
+                                    "public-read", info_file, bazelci_builds_metadata_url(platform)])
+        return exitcode == 0
+    finally:
+        if tmpdir:
+            shutil.rmtree(tmpdir)
 
 
 def publish_binaries():
-  '''
-  Publish Bazel binaries to GCS.
-  '''
-  attempt = 0
-  while attempt < 5:
-    latest_generation, latest_build_number = latest_generation_and_build_number()
+    '''
+    Publish Bazel binaries to GCS.
+    '''
+    attempt = 0
+    while attempt < 5:
+        latest_generation, latest_build_number = latest_generation_and_build_number()
 
-    current_build_number = os.environ.get("BUILDKITE_BUILD_NUMBER", None)
-    if not current_build_number:
-      eprint("Not running inside Buildkite")
-    current_build_number = int(current_build_number)
-    if current_build_number <= latest_build_number:
-      print(("Current build '{0}' is not newer than latest published '{1}'. " +
-             "Skipping publishing of binaries.").format(current_build_number,
-                                                        latest_build_number))
-      break
+        current_build_number = os.environ.get("BUILDKITE_BUILD_NUMBER", None)
+        if not current_build_number:
+            eprint("Not running inside Buildkite")
+        current_build_number = int(current_build_number)
+        if current_build_number <= latest_build_number:
+            print(("Current build '{0}' is not newer than latest published '{1}'. " +
+                   "Skipping publishing of binaries.").format(current_build_number,
+                                                              latest_build_number))
+            break
 
-    if try_publish_binaries(current_build_number, latest_generation):
-      print("Successfully updated '{0}' to binaries from build {1}."
-            .format(bazelci_builds_metadata_url(), current_build_number))
-      break
-    attempt = attempt + 1
+        if try_publish_binaries(current_build_number, latest_generation):
+            print("Successfully updated '{0}' to binaries from build {1}."
+                  .format(bazelci_builds_metadata_url(), current_build_number))
+            break
+        attempt = attempt + 1
 
 
 if __name__ == "__main__":
-  parser = argparse.ArgumentParser(
-      description='Bazel Continuous Integration Script')
+    parser = argparse.ArgumentParser(
+        description='Bazel Continuous Integration Script')
 
-  subparsers = parser.add_subparsers(dest="subparsers_name")
-  bazel_postsubmit_pipeline = subparsers.add_parser(
-      "bazel_postsubmit_pipeline")
-  bazel_postsubmit_pipeline.add_argument("--http_config", type=str)
-  bazel_postsubmit_pipeline.add_argument("--git_repository", type=str)
+    subparsers = parser.add_subparsers(dest="subparsers_name")
+    bazel_postsubmit_pipeline = subparsers.add_parser(
+        "bazel_postsubmit_pipeline")
+    bazel_postsubmit_pipeline.add_argument("--http_config", type=str)
+    bazel_postsubmit_pipeline.add_argument("--git_repository", type=str)
 
-  project_pipeline = subparsers.add_parser("project_pipeline")
-  project_pipeline.add_argument("--project_name", type=str)
-  project_pipeline.add_argument("--http_config", type=str)
-  project_pipeline.add_argument("--git_repository", type=str)
-  project_pipeline.add_argument(
-      "--use_but", type=bool, nargs="?", const=True)
+    project_pipeline = subparsers.add_parser("project_pipeline")
+    project_pipeline.add_argument("--project_name", type=str)
+    project_pipeline.add_argument("--http_config", type=str)
+    project_pipeline.add_argument("--git_repository", type=str)
+    project_pipeline.add_argument(
+        "--use_but", type=bool, nargs="?", const=True)
 
-  runner = subparsers.add_parser("runner")
-  runner.add_argument("--platform", action="store",
-                      choices=list(supported_platforms()))
-  runner.add_argument("--http_config", type=str)
-  runner.add_argument("--git_repository", type=str)
-  runner.add_argument("--use_but", type=bool, nargs="?", const=True)
-  runner.add_argument("--save_but", 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 = subparsers.add_parser("runner")
+    runner.add_argument("--platform", action="store",
+                        choices=list(supported_platforms()))
+    runner.add_argument("--http_config", type=str)
+    runner.add_argument("--git_repository", type=str)
+    runner.add_argument("--use_but", type=bool, nargs="?", const=True)
+    runner.add_argument("--save_but", 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 = subparsers.add_parser("publish_binaries")
+    runner = subparsers.add_parser("publish_binaries")
 
-  args = parser.parse_args()
+    args = parser.parse_args()
 
-  if args.subparsers_name == "bazel_postsubmit_pipeline":
-    configs = fetch_configs(args.http_config)
-    print_bazel_postsubmit_pipeline(configs.get("platforms", None),
-                                    args.http_config)
-  elif args.subparsers_name == "project_pipeline":
-    configs = fetch_configs(args.http_config)
-    print_project_pipeline(configs.get("platforms", None), args.project_name,
-                           args.http_config, args.git_repository, args.use_but)
-  elif args.subparsers_name == "runner":
-    configs = fetch_configs(args.http_config)
-    execute_commands(configs.get("platforms", None)[args.platform],
-                     args.platform, args.git_repository, args.use_but, args.save_but,
-                     args.build_only, args.test_only)
-  elif args.subparsers_name == "publish_binaries":
-    publish_binaries()
-  else:
-    parser.print_help()
+    if args.subparsers_name == "bazel_postsubmit_pipeline":
+        configs = fetch_configs(args.http_config)
+        print_bazel_postsubmit_pipeline(configs.get("platforms", None),
+                                        args.http_config)
+    elif args.subparsers_name == "project_pipeline":
+        configs = fetch_configs(args.http_config)
+        print_project_pipeline(configs.get("platforms", None), args.project_name,
+                               args.http_config, args.git_repository, args.use_but)
+    elif args.subparsers_name == "runner":
+        configs = fetch_configs(args.http_config)
+        execute_commands(configs.get("platforms", None)[args.platform],
+                         args.platform, args.git_repository, args.use_but, args.save_but,
+                         args.build_only, args.test_only)
+    elif args.subparsers_name == "publish_binaries":
+        publish_binaries()
+    else:
+        parser.print_help()
diff --git a/buildkite/setup.cfg b/buildkite/setup.cfg
deleted file mode 100644
index 204c84c..0000000
--- a/buildkite/setup.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[pep8]
-max-line-length = 80
-indent-size = 2