Change some LuciBuildService methods to return Build objects (#2338)
* Change some LuciBuildService methods to return Build objects
* Add validation for rescheduleBuild return object
* Update documentation for rescheduleBuild
* Update documentation for rescheduleUsingCheckRunEvent
diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart
index 4b59af7..e3762e3 100644
--- a/app_dart/lib/src/service/luci_build_service.dart
+++ b/app_dart/lib/src/service/luci_build_service.dart
@@ -323,10 +323,13 @@
return expectedFailedBuilds.toList();
}
- /// Sends [ScheduleBuildRequest] the buildset, user_agent, and
- /// github_link tags are applied to match the original build. The build
- /// properties from the original build are also preserved.
- Future<bool> rescheduleBuild({
+ /// Sends [ScheduleBuildRequest] using information from a given build's
+ /// [BuildPushMessage].
+ ///
+ /// The buildset, user_agent, and github_link tags are applied to match the
+ /// original build. The build properties and user data from the original build
+ /// are also preserved.
+ Future<Build> rescheduleBuild({
required String commitSha,
required String builderName,
required push_message.BuildPushMessage buildPushMessage,
@@ -336,7 +339,7 @@
// is expecting just the last part after "."(prod).
final String bucketName = buildPushMessage.build!.bucket!.split('.').last;
final Map<String, dynamic>? userData = jsonDecode(buildPushMessage.userData!) as Map<String, dynamic>?;
- await buildBucketClient.scheduleBuild(
+ return await buildBucketClient.scheduleBuild(
ScheduleBuildRequest(
builderId: BuilderId(
project: buildPushMessage.build!.project,
@@ -356,13 +359,12 @@
),
),
);
- return true;
}
/// Sends [ScheduleBuildRequest] for [pullRequest] using [checkRunEvent].
///
- /// Returns true if it is able to send the scheduleBuildRequest. Otherwise, false.
- Future<bool> rescheduleUsingCheckRunEvent(cocoon_checks.CheckRunEvent checkRunEvent) async {
+ /// Returns the [Build] returned by scheduleBuildRequest.
+ Future<Build> rescheduleUsingCheckRunEvent(cocoon_checks.CheckRunEvent checkRunEvent) async {
final github.RepositorySlug slug = checkRunEvent.repository!.slug();
final String sha = checkRunEvent.checkRun!.headSha!;
@@ -401,7 +403,7 @@
final String buildUrl = 'https://ci.chromium.org/ui/b/${scheduleBuild.id}';
await githubChecksUtil.updateCheckRun(config, slug, githubCheckRun, detailsUrl: buildUrl);
- return true;
+ return scheduleBuild;
}
/// Gets [Build] using its [id] and passing the additional
diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index d33a6f0..e2f7235 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -450,7 +450,8 @@
success = true;
}
} else {
- success = await luciBuildService.rescheduleUsingCheckRunEvent(checkRunEvent);
+ await luciBuildService.rescheduleUsingCheckRunEvent(checkRunEvent);
+ success = true;
}
log.fine('CheckName: $name State: $success');
diff --git a/app_dart/test/service/luci_build_service_test.dart b/app_dart/test/service/luci_build_service_test.dart
index f3a723a..284e0b7 100644
--- a/app_dart/test/service/luci_build_service_test.dart
+++ b/app_dart/test/service/luci_build_service_test.dart
@@ -740,12 +740,13 @@
test('Reschedule an existing build', () async {
when(mockBuildBucketClient.scheduleBuild(any)).thenAnswer((_) async => generateBuild(1));
- final bool rescheduled = await service.rescheduleBuild(
+ final build = await service.rescheduleBuild(
commitSha: 'abc',
builderName: 'mybuild',
buildPushMessage: buildPushMessage,
);
- expect(rescheduled, isTrue);
+ expect(build.id, '1');
+ expect(build.status, Status.success);
verify(mockBuildBucketClient.scheduleBuild(any)).called(1);
});
});
diff --git a/app_dart/test/src/utilities/mocks.mocks.dart b/app_dart/test/src/utilities/mocks.mocks.dart
index 273de43..0e33d34 100644
--- a/app_dart/test/src/utilities/mocks.mocks.dart
+++ b/app_dart/test/src/utilities/mocks.mocks.dart
@@ -4763,7 +4763,7 @@
returnValue: _i17.Future<List<_i9.Build?>>.value(<_i9.Build?>[]),
) as _i17.Future<List<_i9.Build?>>);
@override
- _i17.Future<bool> rescheduleBuild({
+ _i17.Future<_i9.Build> rescheduleBuild({
required String? commitSha,
required String? builderName,
required _i30.BuildPushMessage? buildPushMessage,
@@ -4778,16 +4778,33 @@
#buildPushMessage: buildPushMessage,
},
),
- returnValue: _i17.Future<bool>.value(false),
- ) as _i17.Future<bool>);
+ returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+ this,
+ Invocation.method(
+ #rescheduleBuild,
+ [],
+ {
+ #commitSha: commitSha,
+ #builderName: builderName,
+ #buildPushMessage: buildPushMessage,
+ },
+ ),
+ )),
+ ) as _i17.Future<_i9.Build>);
@override
- _i17.Future<bool> rescheduleUsingCheckRunEvent(_i33.CheckRunEvent? checkRunEvent) => (super.noSuchMethod(
+ _i17.Future<_i9.Build> rescheduleUsingCheckRunEvent(_i33.CheckRunEvent? checkRunEvent) => (super.noSuchMethod(
Invocation.method(
#rescheduleUsingCheckRunEvent,
[checkRunEvent],
),
- returnValue: _i17.Future<bool>.value(false),
- ) as _i17.Future<bool>);
+ returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+ this,
+ Invocation.method(
+ #rescheduleUsingCheckRunEvent,
+ [checkRunEvent],
+ ),
+ )),
+ ) as _i17.Future<_i9.Build>);
@override
_i17.Future<_i9.Build> getBuildById(
String? id, {