Title: [292056] trunk/Tools
Revision
292056
Author
jbed...@apple.com
Date
2022-03-29 12:17:10 -0700 (Tue, 29 Mar 2022)

Log Message

[Merge-Queue] Add Reviewers to ChangeLog files
https://bugs.webkit.org/show_bug.cgi?id=238396
<rdar://problem/90860335>

Reviewed by Dewei Zhu.

* Tools/CISupport/ews-build/factories.py:
(MergeQueueFactory.__init__): Add AddReviewerToChangeLog.
* Tools/CISupport/ews-build/factories_unittest.py:
(TestExpectedBuildSteps): Ditto.
* Tools/CISupport/ews-build/steps.py:
(AddReviewerToChangeLog.__init__):
(AddReviewerToChangeLog._files): List files in the pull-request.
(AddReviewerToChangeLog.run): Replace "NOBODY" with reviewers.
(AddReviewerToChangeLog.getResultSummary):
(AddReviewerToChangeLog.doStepIf): Skip step if patch or if reviewers are undefined.
(AddReviewerToChangeLog.hideStepIf): Hide step if skipped.
* Tools/CISupport/ews-build/steps_unittest.py:

Canonical link: https://commits.webkit.org/248992@main

Modified Paths

Diff

Modified: trunk/Tools/CISupport/ews-build/factories.py (292055 => 292056)


--- trunk/Tools/CISupport/ews-build/factories.py	2022-03-29 19:15:42 UTC (rev 292055)
+++ trunk/Tools/CISupport/ews-build/factories.py	2022-03-29 19:17:10 UTC (rev 292056)
@@ -24,7 +24,8 @@
 from buildbot.process import factory
 from buildbot.steps import trigger
 
-from steps import (AddReviewerToCommitMessage, ApplyPatch, ApplyWatchList, CheckOutPullRequest, CheckOutSource, CheckOutSpecificRevision, CheckChangeRelevance,
+from steps import (AddReviewerToCommitMessage, AddReviewerToChangeLog, ApplyPatch, ApplyWatchList, CheckOutPullRequest, CheckOutSource,
+                   CheckOutSpecificRevision, CheckChangeRelevance,
                    CheckPatchStatusOnEWSQueues, CheckStyle, CleanGitRepo, CompileJSC, CompileWebKit, ConfigureBuild, CreateLocalGITCommit,
                    DownloadBuiltProduct, ExtractBuiltProduct, FetchBranches, FindModifiedChangeLogs, FindModifiedLayoutTests,
                    InstallGtkDependencies, InstallWpeDependencies, KillOldProcesses, PrintConfiguration, PushCommitToWebKitRepo,
@@ -332,4 +333,6 @@
         self.addStep(CheckOutPullRequest())
         self.addStep(ValidateSquashed())
         self.addStep(AddReviewerToCommitMessage())
+        self.addStep(AddReviewerToChangeLog())
         self.addStep(ValidateCommitMessage())
+        self.addStep(ValidateChangeLogAndReviewer())

Modified: trunk/Tools/CISupport/ews-build/factories_unittest.py (292055 => 292056)


--- trunk/Tools/CISupport/ews-build/factories_unittest.py	2022-03-29 19:15:42 UTC (rev 292055)
+++ trunk/Tools/CISupport/ews-build/factories_unittest.py	2022-03-29 19:17:10 UTC (rev 292056)
@@ -640,7 +640,9 @@
             'checkout-pull-request',
             'validate-squashed',
             'add-reviewer-to-commit-message',
+            'add-reviewer-to-changelog',
             'validate-commit-message',
+            'validate-changelog-and-reviewer',
         ],
     }
 

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


--- trunk/Tools/CISupport/ews-build/steps.py	2022-03-29 19:15:42 UTC (rev 292055)
+++ trunk/Tools/CISupport/ews-build/steps.py	2022-03-29 19:17:10 UTC (rev 292056)
@@ -4692,6 +4692,54 @@
         return not self.doStepIf(step)
 
 
