def publish_analysis_phabricator()

in bot/code_review_bot/analysis.py [0:0]


def publish_analysis_phabricator(payload, phabricator_api):
    mode, build, extras = payload

    if build.target_phid is None:
        logger.warning(
            "No Phabricator build target, so no publication", mode=mode, build=build
        )
        return

    logger.info("Publishing a Phabricator build update", mode=mode, build=build)

    if mode == "fail:general":
        failure = UnitResult(
            namespace="code-review",
            name="general",
            result=UnitResultState.Broken,
            details="WARNING: An error occurred in the code review bot.\n\n```{}```".format(
                extras["message"]
            ),
            format="remarkup",
            duration=extras.get("duration", 0),
        )
        phabricator_api.update_build_target(
            build.target_phid, BuildState.Fail, unit=[failure]
        )

    elif mode == "fail:mercurial":
        extra_content = ""
        if build.missing_base_revision:
            extra_content = f" because the parent revision ({build.base_revision}) does not exist on mozilla-unified. If possible, you should publish that revision"

        failure = UnitResult(
            namespace="code-review",
            name="mercurial",
            result=UnitResultState.Fail,
            details="WARNING: The code review bot failed to apply your patch{}.\n\n```{}```".format(
                extra_content, extras["message"]
            ),
            format="remarkup",
            duration=extras.get("duration", 0),
        )
        phabricator_api.update_build_target(
            build.target_phid, BuildState.Fail, unit=[failure]
        )

    elif mode == "test_result":
        result = UnitResult(
            namespace="code-review",
            name=extras["name"],
            result=extras["result"],
            details=extras["details"],
        )
        phabricator_api.update_build_target(
            build.target_phid, BuildState.Work, unit=[result]
        )

    elif mode == "success":
        if build.missing_base_revision:
            # Publish a warning message on Phabricator in the Unit Tests section,
            # as done for other warnings/errors from the bot, since this section
            # is centered and at the top of the page.
            warning = UnitResult(
                namespace="code-review",
                name="mercurial",
                result=UnitResultState.Unsound,
                details=f"WARNING: The base revision of your patch is not available in the current repository.\nYour patch has been rebased on central (revision {build.actual_base_revision}): issues may be positioned at the wrong lines.",
            )
            phabricator_api.update_build_target(
                build.target_phid, BuildState.Work, unit=[warning]
            )
            logger.debug(
                "Missing base revision on PhabricatorBuild, adding a warning to Unit Tests section on Phabricator"
            )

        phabricator_api.create_harbormaster_uri(
            build.target_phid,
            "treeherder",
            "CI (Treeherder) Jobs",
            extras["treeherder_url"],
        )

    elif mode == "work":
        phabricator_api.update_build_target(build.target_phid, BuildState.Work)
        logger.info("Published public build as working", build=str(build))

    else:
        logger.warning("Unsupported publication", mode=mode, build=build)