blob: b6d2980d4110913d346238a7dd95b498eadd002e [file] [log] [blame]
// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:cocoon_service/cocoon_service.dart';
import 'package:github/github.dart';
import 'package:meta/meta.dart';
import '../../protos.dart' show BuildStatusResponse, EnumBuildStatus;
import '../service/build_status_provider.dart';
import '../service/datastore.dart';
@immutable
class GetBuildStatus extends RequestHandler<Body> {
const GetBuildStatus({
required super.config,
@visibleForTesting DatastoreServiceProvider? datastoreProvider,
@visibleForTesting BuildStatusServiceProvider? buildStatusProvider,
}) : datastoreProvider = datastoreProvider ?? DatastoreService.defaultProvider,
buildStatusProvider = buildStatusProvider ?? BuildStatusService.defaultProvider;
final DatastoreServiceProvider datastoreProvider;
final BuildStatusServiceProvider buildStatusProvider;
static const String kRepoParam = 'repo';
@override
Future<Body> get() async {
final BuildStatusResponse response = await createResponse();
return Body.forJson(response.writeToJsonMap());
}
Future<BuildStatusResponse> createResponse() async {
final DatastoreService datastore = datastoreProvider(config.db);
final FirestoreService firestoreService = await config.createFirestoreService();
final BuildStatusService buildStatusService = buildStatusProvider(datastore, firestoreService);
final String repoName = request!.uri.queryParameters[kRepoParam] ?? 'flutter';
final RepositorySlug slug = RepositorySlug('flutter', repoName);
final BuildStatus status = (await buildStatusService.calculateCumulativeStatus(slug))!;
return BuildStatusResponse()
..buildStatus = status.succeeded ? EnumBuildStatus.success : EnumBuildStatus.failure
..failingTasks.addAll(status.failedTasks);
}
}