+class AddReviewerToChangeLog(steps.ShellSequence, ShellMixin, AddReviewerMixin):
+    name = 'add-reviewer-to-changelog'
+    haltOnFailure = True
+
+    def __init__(self, **kwargs):
+        super(AddReviewerToChangeLog, self).__init__(logEnviron=False, timeout=60, **kwargs)
+
+    def _files(self):
+        sourcestamp = self.build.getSourceStamp(self.getProperty('codebase', ''))
+        if sourcestamp and sourcestamp.changes:
+            return sourcestamp.changes[0].files
+        return []
+
+    def run(self, BufferLogObserverClass=logobserver.BufferLogObserver):
+        self.commands = []
+        for file in self._files():
+            if not file.startswith('+++') or not file.endswith('ChangeLog'):
+                continue
+            self.commands.append(util.ShellArg(
+                command=['sed', '-i', '', self.NOBODY_SED.format(self.reviewers()), file[4:]],
+                logname='stdio',
+                haltOnFailure=True,
+            ))
+
+        for command in [
+            ['git', 'add', '-A'],
+            ['git', 'commit', '--amend', '--date=now', '-C', 'HEAD'],
+        ]:
+            self.commands.append(util.ShellArg(command=command, logname='stdio', haltOnFailure=True))
+
+        self.env = self.environment()
+
+        return super(AddReviewerToChangeLog, self).run()
+
+    def getResultSummary(self):
+        if self.results == SKIPPED:
+            return {'step': 'No reviewer defined' if self.getProperty('github.number') else 'Patches are edited upon application'}
+        elif self.results == SUCCESS:
+            return {'step': f'Reviewed by {self.reviewers()}'}
+        return {'step': 'Failed to add reviewers to ChangeLogs'}
+
+    def doStepIf(self, step):
+        return self.getProperty('github.number') and self.getProperty('reviewers_full_names')
+
+    def hideStepIf(self, results, step):
+        return not self.doStepIf(step)
+
+
 class ValidateCommitMessage(shell.ShellCommand):
     name = 'validate-commit-message'
     haltOnFailure = True

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


--- trunk/Tools/CISupport/ews-build/steps_unittest.py	2022-03-29 19:15:42 UTC (rev 292055)
+++ trunk/Tools/CISupport/ews-build/steps_unittest.py	2022-03-29 19:17:10 UTC (rev 292056)
@@ -41,7 +41,7 @@
 from twisted.trial import unittest
 import send_email
 
