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)