Skip to content

Commit 72e15bd

Browse files
committed
Integrate build regression analysis into Push.classify_regressions
1 parent 0a48d1a commit 72e15bd

File tree

2 files changed

+19
-30
lines changed

2 files changed

+19
-30
lines changed

mozci/console/commands/push.py

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,6 @@ class ClassifyCommand(BasePushCommand):
310310
flag=False,
311311
default=3,
312312
),
313-
option(
314-
"disable-build-regressions",
315-
description="If set, skip the analysis of build tasks regressions.",
316-
flag=True,
317-
),
318313
]
319314

320315
def handle(self) -> None:
@@ -342,24 +337,6 @@ def handle(self) -> None:
342337
raise Exception("Provided --backfill-limit should be an int.")
343338

344339
for push in self.pushes:
345-
if self.option("disable-build-regressions"):
346-
self.line("Skipping build regressions analysis")
347-
else:
348-
try:
349-
tasks_to_retrigger = push.check_build_regressions()
350-
if not tasks_to_retrigger:
351-
self.line("No build task detected as potential regression")
352-
else:
353-
self.line(
354-
f"Retriggering {len(tasks_to_retrigger)} build regression that may introduce a build bustage"
355-
)
356-
for task in tasks_to_retrigger:
357-
task.retrigger(push)
358-
except Exception as e:
359-
self.line(
360-
f"<error> Couldn't run build regressions analysis on push {push.push_uuid}: {e}.</error>"
361-
)
362-
363340
try:
364341
classification, regressions, to_retrigger_or_backfill = push.classify(
365342
**classify_parameters
@@ -454,9 +431,7 @@ def _serialize_regressions(regressions):
454431
emails, matrix_room, push, previous, classification, regressions
455432
)
456433

457-
def retrigger_failures(
458-
self, push, groups, count, allowed_patterns, retrigger_limit
459-
):
434+
def retrigger_failures(self, push, groups, allowed_patterns, retrigger_limit):
460435
groups_with_failures = {}
461436
for name, failing_tasks in groups.items():
462437
filtered_failing_tasks = [
@@ -501,7 +476,6 @@ def backfill_and_retrigger_failures(
501476
self.retrigger_failures(
502477
push,
503478
to_retrigger_or_backfill.real_retrigger,
504-
classify_parameters.get("consistent_failures_counts", (2, 3))[1],
505479
allowed_patterns,
506480
retrigger_limit,
507481
)
@@ -511,7 +485,15 @@ def backfill_and_retrigger_failures(
511485
self.retrigger_failures(
512486
push,
513487
to_retrigger_or_backfill.intermittent_retrigger,
514-
classify_parameters.get("consistent_failures_counts", (2, 3))[0],
488+
allowed_patterns,
489+
retrigger_limit,
490+
)
491+
492+
# Retrigger build failures
493+
self.line("Retriggering failures that may introduce a build bustage")
494+
self.retrigger_failures(
495+
push,
496+
to_retrigger_or_backfill.build_retrigger,
515497
allowed_patterns,
516498
retrigger_limit,
517499
)

mozci/push.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class ToRetriggerOrBackfill:
6363
# each item being a single group, with its failing tasks
6464
real_retrigger: Dict[str, List[TestTask]]
6565
intermittent_retrigger: Dict[str, List[TestTask]]
66+
build_retrigger: Dict[str, List[Task]]
6667
backfill: Dict[str, List[TestTask]]
6768

6869

@@ -1125,7 +1126,7 @@ def get_likely_regressions(
11251126
if count == 0
11261127
)
11271128

1128-
def check_build_regressions(self) -> list[Task]:
1129+
def get_build_regressions(self) -> list[Task]:
11291130
logger.info(f"Fetched {len(self.tasks)} tasks for push {self.id}.")
11301131

11311132
# Try to identify a potential regressions from the failed build
@@ -1142,7 +1143,9 @@ def check_build_regressions(self) -> list[Task]:
11421143
logger.info("No build regression detected.")
11431144
return []
11441145

1145-
new_regressions = sum(past_occurrences == 0 for _, past_occurrences in build_regressions)
1146+
new_regressions = sum(
1147+
past_occurrences == 0 for _, past_occurrences in build_regressions
1148+
)
11461149
logger.info(
11471150
f"Detected {len(build_regressions)} build tasks that may contain a regression "
11481151
f"({new_regressions} were never seen before)."
@@ -1398,6 +1401,9 @@ def _map_failing_tasks(groups):
13981401
)
13991402
failures_to_be_backfilled.reverse()
14001403

1404+
# Look for build tasks failure
1405+
build_regressions = self.get_build_regressions()
1406+
14011407
# Output real, intermittent and unknown groupfailures
14021408
# along with their failing configurations + groupfailures to retrigger/backfill
14031409
return Regressions(
@@ -1409,6 +1415,7 @@ def _map_failing_tasks(groups):
14091415
intermittent_retrigger=_map_failing_tasks(
14101416
intermittent_failures_to_be_retriggered
14111417
),
1418+
build_retrigger=_map_failing_tasks(build_regressions),
14121419
backfill=_map_failing_tasks(failures_to_be_backfilled),
14131420
)
14141421

0 commit comments

Comments
 (0)