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

    parser = argparse.ArgumentParser(description="Bazel Bench CI Pipeline")
    parser.add_argument("--day", type=str)
    parser.add_argument("--bazel_bench_options", type=str, default="")
    parsed_args = parser.parse_args(args)

    bazel_bench_ci_steps = []
    day = (datetime.datetime.strptime(parsed_args.day, "%Y-%m-%d").date()
           if parsed_args.day else datetime.date.today())
    bazel_commits = None
    for project in PROJECTS:
        for platform in _get_platforms(project["name"]):
            # bazel-bench doesn't support Windows for now.
            if platform in ["windows"]:
                continue

            # When running on the first platform, get the bazel commits.
            # The bazel commits should be the same regardless of platform.
            if not bazel_commits:
                bazel_clone_path = bazelci.clone_git_repository(
                    BAZEL_REPOSITORY, platform)
                bazel_commits = _get_bazel_commits(day, bazel_clone_path)

            bazel_bench_ci_steps.append(
                _ci_step_for_platform_and_commits(
                    bazel_commits, platform, project,
                    parsed_args.bazel_bench_options))

    bazelci.eprint(yaml.dump({"steps": bazel_bench_ci_steps}))
    buildkite_pipeline_cmd = "cat <<EOF | buildkite-agent pipeline upload\n%s\nEOF" % yaml.dump(
        {"steps": bazel_bench_ci_steps})
    subprocess.call(buildkite_pipeline_cmd, shell=True)
def clone_git_repository(project_name, task_name):
    platform_name = get_platform(project_name, task_name)
    git_repository = bazelci.DOWNSTREAM_PROJECTS[project_name][
        "git_repository"]
    git_commit = bazelci.get_last_green_commit(
        git_repository,
        bazelci.DOWNSTREAM_PROJECTS[project_name]["pipeline_slug"])
    return bazelci.clone_git_repository(git_repository, platform_name,
                                        git_commit)
Esempio n. 3
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)
    parsed_args = parser.parse_args(args)

    bazel_bench_ci_steps = []
    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)

    for project in PROJECTS:
        if not project["active"]:
            continue
        platforms = _get_platforms(project["name"],
                                   whitelist=PLATFORMS_WHITELIST)
        for platform in platforms:
            bazel_bench_ci_steps.append(
                _ci_step_for_platform_and_commits(
                    bazel_commits_to_benchmark, platform, project,
                    parsed_args.bazel_bench_options, date, parsed_args.bucket))
        _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")
        # If all the above steps succeed, generate the report.
        bazel_bench_ci_steps.append(
            _report_generation_step(date, project["storage_subdir"],
                                    parsed_args.bucket,
                                    REPORT_GENERATION_PLATFORM,
                                    parsed_args.report_name,
                                    parsed_args.update_latest))

        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"))