From fcf4cf70fd30eaad40f7332d1b7cd2acde950f7a Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:51:21 -0800 Subject: [PATCH 1/2] Handle override label in retry for packages repository (#3403) Fixes: https://github.com/flutter/flutter/issues/140232 --- app_dart/lib/src/service/github_service.dart | 5 +++++ .../lib/src/service/luci_build_service.dart | 20 +++++++++---------- .../test/service/luci_build_service_test.dart | 12 +++-------- .../test/src/service/fake_github_service.dart | 5 +++++ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app_dart/lib/src/service/github_service.dart b/app_dart/lib/src/service/github_service.dart index 19d605ec6..8086f5c45 100644 --- a/app_dart/lib/src/service/github_service.dart +++ b/app_dart/lib/src/service/github_service.dart @@ -153,6 +153,11 @@ class GithubService { ); } + /// Gets label list for an issue. + Future> getIssueLabels(RepositorySlug slug, int issueNumber) async { + return github.issues.listLabelsByIssue(slug, issueNumber).toList(); + } + /// Adds labels to an issue. /// /// A pull request is an issue. This works for pull requests as well. diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart index fb23f4a91..69ad0c073 100644 --- a/app_dart/lib/src/service/luci_build_service.dart +++ b/app_dart/lib/src/service/luci_build_service.dart @@ -27,6 +27,7 @@ import 'cache_service.dart'; import 'config.dart'; import 'exceptions.dart'; import 'gerrit_service.dart'; +import 'github_service.dart'; const Set taskFailStatusSet = { Task.statusInfraFailure, @@ -203,15 +204,6 @@ class LuciBuildService { final Map properties = target.getProperties(); properties.putIfAbsent('git_branch', () => pullRequest.base!.ref!.replaceAll('refs/heads/', '')); - final List? labels = pullRequest.labels - ?.where((label) => label.name.startsWith(githubBuildLabelPrefix)) - .map((obj) => obj.name) - .toList(); - - if (labels != null && labels.isNotEmpty) { - properties[propertiesGithubBuildLabelName] = labels; - } - requests.add( Request( scheduleBuild: _createPresubmitScheduleBuild( @@ -363,7 +355,15 @@ class LuciBuildService { 'commit_branch': branch, 'commit_sha': sha, }; - final Map? properties = build.input!.properties; + final Map properties = Map.of(build.input!.properties ?? {}); + final GithubService githubService = await config.createGithubService(slug); + final List issueLabels = await githubService.getIssueLabels(slug, prNumber); + final List labels = + issueLabels.where((label) => label.name.startsWith(githubBuildLabelPrefix)).map((obj) => obj.name).toList(); + + if (labels.isNotEmpty) { + properties[propertiesGithubBuildLabelName] = labels; + } log.info('input ${build.input!} properties $properties'); final ScheduleBuildRequest scheduleBuildRequest = _createPresubmitScheduleBuild( diff --git a/app_dart/test/service/luci_build_service_test.dart b/app_dart/test/service/luci_build_service_test.dart index 975858b0a..bb687bc28 100644 --- a/app_dart/test/service/luci_build_service_test.dart +++ b/app_dart/test/service/luci_build_service_test.dart @@ -341,11 +341,7 @@ void main() { }); test('schedule try builds with github build labels successfully', () async { - final issueLabels = [ - IssueLabel(name: '${LuciBuildService.githubBuildLabelPrefix}hello'), - IssueLabel(name: '${LuciBuildService.githubBuildLabelPrefix}world'), - ]; - final PullRequest pullRequest = generatePullRequest(labels: issueLabels); + final PullRequest pullRequest = generatePullRequest(); when(mockBuildBucketClient.batch(any)).thenAnswer((_) async { return BatchResponse( responses: [ @@ -393,10 +389,6 @@ void main() { 'git_ref': 'refs/pull/123/head', 'exe_cipd_version': 'refs/heads/main', 'recipe': 'devicelab/devicelab', - LuciBuildService.propertiesGithubBuildLabelName: [ - '${LuciBuildService.githubBuildLabelPrefix}hello', - '${LuciBuildService.githubBuildLabelPrefix}world', - ], }); expect(dimensions.length, 1); expect(dimensions[0].key, 'os'); @@ -768,6 +760,8 @@ void main() { 'repo_name': 'flutter', 'user_agent': 'flutter-cocoon', }); + final Map? properties = scheduleBuildRequest.properties; + expect(properties!['overrides'], ['override: test']); }); }); diff --git a/app_dart/test/src/service/fake_github_service.dart b/app_dart/test/src/service/fake_github_service.dart index da2887e7f..f127cb3ff 100644 --- a/app_dart/test/src/service/fake_github_service.dart +++ b/app_dart/test/src/service/fake_github_service.dart @@ -89,6 +89,11 @@ class FakeGithubService implements GithubService { return GitReference(); } + @override + Future> getIssueLabels(RepositorySlug slug, int issueNumber) { + return Future.value([IssueLabel(name: 'override: test')]); + } + @override Future> listIssues( RepositorySlug slug, { From 919cc8ae8f3581d43d8bd463f79c0e7a4a144ed6 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:23:50 -0800 Subject: [PATCH 2/2] Add null check when bumping github version (#3404) Same as https://github.com/flutter/cocoon/pull/3386 with a fix. --- auto_submit/lib/service/approver_service.dart | 2 +- auto_submit/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/auto_submit/lib/service/approver_service.dart b/auto_submit/lib/service/approver_service.dart index 22ba63764..7798a528d 100644 --- a/auto_submit/lib/service/approver_service.dart +++ b/auto_submit/lib/service/approver_service.dart @@ -55,7 +55,7 @@ class ApproverService { // TODO(ricardoamador) this will need to be refactored to make this code more general and // not applicable to only flutter. await for (github.PullRequestReview review in reviews) { - if (review.user.login == 'fluttergithubbot' && review.state == 'APPROVED') { + if (review.user?.login == 'fluttergithubbot' && review.state == 'APPROVED') { // Already approved. return; } diff --git a/auto_submit/pubspec.yaml b/auto_submit/pubspec.yaml index 921bafd33..449bf8c64 100644 --- a/auto_submit/pubspec.yaml +++ b/auto_submit/pubspec.yaml @@ -13,7 +13,7 @@ environment: dependencies: appengine: 0.13.7 corsac_jwt: 1.0.0-nullsafety.1 - github: 9.20.0 + github: 9.22.0 googleapis: 11.4.0 googleapis_auth: 1.4.1 graphql: 5.2.0-beta.7