def try_land_pr()

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