in tools/scripts/update_pending_hud.py [0:0]
def update_pending(branch: str = "master") -> None:
commit_index = s3_get_json(bucket_name, f'{branch}/index.json', [])
for idx, item in enumerate(commit_index):
commit_id = item['id']
title = item['message'].split("\n")[0]
timestamp = datetime.fromisoformat(item['timestamp']).replace(tzinfo=None)
if datetime.utcnow() - timestamp < timedelta(hours=5):
print(f"[{idx}/{len(commit_index)}] {title} ( {commit_id} ) is skipped as it was merged less than 5 hours ago")
continue
has_pending, has_updates = False, False
job_statuses = s3_get_json(bucket_name, f'{branch}/{commit_id}.json', {})
for (name, value) in job_statuses.items():
status = value['status']
build_url = value['build_url']
if status not in ['success', 'skipped', 'error', 'failure']:
circle_match = re.match("https://circleci.com/gh/pytorch/pytorch/(\\d+)\\?", build_url)
ghrun_match = re.match("https://github.com/pytorch/pytorch/runs/(\\d+)", build_url)
if circle_match is not None:
job_id = int(circle_match.group(1))
job_status = circleci_get_job_status("pytorch", "pytorch", job_id)
circle_status = map_circle_status(job_status['status'])
if status != circle_status:
job_statuses[name]['status'] = circle_status
has_updates = True
continue
if ghrun_match is not None:
run_id = int(ghrun_match.group(1))
check_status = gh_get_runs_status("pytorch", "pytorch", run_id)
ghrun_status = map_ghrun_status(check_status['status'])
if status != ghrun_status:
job_statuses[name]['status'] = ghrun_status
has_updates = True
continue
has_pending = True
if has_updates:
print(f"[{idx}/{len(commit_index)}] {title} ( {commit_id} ) has updates")
s3.Object(bucket_name, f'{branch}/{commit_id}.json').put(Body=json_dumps(job_statuses))
elif has_pending:
print(f"[{idx}/{len(commit_index)}] {title} ( {commit_id} ) has pending statuses")
else:
print(f"[{idx}/{len(commit_index)}] were processed")