def start_bisecting(project_name, platform_name, git_repo_location, commits_list, needs_clean, repeat_times): left = 0 right = len(commits_list) while left < right: mid = (left + right) // 2 mid_commit = commits_list[mid] bazelci.print_expanded_group(":bazel: Test with Bazel built at " + mid_commit) bazelci.eprint("Remaining suspected commits are:\n") for i in range(left, right): bazelci.eprint(commits_list[i] + "\n") if test_with_bazel_at_commit( project_name, platform_name, git_repo_location, mid_commit, needs_clean, repeat_times ): bazelci.print_collapsed_group(":bazel: Succeeded at " + mid_commit) left = mid + 1 else: bazelci.print_collapsed_group(":bazel: Failed at " + mid_commit) right = mid bazelci.print_expanded_group(":bazel: Bisect Result") if right == len(commits_list): bazelci.eprint("first bad commit not found, every commit succeeded.") else: first_bad_commit = commits_list[right] bazelci.eprint("first bad commit is " + first_bad_commit) os.chdir(BAZEL_REPO_DIR) bazelci.execute_command(["git", "--no-pager", "log", "-n", "1", first_bad_commit])
def main(argv=None): org = os.getenv("BUILDKITE_ORGANIZATION_SLUG") repo = os.getenv("BUILDKITE_REPO") settings = DOCGEN_SETTINGS.get(org, {}).get(repo) if not settings: bazelci.eprint("docgen is not enabled for '%s' org and repository %s", org, repo) return 1 bazelci.print_expanded_group(":bazel: Building documentation from {}".format(repo)) try: bazelci.execute_command( ["bazel", "build"] + DEFAULT_FLAGS + settings.build_flags + [settings.target] ) except subprocess.CalledProcessError as e: bazelci.eprint("Bazel failed with exit code {}".format(e.returncode)) return e.returncode bucket = "gs://{}".format(settings.gcs_bucket) dest = get_destination(bucket, settings.gcs_subdir) bazelci.print_expanded_group(":bazel: Uploading documentation to {}".format(dest)) try: bazelci.execute_command( ["gsutil", "-m", "rsync", "-r", "-c", "-d", settings.output_dir, dest] ) bazelci.execute_command( ["gsutil", "web", "set", "-m", "index.html", "-e", "404.html", bucket] ) # TODO: does not work with 404 pages in sub directories except subprocess.CalledProcessError as e: bazelci.eprint("Upload to GCS failed with exit code {}".format(e.returncode)) return e.returncode bazelci.print_collapsed_group(":bazel: Publishing documentation URL") message = "You can find the documentation at {}".format(get_url(settings)) bazelci.execute_command( ["buildkite-agent", "annotate", "--style=info", message, "--context", "doc_url"] ) bazelci.execute_command( ["buildkite-agent", "meta-data", "set", "message", message] ) return 0