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