diff --git a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart index 944d8430ca..d7ddb8df59 100644 --- a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart +++ b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart @@ -199,9 +199,11 @@ final class GithubWebhookSubscription extends SubscriptionHandler { final result = await _processPullRequestClosed(pullRequestEvent); return result.toResponse(); case 'edited': + await _addCICDForRollers(pullRequestEvent); await _checkForTests(pullRequestEvent); break; case 'opened': + await _addCICDForRollers(pullRequestEvent); await _checkForTests(pullRequestEvent); await _tryReleaseApproval(pullRequestEvent); break; @@ -567,6 +569,17 @@ final class GithubWebhookSubscription extends SubscriptionHandler { ); } + Future _addCICDForRollers(PullRequestEvent pullRequestEvent) async { + final pr = pullRequestEvent.pullRequest!; + final slug = pr.base!.repo!.slug(); + + if (config.rollerAccounts.contains(pr.user!.login) && + config.supportedRepos.contains(slug)) { + final gitHubClient = await config.createGitHubClient(pullRequest: pr); + await gitHubClient.issues.addLabelsToIssue(slug, pr.number!, ['CICD']); + } + } + Future _checkForTests(PullRequestEvent pullRequestEvent) async { final pr = pullRequestEvent.pullRequest!; // We do not need to add test labels if this is an auto roller author. diff --git a/app_dart/test/request_handlers/github/webhook_subscription_test.dart b/app_dart/test/request_handlers/github/webhook_subscription_test.dart index 83501d5c66..a1bacf87fc 100644 --- a/app_dart/test/request_handlers/github/webhook_subscription_test.dart +++ b/app_dart/test/request_handlers/github/webhook_subscription_test.dart @@ -879,95 +879,56 @@ void main() { }); group( - 'Auto-roller accounts do not label Framework PR with test label or comment.', + 'Auto-roller accounts label Framework PR with CICD label, but no comment', () { - final inputs = {'skia-flutter-autoroll', 'dependabot'}; + final inputs = { + 'skia-flutter-autoroll', + 'dependabot', + 'engine-flutter-autoroll', + }; for (var element in inputs) { - test( - 'Framework does not label PR with no tests label if author is $element', - () async { - const issueNumber = 123; + test('if author is $element', () async { + const issueNumber = 123; - tester.message = generateGithubWebhookMessage( - action: 'opened', - number: issueNumber, - login: element, - ); + tester.message = generateGithubWebhookMessage( + action: 'opened', + number: issueNumber, + login: element, + ); - final slug = RepositorySlug('flutter', 'flutter'); + final slug = RepositorySlug('flutter', 'flutter'); - when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer( - (_) => Stream.value( - PullRequestFile()..filename = 'packages/flutter/blah.dart', - ), - ); + when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer( + (_) => Stream.value( + PullRequestFile()..filename = 'packages/flutter/blah.dart', + ), + ); - when( - issuesService.listCommentsByIssue(slug, issueNumber), - ).thenAnswer( - (_) => Stream.value( - IssueComment()..body = 'some other comment', - ), - ); + when( + issuesService.listCommentsByIssue(slug, issueNumber), + ).thenAnswer( + (_) => Stream.value( + IssueComment()..body = 'some other comment', + ), + ); - await tester.post(webhook); + await tester.post(webhook); - verifyNever( - issuesService.addLabelsToIssue(slug, issueNumber, any), - ); + verify(issuesService.addLabelsToIssue(slug, issueNumber, ['CICD'])); - verifyNever( - issuesService.createComment( - slug, - issueNumber, - argThat(contains(config.missingTestsPullRequestMessageValue)), - ), - ); - }, - ); + verifyNever( + issuesService.createComment( + slug, + issueNumber, + argThat(contains(config.missingTestsPullRequestMessageValue)), + ), + ); + }); } }, ); - test( - 'Framework does not label PR with no tests label if author is engine-flutter-autoroll', - () async { - const issueNumber = 123; - - tester.message = generateGithubWebhookMessage( - action: 'opened', - number: issueNumber, - login: 'engine-flutter-autoroll', - ); - final slug = RepositorySlug('flutter', 'flutter'); - - when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer( - (_) => Stream.value( - PullRequestFile()..filename = 'packages/flutter/blah.dart', - ), - ); - - when(issuesService.listCommentsByIssue(slug, issueNumber)).thenAnswer( - (_) => Stream.value( - IssueComment()..body = 'some other comment', - ), - ); - - await tester.post(webhook); - - verifyNever(issuesService.addLabelsToIssue(slug, issueNumber, any)); - - verifyNever( - issuesService.createComment( - slug, - issueNumber, - argThat(contains(config.missingTestsPullRequestMessageValue)), - ), - ); - }, - ); - test( 'Framework does not label PR with no tests label if file is test exempt', () async {