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