def main()

in buildkite/bazel-bench/bazel_bench.py [0:0]


def main(args=None):
    if args is None:
        args = sys.argv[1:]

    parser = argparse.ArgumentParser(description="Bazel Bench CI Pipeline")
    parser.add_argument("--date", type=str)
    parser.add_argument("--bazel_bench_options", type=str, default="")
    parser.add_argument("--bucket", type=str, default="")
    parser.add_argument("--max_commits", type=int, default="")
    parser.add_argument("--report_name", type=str, default="report")
    parser.add_argument("--update_latest", action="store_true", default=False)
    parser.add_argument("--upload_report", action="store_true", default=False)
    parser.add_argument(
      "--bigquery_table",
      help="The BigQuery table to fetch data from. In the format: project:table_identifier.")
    parsed_args = parser.parse_args(args)

    date = (
        datetime.datetime.strptime(parsed_args.date, "%Y-%m-%d").date()
        if parsed_args.date
        else datetime.date.today()
    )

    bazel_clone_path = bazelci.clone_git_repository(
        BAZEL_REPOSITORY, STARTER_JOB_PLATFORM)
    bazel_commits_full_list, bazel_commits_to_benchmark = _get_bazel_commits(
        date, bazel_clone_path, parsed_args.max_commits)
    bazel_bench_ci_steps = []

    for project in PROJECTS:
        if not project["active"]:
            continue
        platforms = _get_platforms(
            project["bazelci_name"], whitelist=PLATFORMS_WHITELIST)
        
        for platform in platforms:
            if (project["bazel_bench_extra_options"] and platform in project["bazel_bench_extra_options"]):
                project_specific_bazel_bench_options = " ".join([project["bazel_bench_extra_options"][platform], parsed_args.bazel_bench_options])
            else:
                project_specific_bazel_bench_options = parsed_args.bazel_bench_options

            bazel_bench_ci_steps.append(
                _ci_step_for_platform_and_commits(
                    bazel_commits_to_benchmark, platform, project,
                    project_specific_bazel_bench_options, date, parsed_args.bucket,
                    parsed_args.bigquery_table
                )
            )
        _create_and_upload_metadata(
            project_label=project["storage_subdir"],
            project_source=project["git_repository"],
            command=project["bazel_command"],
            date=date,
            platforms=platforms,
            bucket=parsed_args.bucket,
            all_commits=bazel_commits_full_list,
            benchmarked_commits=bazel_commits_to_benchmark
        )

    bazel_bench_ci_steps.append("wait")
    for project in PROJECTS:
        if not project["active"]:
            continue
        # If all the above steps succeed, generate the report.
        bazel_bench_ci_steps.append(
            _report_generation_step(
                date, project["storage_subdir"],
                parsed_args.bucket, parsed_args.bigquery_table, REPORT_GENERATION_PLATFORM,
                parsed_args.report_name, parsed_args.update_latest, parsed_args.upload_report))

    bazelci.eprint(yaml.dump({"steps": bazel_bench_ci_steps}))
    subprocess.run(
        ["buildkite-agent", "pipeline", "upload"],
        input=yaml.dump({"steps": bazel_bench_ci_steps}, encoding="utf-8"))