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/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