Title: [281761] trunk/Tools
Revision
281761
Author
aakash_j...@apple.com
Date
2021-08-30 09:02:14 -0700 (Mon, 30 Aug 2021)

Log Message

ews might mark build as successful if JSC tests fail to run
https://bugs.webkit.org/show_bug.cgi?id=229634

Reviewed by Jonathan Bedard.

* CISupport/ews-build/steps.py:
(RunJSCTestsWithoutPatch.evaluateCommand):
(AnalyzeJSCTestsResults.start):
(AnalyzeJSCTestsResults.retry_build): Method to retry build.
(AnalyzeJSCTestsResults.report_failure):
* CISupport/ews-build/steps_unittest.py: Added unit-tests.

Modified Paths

Diff

Modified: trunk/Tools/CISupport/ews-build/steps.py (281760 => 281761)


--- trunk/Tools/CISupport/ews-build/steps.py	2021-08-30 15:56:19 UTC (rev 281760)
+++ trunk/Tools/CISupport/ews-build/steps.py	2021-08-30 16:02:14 UTC (rev 281761)
@@ -1961,7 +1961,9 @@
     prefix = 'jsc_clean_tree_'
 
     def evaluateCommand(self, cmd):
-        return shell.Test.evaluateCommand(self, cmd)
+        rc = shell.Test.evaluateCommand(self, cmd)
+        self.setProperty('clean_tree_run_status', rc)
+        return rc
 
 
 class AnalyzeJSCTestsResults(buildstep.BuildStep):
@@ -1990,8 +1992,8 @@
 
         new_stress_failures = stress_failures_with_patch - clean_tree_stress_failures
         new_binary_failures = binary_failures_with_patch - clean_tree_binary_failures
-        new_stress_failures_to_display = ', '.join(sorted(list(new_stress_failures))[:self.NUM_FAILURES_TO_DISPLAY])
-        new_binary_failures_to_display = ', '.join(sorted(list(new_binary_failures))[:self.NUM_FAILURES_TO_DISPLAY])
+        self.new_stress_failures_to_display = ', '.join(sorted(list(new_stress_failures))[:self.NUM_FAILURES_TO_DISPLAY])
+        self.new_binary_failures_to_display = ', '.join(sorted(list(new_binary_failures))[:self.NUM_FAILURES_TO_DISPLAY])
 
         self._addToLog('stderr', '\nFailures in first run: {}'.format((list(first_run_binary_failures) + list(first_run_stress_failures))[:self.NUM_FAILURES_TO_DISPLAY]))
         self._addToLog('stderr', '\nFailures in second run: {}'.format((list(second_run_binary_failures) + list(second_run_stress_failures))[:self.NUM_FAILURES_TO_DISPLAY]))
@@ -1998,23 +2000,18 @@
         self._addToLog('stderr', '\nFlaky Tests: {}'.format(flaky_failures_string))
         self._addToLog('stderr', '\nFailures on clean tree: {}'.format(clean_tree_failures_string))
 
+        if (not first_run_stress_failures) and (not first_run_binary_failures) and (not second_run_stress_failures) and (not second_run_binary_failures):
+            # If we've made it here, then jsc-tests and re-run-jsc-tests failed, which means
+            # there should have been some test failures. Otherwise there is some unexpected issue.
+            clean_tree_run_status = self.getProperty('clean_tree_run_status', FAILURE)
+            if clean_tree_run_status == SUCCESS:
+                return self.report_failure(set(), set())
+            # TODO: email EWS admins
+            return self.retry_build('Unexpected infrastructure issue, retrying build')
+
         if new_stress_failures or new_binary_failures:
-            self._addToLog('stderr', '\nNew binary failures: {}.\nNew stress test failures: {}\n'.format(new_binary_failures_to_display, new_stress_failures_to_display))
-            self.finished(FAILURE)
-            self.build.results = FAILURE
-            message = ''
-            if new_binary_failures:
-                pluralSuffix = 's' if len(new_binary_failures) > 1 else ''
-                message = 'Found {} new JSC binary failure{}: {}'.format(len(new_binary_failures), pluralSuffix, new_binary_failures_to_display)
-            if new_stress_failures:
-                if message:
-                    message += ', '
-                pluralSuffix = 's' if len(new_stress_failures) > 1 else ''
-                message += 'Found {} new JSC stress test failure{}: {}'.format(len(new_stress_failures), pluralSuffix, new_stress_failures_to_display)
-                if len(new_stress_failures) > self.NUM_FAILURES_TO_DISPLAY:
-                    message += ' ...'
-            self.descriptionDone = message
-            self.build.buildFinished([message], FAILURE)
+            self._addToLog('stderr', '\nNew binary failures: {}.\nNew stress test failures: {}\n'.format(self.new_binary_failures_to_display, self.new_stress_failures_to_display))
+            return self.report_failure(new_binary_failures, new_stress_failures)
         else:
             self._addToLog('stderr', '\nNo new failures\n')
             self.finished(SUCCESS)
