[ews] commit queue should skip building and testing for rollout patches
https://bugs.webkit.org/show_bug.cgi?id=208329

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/steps.py:
(BugzillaMixin._is_patch_obsolete): Set rollout property appropriately.
(CompileWebKit.doStepIf): Skip tests for rollout patches on commit-queue.
(RunWebKit1Tests.doStepIf): Ditto.
* BuildSlaveSupport/ews-build/steps_unittest.py:
(TestCompileWebKit.test_skip_for_rollout_patches_on_commit_queue): Added unit-test.
(TestRunWebKit1Tests.test_skip_for_rollout_patches_on_commit_queue): Ditto.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@257636 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Tools/BuildSlaveSupport/ews-build/steps.py b/Tools/BuildSlaveSupport/ews-build/steps.py
index b431b45..f688495 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps.py
@@ -325,6 +325,7 @@
     addURLs = False
     bug_open_statuses = ['UNCONFIRMED', 'NEW', 'ASSIGNED', 'REOPENED']
     bug_closed_statuses = ['RESOLVED', 'VERIFIED', 'CLOSED']
+    rollout_preamble = 'ROLLOUT of r'
 
     @defer.inlineCallbacks
     def _addToLog(self, logName, message):
@@ -388,6 +389,9 @@
 
         patch_author = patch_json.get('creator')
         self.setProperty('patch_author', patch_author)
+        patch_title = patch_json.get('summary')
+        if patch_title.startswith(self.rollout_preamble):
+            self.setProperty('rollout', True)
         if self.addURLs:
             self.addURL('Patch by: {}'.format(patch_author), '')
         return patch_json.get('is_obsolete')
@@ -1201,6 +1205,9 @@
         self.skipUpload = skipUpload
         super(CompileWebKit, self).__init__(logEnviron=False, **kwargs)
 
+    def doStepIf(self, step):
+        return not (self.getProperty('rollout') and self.getProperty('buildername', '').lower() == 'commit-queue')
+
     def start(self):
         platform = self.getProperty('platform')
         buildOnly = self.getProperty('buildOnly')
@@ -1585,6 +1592,7 @@
 
     def __init__(self, **kwargs):
         shell.Test.__init__(self, logEnviron=False, **kwargs)
+        self.incorrectLayoutLines = []
 
     def start(self):
         self.log_observer = logobserver.BufferLogObserver(wantStderr=True)
@@ -1592,7 +1600,6 @@
         self.log_observer_json = logobserver.BufferLogObserver()
         self.addLogObserver('json', self.log_observer_json)
 
-        self.incorrectLayoutLines = []
         platform = self.getProperty('platform')
         appendCustomBuildFlags(self, platform, self.getProperty('fullPlatform'))
         additionalArguments = self.getProperty('additionalArguments')
@@ -1892,6 +1899,9 @@
         self.setProperty('use-dump-render-tree', True)
         return RunWebKitTests.start(self)
 
+    def doStepIf(self, step):
+        return not (self.getProperty('rollout') and self.getProperty('buildername', '').lower() == 'commit-queue')
+
 
 class ArchiveBuiltProduct(shell.ShellCommand):
     command = ['python', 'Tools/BuildSlaveSupport/built-product-archive',
diff --git a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
index 5387340..e4681bf 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
@@ -984,6 +984,14 @@
         self.expectOutcome(result=FAILURE, state_string='Failed to compile WebKit')
         return self.runStep()
 
+    def test_skip_for_rollout_patches_on_commit_queue(self):
+        self.setupStep(CompileWebKit())
+        self.setProperty('buildername', 'Commit-Queue')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('rollout', True)
+        self.expectOutcome(result=SKIPPED, state_string='Compiled WebKit (skipped)')
+        return self.runStep()
+
 
 class TestCompileWebKitToT(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
@@ -1739,6 +1747,15 @@
         self.expectOutcome(result=FAILURE, state_string='layout-tests (failure)')
         return self.runStep()
 
+    def test_skip_for_rollout_patches_on_commit_queue(self):
+        self.setupStep(RunWebKit1Tests())
+        self.setProperty('buildername', 'Commit-Queue')
+        self.setProperty('fullPlatform', 'mac')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('rollout', True)
+        self.expectOutcome(result=SKIPPED, state_string='layout-tests (skipped)')
+        return self.runStep()
+
 
 class TestAnalyzeLayoutTestsResults(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 9aea2f4..f12aa6b 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,18 @@
+2020-02-28  Aakash Jain  <aakash_jain@apple.com>
+
+        [ews] commit queue should skip building and testing for rollout patches
+        https://bugs.webkit.org/show_bug.cgi?id=208329
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/steps.py:
+        (BugzillaMixin._is_patch_obsolete): Set rollout property appropriately.
+        (CompileWebKit.doStepIf): Skip tests for rollout patches on commit-queue.
+        (RunWebKit1Tests.doStepIf): Ditto.
+        * BuildSlaveSupport/ews-build/steps_unittest.py:
+        (TestCompileWebKit.test_skip_for_rollout_patches_on_commit_queue): Added unit-test.
+        (TestRunWebKit1Tests.test_skip_for_rollout_patches_on_commit_queue): Ditto.
+
 2020-02-28  Daniel Bates  <dabates@apple.com>
 
         Update my watch list preferences and contributor's entry.