def process_builds()

in torchci/log_classifier/download_jenkins.py [0:0]


def process_builds(obj):
    builds = obj["builds"]
    flattened_builds = []

    def handle_sub_build(sub_build, sha):
        if (
            "build" in sub_build
            and sub_build["build"]["_class"]
            == "com.tikal.jenkins.plugins.multijob.MultiJobBuild"
        ):
            for sub_sub_build in sub_build["build"]["subBuilds"]:
                handle_sub_build(sub_sub_build, sha)
            return

        flattened_builds.append(
            {
                "job_name": sub_build["jobName"],
                "status": sub_build["result"],
                "html_url": f"https://ci.pytorch.org/jenkins/{sub_build['url']}console",
                "sha": sha,
                "timestamp": sub_build["build"]["timestamp"],
                # build numbers are only unique within a job, so jobname + build number is unique
                "id": f'{sub_build["jobName"]}-{sub_build["build"]["number"]}',
            }
        )

    def handle_top_build(top_build):
        if len(top_build["changeSet"]["items"]) != 1:
            return
        sha = top_build["changeSet"]["items"][0]["commitId"]
        for sub_build in top_build["subBuilds"]:
            handle_sub_build(sub_build, sha)

    for build in builds:
        handle_top_build(build)

    return flattened_builds