@@ -2035,6 +2032,33 @@
             self.build.buildFinished([message], SUCCESS)
         return defer.succeed(None)
 
+    def retry_build(self, message):
+        self.descriptionDone = message
+        self.finished(RETRY)
+        self.build.buildFinished([message], RETRY)
+        return defer.succeed(None)
+
+    def report_failure(self, new_binary_failures, new_stress_failures):
+        message = ''
+        if (not new_binary_failures) and (not new_stress_failures):
+            message = 'Found unexpected failure with patch'
+        if new_binary_failures:
+            pluralSuffix = 's' if len(new_binary_failures) > 1 else ''
+            message = 'Found {} new JSC binary failure{}: {}'.format(len(new_binary_failures), pluralSuffix, self.new_binary_failures_to_display)
+        if new_stress_failures:
+            if message:
+                message += ', '
+            pluralSuffix = 's' if len(new_stress_failures) > 1 else ''
+            message += 'Found {} new JSC stress test failure{}: {}'.format(len(new_stress_failures), pluralSuffix, self.new_stress_failures_to_display)
+            if len(new_stress_failures) > self.NUM_FAILURES_TO_DISPLAY:
+                message += ' ...'
+
+        self.finished(FAILURE)
+        self.build.results = FAILURE
+        self.descriptionDone = message
+        self.build.buildFinished([message], FAILURE)
+        return defer.succeed(None)
+
     @defer.inlineCallbacks
     def _addToLog(self, logName, message):
         try:

Modified: trunk/Tools/CISupport/ews-build/steps_unittest.py (281760 => 281761)


--- trunk/Tools/CISupport/ews-build/steps_unittest.py	2021-08-30 15:56:19 UTC (rev 281760)
+++ trunk/Tools/CISupport/ews-build/steps_unittest.py	2021-08-30 16:02:14 UTC (rev 281761)
@@ -1653,7 +1653,25 @@
         self.expectOutcome(result=SUCCESS, state_string='Passed JSC tests')
         return self.runStep()
 
+    def test_unexpected_infra_issue(self):
+        self.configureStep()
+        self.setProperty('jsc_stress_test_failures', [])
+        self.setProperty('jsc_rerun_stress_test_failures', [])
+        self.setProperty('jsc_clean_tree_stress_test_failures', [])
+        self.setProperty('clean_tree_run_status', FAILURE)
+        self.expectOutcome(result=RETRY, state_string='Unexpected infrastructure issue, retrying build (retry)')
+        return self.runStep()
 
+    def test_patch_breaking_jsc_test_suite(self):
+        self.configureStep()
+        self.setProperty('jsc_stress_test_failures', [])
+        self.setProperty('jsc_rerun_stress_test_failures', [])
+        self.setProperty('jsc_clean_tree_stress_test_failures', [])
+        self.setProperty('clean_tree_run_status', SUCCESS)
+        self.expectOutcome(result=FAILURE, state_string='Found unexpected failure with patch (failure)')
+        return self.runStep()
+
+
 class TestRunWebKitTests(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
         self.longMessage = True

Modified: trunk/Tools/ChangeLog (281760 => 281761)


--- trunk/Tools/ChangeLog	2021-08-30 15:56:19 UTC (rev 281760)
+++ trunk/Tools/ChangeLog	2021-08-30 16:02:14 UTC (rev 281761)
@@ -1,3 +1,17 @@
+2021-08-30  Aakash Jain  <aakash_j...@apple.com>
+
+        ews might mark build as successful if JSC tests fail to run
+        https://bugs.webkit.org/show_bug.cgi?id=229634
+
+        Reviewed by Jonathan Bedard.
+
+        * CISupport/ews-build/steps.py:
+        (RunJSCTestsWithoutPatch.evaluateCommand):
+        (AnalyzeJSCTestsResults.start):
+        (AnalyzeJSCTestsResults.retry_build): Method to retry build.
+        (AnalyzeJSCTestsResults.report_failure):
+        * CISupport/ews-build/steps_unittest.py: Added unit-tests.
+
 2021-08-30  Lauro Moura  <lmo...@igalia.com>
 
         [WPE][webkitpy] Sanitize browser name testcase environment
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to