-from steps import (AddReviewerToCommitMessage, AnalyzeAPITestsResults, AnalyzeCompileWebKitResults, AnalyzeJSCTestsResults,
+from steps import (AddReviewerToCommitMessage, AddReviewerToChangeLog, AnalyzeAPITestsResults, AnalyzeCompileWebKitResults, AnalyzeJSCTestsResults,
                    AnalyzeLayoutTestsResults, ApplyPatch, ApplyWatchList, ArchiveBuiltProduct, ArchiveTestResults, BugzillaMixin,
                    CheckOutPullRequest, CheckOutSource, CheckOutSpecificRevision, CheckChangeRelevance, CheckPatchStatusOnEWSQueues, CheckStyle,
                    CleanBuild, CleanUpGitIndexLock, CleanGitRepo, CleanWorkingDirectory, CompileJSC, CompileJSCWithoutChange,
@@ -5747,6 +5747,121 @@
         return self.runStep()
 
 
+class TestAddReviewerToChangeLog(BuildStepMixinAdditions, unittest.TestCase):
+    ENV = dict(
+        GIT_COMMITTER_NAME='WebKit Committer',
+        GIT_COMMITTER_EMAIL='commit...@webkit.org',
+        FILTER_BRANCH_SQUELCH_WARNING='1',
+    )
+
+    def setUp(self):
+        self.longMessage = True
+        Contributors.load = mock_load_contributors
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_skipped_patch(self):
+        self.setupStep(AddReviewerToChangeLog())
+        self.setProperty('patch_id', '1234')
+        self.expectOutcome(result=SKIPPED, state_string='Patches are edited upon application')
+        return self.runStep()
+
+    def test_success(self):
+        self.setupStep(AddReviewerToChangeLog())
+        AddReviewerToChangeLog._files = lambda x: ['+++ Tools/ChangeLog', '+++ Tools/CISupport/ews-build/steps.py']
+        self.setProperty('github.number', '1234')
+        self.setProperty('github.base.ref', 'main')
+        self.setProperty('github.head.ref', 'eng/pull-request-branch')
+        self.setProperty('reviewers_full_names', ['Aakash Jain'])
+        self.setProperty('owners', ['webkit-commit-queue'])
+        self.expectRemoteCommands(
+            ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['sed', '-i', '', 's/NOBODY (OO*PP*S!*)/Aakash Jain/g', 'Tools/ChangeLog'],
+            ) + 0, ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'add', '-A'],
+            ) + 0, ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'commit', '--amend', '--date=now', '-C', 'HEAD'],
+            ) + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='Reviewed by Aakash Jain')
+        return self.runStep()
+
+    def test_no_changelog(self):
+        self.setupStep(AddReviewerToChangeLog())
+        AddReviewerToChangeLog._files = lambda x: ['+++ Tools/CISupport/ews-build/steps.py']
+        self.setProperty('github.number', '1234')
+        self.setProperty('github.base.ref', 'main')
+        self.setProperty('github.head.ref', 'eng/pull-request-branch')
+        self.setProperty('reviewers_full_names', ['Aakash Jain'])
+        self.setProperty('owners', ['webkit-commit-queue'])
+        self.expectRemoteCommands(
+            ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'add', '-A'],
+            ) + 0, ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'commit', '--amend', '--date=now', '-C', 'HEAD'],
+            ) + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='Reviewed by Aakash Jain')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(AddReviewerToChangeLog())
+        AddReviewerToChangeLog._files = lambda x: ['+++ Tools/CISupport/ews-build/steps.py']
+        self.setProperty('github.number', '1234')
+        self.setProperty('github.base.ref', 'main')
+        self.setProperty('github.head.ref', 'eng/pull-request-branch')
+        self.setProperty('reviewers_full_names', ['Aakash Jain'])
+        self.setProperty('owners', ['webkit-commit-queue'])
+        self.expectRemoteCommands(
+            ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'add', '-A'],
+            ) + 0, ExpectShell(
+                workdir='wkdir',
+                logEnviron=False,
+                env=self.ENV,
+                timeout=60,
+                command=['git', 'commit', '--amend', '--date=now', '-C', 'HEAD'],
+            ) + 2,
+        )
+        self.expectOutcome(result=FAILURE, state_string='Failed to add reviewers to ChangeLogs')
+        return self.runStep()
+
+    def test_no_reviewers(self):
+        self.setupStep(AddReviewerToChangeLog())
+        self.setProperty('github.number', '1234')
+        self.setProperty('github.base.ref', 'main')
+        self.setProperty('github.head.ref', 'eng/pull-request-branch')
+        self.setProperty('reviewers_full_names', [])
+        self.expectOutcome(result=SKIPPED, state_string='No reviewer defined')
+        return self.runStep()
+
+
 class TestValidateCommitMessage(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
         self.longMessage = True

Modified: trunk/Tools/ChangeLog (292055 => 292056)


--- trunk/Tools/ChangeLog	2022-03-29 19:15:42 UTC (rev 292055)
+++ trunk/Tools/ChangeLog	2022-03-29 19:17:10 UTC (rev 292056)
@@ -1,5 +1,26 @@
 2022-03-29  Jonathan Bedard  <jbed...@apple.com>
 
+        [Merge-Queue] Add Reviewers to ChangeLog files
+        https://bugs.webkit.org/show_bug.cgi?id=238396
+        <rdar://problem/90860335>
+
+        Reviewed by Dewei Zhu.
+
+        * CISupport/ews-build/factories.py:
+        (MergeQueueFactory.__init__): Add AddReviewerToChangeLog.
+        * CISupport/ews-build/factories_unittest.py:
+        (TestExpectedBuildSteps): Ditto.
+        * CISupport/ews-build/steps.py:
+        (AddReviewerToChangeLog.__init__):
+        (AddReviewerToChangeLog._files): List files in the pull-request.
+        (AddReviewerToChangeLog.run): Replace "NOBODY" with reviewers.
+        (AddReviewerToChangeLog.getResultSummary):
+        (AddReviewerToChangeLog.doStepIf): Skip step if patch or if reviewers are undefined.
+        (AddReviewerToChangeLog.hideStepIf): Hide step if skipped.
+        * CISupport/ews-build/steps_unittest.py:
+
+2022-03-29  Jonathan Bedard  <jbed...@apple.com>
+
         [Merge-Queue] Add Reviewers to commit message
         https://bugs.webkit.org/show_bug.cgi?id=238354
         <rdar://problem/90800671>
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to