in sync/downstream.py [0:0]
def try_push_complete(git_gecko, git_wpt, try_push, sync):
if not try_push.taskgroup_id:
logger.error("No taskgroup id set for try push")
return
if not try_push.status == "complete":
# Ensure we don't have some old set of tasks
tasks = try_push.tasks()
if not tasks.complete(allow_unscheduled=True):
logger.info("Try push %s is not complete" % try_push.treeherder_url)
return
logger.info("Try push %s is complete" % try_push.treeherder_url)
try:
if not tasks.validate():
try_push.infra_fail = True
if len(sync.latest_busted_try_pushes()) > 5:
message = ("Too many busted try pushes. "
"Check the try results for infrastructure issues.")
sync.error = message
env.bz.comment(sync.bug, message)
try_push.status = "complete"
raise AbortError(message)
elif len(tasks.failed_builds()):
message = ("Try push had build failures")
sync.error = message
env.bz.comment(sync.bug, message)
try_push.status = "complete"
try_push.infra_fail = True
raise AbortError(message)
else:
logger.info(f"Try push {try_push!r} for PR {sync.pr} complete")
disabled = []
if tasks.has_failures():
if sync.affected_tests():
log_files = []
wpt_tasks = try_push.download_logs(tasks.wpt_tasks)
for task in wpt_tasks:
for run in task.get("status", {}).get("runs", []):
log = run.get("_log_paths", {}).get("wptreport.json")
if log:
log_files.append(log)
if not log_files:
raise ValueError("No log files found for try push %r" % try_push)
disabled = sync.update_metadata(log_files, stability=try_push.stability)
else:
env.bz.comment(sync.bug, ("The PR was not expected to affect any tests, "
"but the try push wasn't a success. "
"Check the try results for infrastructure "
"issues"))
# TODO: consider marking the push an error here so that we can't
# land without manual intervention
if try_push.stability and disabled:
logger.info("The following tests were disabled:\n%s" % "\n".join(disabled))
# TODO notify relevant people about test expectation changes, stability
env.bz.comment(sync.bug, ("The following tests were disabled "
"based on stability try push:\n %s" %
"\n".join(disabled)))
try_push.status = "complete"
sync.next_try_push()
finally:
sync.update_github_check()
else:
sync.next_try_push()
sync.update_github_check()
if sync.metadata_commit is not None and len(sync.gecko_commits) == 1:
# Apparently we only have a metadata commit and the actual change got rebased away
# In this case the metadata commit is probably wrong,
# and we just want to skip this sync.
sync.skip = True
if sync.landable_status == LandableStatus.ready:
sync.try_notify()