in sync/upstream.py [0:0]
def try_land_pr(self) -> bool:
logger.info("Checking if sync for bug %s can land" % self.bug)
if not self.status == "open":
logger.info("Sync is %s" % self.status)
return False
if not self.gecko_landed():
logger.info("Commits are not yet landed in gecko")
return False
if not self.pr:
logger.info("No upstream PR created")
return False
merge_sha = env.gh_wpt.merge_sha(self.pr)
if merge_sha:
logger.info("PR already merged")
self.merge_sha = merge_sha
self.finish("wpt-merged")
return False
try:
self.set_landed_status()
except Exception:
logger.warning("Failed setting status on PR for bug %s" % self.bug)
logger.info("Commit are landable; trying to land %s" % self.pr)
msg = None
check_status, checks = get_check_status(self.pr)
if check_status not in [CheckStatus.SUCCESS, CheckStatus.PENDING]:
details = ["Github PR %s" % env.gh_wpt.pr_url(self.pr)]
msg = ("Can't merge web-platform-tests PR due to failing upstream checks:\n%s" %
details)
elif not env.gh_wpt.is_mergeable(self.pr):
msg = "Can't merge web-platform-tests PR because it has merge conflicts"
elif not env.gh_wpt.is_approved(self.pr):
# This should be handled by the pr-bot
msg = "Can't merge web-platform-tests PR because it is missing approval"
else:
try:
merge_sha = env.gh_wpt.merge_pull(self.pr)
env.bz.comment(self.bug, "Upstream PR merged by %s" %
env.config["web-platform-tests"]["github"]["user"])
except GithubException as e:
if isinstance(e.data, dict):
err_msg = e.data.get("message", "Unknown GitHub Error")
else:
err_msg = e.data
msg = ("Merging PR %s failed.\nMessage: %s" %
(env.gh_wpt.pr_url(self.pr), err_msg))
except Exception as e:
msg = ("Merging PR %s failed.\nMessage: %s" %
(env.gh_wpt.pr_url(self.pr), e))
else:
self.merge_sha = merge_sha
self.finish("wpt-merged")
return True
if msg is not None:
logger.error(msg)
return False