Skip to content

Commit 9c52ac2

Browse files
authored
fix: add cicd label for autorollers (#4984)
fixes #183617
1 parent 06185ed commit 9c52ac2

2 files changed

Lines changed: 49 additions & 75 deletions

File tree

app_dart/lib/src/request_handlers/github/webhook_subscription.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,11 @@ final class GithubWebhookSubscription extends SubscriptionHandler {
199199
final result = await _processPullRequestClosed(pullRequestEvent);
200200
return result.toResponse();
201201
case 'edited':
202+
await _addCICDForRollers(pullRequestEvent);
202203
await _checkForTests(pullRequestEvent);
203204
break;
204205
case 'opened':
206+
await _addCICDForRollers(pullRequestEvent);
205207
await _checkForTests(pullRequestEvent);
206208
await _tryReleaseApproval(pullRequestEvent);
207209
break;
@@ -567,6 +569,17 @@ final class GithubWebhookSubscription extends SubscriptionHandler {
567569
);
568570
}
569571

572+
Future<void> _addCICDForRollers(PullRequestEvent pullRequestEvent) async {
573+
final pr = pullRequestEvent.pullRequest!;
574+
final slug = pr.base!.repo!.slug();
575+
576+
if (config.rollerAccounts.contains(pr.user!.login) &&
577+
config.supportedRepos.contains(slug)) {
578+
final gitHubClient = await config.createGitHubClient(pullRequest: pr);
579+
await gitHubClient.issues.addLabelsToIssue(slug, pr.number!, ['CICD']);
580+
}
581+
}
582+
570583
Future<void> _checkForTests(PullRequestEvent pullRequestEvent) async {
571584
final pr = pullRequestEvent.pullRequest!;
572585
// We do not need to add test labels if this is an auto roller author.

app_dart/test/request_handlers/github/webhook_subscription_test.dart

Lines changed: 36 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -879,95 +879,56 @@ void main() {
879879
});
880880

881881
group(
882-
'Auto-roller accounts do not label Framework PR with test label or comment.',
882+
'Auto-roller accounts label Framework PR with CICD label, but no comment',
883883
() {
884-
final inputs = <String>{'skia-flutter-autoroll', 'dependabot'};
884+
final inputs = <String>{
885+
'skia-flutter-autoroll',
886+
'dependabot',
887+
'engine-flutter-autoroll',
888+
};
885889

886890
for (var element in inputs) {
887-
test(
888-
'Framework does not label PR with no tests label if author is $element',
889-
() async {
890-
const issueNumber = 123;
891+
test('if author is $element', () async {
892+
const issueNumber = 123;
891893

892-
tester.message = generateGithubWebhookMessage(
893-
action: 'opened',
894-
number: issueNumber,
895-
login: element,
896-
);
894+
tester.message = generateGithubWebhookMessage(
895+
action: 'opened',
896+
number: issueNumber,
897+
login: element,
898+
);
897899

898-
final slug = RepositorySlug('flutter', 'flutter');
900+
final slug = RepositorySlug('flutter', 'flutter');
899901

900-
when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer(
901-
(_) => Stream<PullRequestFile>.value(
902-
PullRequestFile()..filename = 'packages/flutter/blah.dart',
903-
),
904-
);
902+
when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer(
903+
(_) => Stream<PullRequestFile>.value(
904+
PullRequestFile()..filename = 'packages/flutter/blah.dart',
905+
),
906+
);
905907

906-
when(
907-
issuesService.listCommentsByIssue(slug, issueNumber),
908-
).thenAnswer(
909-
(_) => Stream<IssueComment>.value(
910-
IssueComment()..body = 'some other comment',
911-
),
912-
);
908+
when(
909+
issuesService.listCommentsByIssue(slug, issueNumber),
910+
).thenAnswer(
911+
(_) => Stream<IssueComment>.value(
912+
IssueComment()..body = 'some other comment',
913+
),
914+
);
913915

914-
await tester.post(webhook);
916+
await tester.post(webhook);
915917

916-
verifyNever(
917-
issuesService.addLabelsToIssue(slug, issueNumber, any),
918-
);
918+
verify(issuesService.addLabelsToIssue(slug, issueNumber, ['CICD']));
919919

920-
verifyNever(
921-
issuesService.createComment(
922-
slug,
923-
issueNumber,
924-
argThat(contains(config.missingTestsPullRequestMessageValue)),
925-
),
926-
);
927-
},
928-
);
920+
verifyNever(
921+
issuesService.createComment(
922+
slug,
923+
issueNumber,
924+
argThat(contains(config.missingTestsPullRequestMessageValue)),
925+
),
926+
);
927+
});
929928
}
930929
},
931930
);
932931

933-
test(
934-
'Framework does not label PR with no tests label if author is engine-flutter-autoroll',
935-
() async {
936-
const issueNumber = 123;
937-
938-
tester.message = generateGithubWebhookMessage(
939-
action: 'opened',
940-
number: issueNumber,
941-
login: 'engine-flutter-autoroll',
942-
);
943-
final slug = RepositorySlug('flutter', 'flutter');
944-
945-
when(pullRequestsService.listFiles(slug, issueNumber)).thenAnswer(
946-
(_) => Stream<PullRequestFile>.value(
947-
PullRequestFile()..filename = 'packages/flutter/blah.dart',
948-
),
949-
);
950-
951-
when(issuesService.listCommentsByIssue(slug, issueNumber)).thenAnswer(
952-
(_) => Stream<IssueComment>.value(
953-
IssueComment()..body = 'some other comment',
954-
),
955-
);
956-
957-
await tester.post(webhook);
958-
959-
verifyNever(issuesService.addLabelsToIssue(slug, issueNumber, any));
960-
961-
verifyNever(
962-
issuesService.createComment(
963-
slug,
964-
issueNumber,
965-
argThat(contains(config.missingTestsPullRequestMessageValue)),
966-
),
967-
);
968-
},
969-
);
970-
971932
test(
972933
'Framework does not label PR with no tests label if file is test exempt',
973934
() async {

0 commit comments

Comments
 (0)