Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def setup_api(self, api):
assert isinstance(api, PhabricatorAPI)
self.api = api
logger.info("Phabricator reporter enabled")
def apply_phab(self, hg, diff_id):
def has_revision(revision):
if not revision:
return False
try:
hg.identify(revision)
return True
except hglib.error.CommandError:
return False
phabricator_api = PhabricatorAPI(
api_key=get_secret("PHABRICATOR_TOKEN"), url=get_secret("PHABRICATOR_URL")
)
# Get the stack of patches
stack = phabricator_api.load_patches_stack(diff_id)
assert len(stack) > 0, "No patches to apply"
# Find the first unknown base revision
needed_stack = []
revisions = {}
for patch in reversed(stack):
needed_stack.insert(0, patch)
# Stop as soon as a base revision is available
if has_revision(patch.base_revision):
logger.info(
self,
reporters,
index_service,
queue_service,
phabricator_api,
zero_coverage_enabled=True,
update_build=True,
task_failures_ignored=[],
):
self.zero_coverage_enabled = zero_coverage_enabled
self.update_build = update_build
self.task_failures_ignored = task_failures_ignored
logger.info("Will ignore task failures", names=self.task_failures_ignored)
# Use share phabricator API client
assert isinstance(phabricator_api, PhabricatorAPI)
self.phabricator = phabricator_api
# Load reporters to use
self.reporters = reporters
if not self.reporters:
logger.warn("No reporters configured, this analysis will not be published")
# Always add debug reporter and Diff reporter
self.reporters["debug"] = DebugReporter(
output_dir=settings.taskcluster.results_dir
)
# Use TC services client
self.index_service = index_service
self.queue_service = queue_service
if influx_conf:
stats.auth(influx_conf)
# Load reporters
reporters = get_reporters(taskcluster.secrets["REPORTERS"])
# Load index service
index_service = taskcluster.get_service("index")
# Load queue service
queue_service = taskcluster.get_service("queue")
# Load Phabricator API
phabricator = taskcluster.secrets["PHABRICATOR"]
phabricator_reporting_enabled = "phabricator" in reporters
phabricator_api = PhabricatorAPI(phabricator["api_key"], phabricator["url"])
if phabricator_reporting_enabled:
reporters["phabricator"].setup_api(phabricator_api)
# Load unique revision
try:
if settings.autoland_group_id:
revision = Revision.from_autoland(
queue_service.task(settings.autoland_group_id), phabricator_api
)
else:
revision = Revision.from_try(
queue_service.task(settings.try_group_id), phabricator_api
)
except Exception as e:
# Report revision loading failure on production only
# On testing or dev instances, we can use different Phabricator
if influx_conf:
stats.auth(influx_conf)
# Load reporters
reporters = get_reporters(taskcluster.secrets["REPORTERS"])
# Load index service
index_service = taskcluster.get_service("index")
# Load queue service
queue_service = taskcluster.get_service("queue")
# Load Phabricator API
phabricator = taskcluster.secrets["PHABRICATOR"]
phabricator_reporting_enabled = "phabricator" in reporters
phabricator_api = PhabricatorAPI(phabricator["api_key"], phabricator["url"])
if phabricator_reporting_enabled:
reporters["phabricator"].setup_api(phabricator_api)
# Load unique revision
try:
if settings.autoland_group_id:
revision = Revision.from_autoland(
queue_service.task(settings.autoland_group_id), phabricator_api
)
else:
revision = Revision.from_try(
queue_service.task(settings.try_task_id), phabricator_api
)
except Exception as e:
# Report revision loading failure on production only
# On testing or dev instances, we can use different Phabricator
self,
reporters,
index_service,
queue_service,
phabricator_api,
zero_coverage_enabled=True,
update_build=True,
task_failures_ignored=[],
):
self.zero_coverage_enabled = zero_coverage_enabled
self.update_build = update_build
self.task_failures_ignored = task_failures_ignored
logger.info("Will ignore task failures", names=self.task_failures_ignored)
# Use share phabricator API client
assert isinstance(phabricator_api, PhabricatorAPI)
self.phabricator = phabricator_api
# Load reporters to use
self.reporters = reporters
if not self.reporters:
logger.warn("No reporters configured, this analysis will not be published")
# Always add debug reporter and Diff reporter
self.reporters["debug"] = DebugReporter(
output_dir=settings.taskcluster.results_dir
)
# Use TC services client
self.index_service = index_service
self.queue_service = queue_service