Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions app_dart/lib/src/model/firestore/presubmit_guard.dart
Original file line number Diff line number Diff line change
Expand Up @@ -182,16 +182,14 @@ final class PresubmitGuard extends AppDocument<PresubmitGuard> {
String get commitSha => fields[fieldCommitSha]!.stringValue!;
String get author => fields[fieldAuthor]!.stringValue!;
int get creationTime => int.parse(fields[fieldCreationTime]!.integerValue!);
int? get remainingBuilds => fields[fieldRemainingBuilds] != null
? int.parse(fields[fieldRemainingBuilds]!.integerValue!)
: null;
int? get failedBuilds => fields[fieldFailedBuilds] != null
? int.parse(fields[fieldFailedBuilds]!.integerValue!)
: null;
Map<String, TaskStatus>? get builds =>
int get remainingBuilds =>
int.parse(fields[fieldRemainingBuilds]!.integerValue!);
int get failedBuilds => int.parse(fields[fieldFailedBuilds]!.integerValue!);
Map<String, TaskStatus> get builds =>
fields[fieldBuilds]?.mapValue?.fields?.map<String, TaskStatus>(
(k, v) => MapEntry(k, TaskStatus.from(v.stringValue!)),
);
) ??
<String, TaskStatus>{};
CheckRun get checkRun {
final jsonData =
jsonDecode(fields[fieldCheckRun]!.stringValue!) as Map<String, Object?>;
Expand Down Expand Up @@ -246,6 +244,11 @@ final class PresubmitGuard extends AppDocument<PresubmitGuard> {
return CiStage.values.firstWhere((e) => e.name == stageName);
}

List<String> get failedBuildNames => [
for (final MapEntry(:key, :value) in builds.entries)
if (value.isFailure) key,
];

set remainingBuilds(int remainingBuilds) {
fields[fieldRemainingBuilds] = remainingBuilds.toValue();
}
Expand Down
28 changes: 13 additions & 15 deletions app_dart/lib/src/service/firestore/unified_check_run.dart
Original file line number Diff line number Diff line change
Expand Up @@ -98,21 +98,19 @@ final class UnifiedCheckRun {
);

for (final guard in guards) {
final failedBuilds = guard.builds?.entries
.where((entry) => entry.value.isFailure)
.map((entry) => entry.key)
.toList();
final stage = guard.stage;
if (failedBuilds != null && failedBuilds.isNotEmpty) {
// Copy the failed build names to a local variable to avoid losing the
// failed build names after resetting the failed guard.builds.
final failedBuildNames = guard.failedBuildNames;
if (failedBuildNames.isNotEmpty) {
guard.failedBuilds = 0;
guard.remainingBuilds = failedBuilds.length;
final builds = guard.builds!;
for (final buildName in failedBuilds) {
guard.remainingBuilds = failedBuildNames.length;
final builds = guard.builds;
for (final buildName in failedBuildNames) {
builds[buildName] = TaskStatus.waitingForBackfill;
}
guard.builds = builds;
final checks = [
for (final buildName in failedBuilds)
for (final buildName in failedBuildNames)
PresubmitCheck.init(
buildName: buildName,
checkRunId: checkRunId,
Expand All @@ -138,8 +136,8 @@ final class UnifiedCheckRun {
);
return FailedChecksForRerun(
checkRunGuard: guard.checkRun,
checkNames: failedBuilds,
stage: stage,
checkNames: failedBuildNames,
stage: guard.stage,
);
} catch (e) {
log.info('$logCrumb: failed to update presubmit check', e);
Expand Down Expand Up @@ -327,7 +325,7 @@ final class UnifiedCheckRun {
presubmitGuard = PresubmitGuard.fromDocument(presubmitGuardDocument);

// Check if the build is present in the guard before trying to load it.
if (presubmitGuard.builds?[state.buildName] == null) {
if (presubmitGuard.builds[state.buildName] == null) {
log.info(
'$logCrumb: ${state.buildName} with attemptNumber ${state.attemptNumber} not present for $transaction / ${presubmitGuardDocument.fields}',
);
Expand Down Expand Up @@ -357,7 +355,7 @@ final class UnifiedCheckRun {
remaining = presubmitGuard.remainingBuilds!;
failed = presubmitGuard.failedBuilds!;
final builds = presubmitGuard.builds;
var status = builds?[state.buildName]!;
var status = builds[state.buildName]!;

// If build is waiting for backfill, that means its initiated by github
// or re-run. So no processing needed, we should only update appropriate
Expand Down Expand Up @@ -424,7 +422,7 @@ final class UnifiedCheckRun {
presubmitCheck.endTime = state.endTime!;
presubmitCheck.summary = state.summary;
}
builds![state.buildName] = status;
builds[state.buildName] = status;
presubmitGuard.builds = builds;
presubmitCheck.status = status;
} on DetailedApiRequestError catch (e, stack) {
Expand Down
Loading
Loading