create presubmit_guard for non flutter repos in unified check run flow (#5055)
fix: https://github.com/flutter/flutter/issues/186485
diff --git a/app_dart/lib/src/model/firestore/base.dart b/app_dart/lib/src/model/firestore/base.dart
index 39444bc..712da42 100644
--- a/app_dart/lib/src/model/firestore/base.dart
+++ b/app_dart/lib/src/model/firestore/base.dart
@@ -13,7 +13,10 @@
fusionEngineBuild('engine'),
/// All non-engine artifact tests (engine & framework)
- fusionTests('fusion');
+ fusionTests('fusion'),
+
+ /// All tests artifacts from non-flutter repositories
+ genericTests('generic');
const CiStage(this.name);
diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart
index b230d80..ea18469 100644
--- a/app_dart/lib/src/service/luci_build_service.dart
+++ b/app_dart/lib/src/service/luci_build_service.dart
@@ -295,6 +295,9 @@
// We need to store PR to checkrun mapping in order to get PR later in
// [Scheduler.proceedUnifiedCheckRunToTestingStage] method
checkRuns.add(checkRunGuard);
+ log.info(
+ 'Created unified check run ${checkRunGuard.id} for PR# ${pullRequest.number}',
+ );
}
for (final MapEntry(key: target, value: attemptNumber) in targets.entries) {
diff --git a/app_dart/lib/src/service/luci_build_service/user_data.g.dart b/app_dart/lib/src/service/luci_build_service/user_data.g.dart
index c6f4412..f67563c 100644
--- a/app_dart/lib/src/service/luci_build_service/user_data.g.dart
+++ b/app_dart/lib/src/service/luci_build_service/user_data.g.dart
@@ -69,6 +69,7 @@
const _$CiStageEnumMap = {
CiStage.fusionEngineBuild: 'fusionEngineBuild',
CiStage.fusionTests: 'fusionTests',
+ CiStage.genericTests: 'genericTests',
};
PostsubmitUserData _$PostsubmitUserDataFromJson(Map<String, dynamic> json) =>
diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index 18fcdb7..b0a157d 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -453,6 +453,20 @@
// See https://github.com/flutter/flutter/issues/165810.
engineArtifacts = EngineArtifacts.usingExistingEngine(commitSha: sha);
} else {
+ // For non-flutter repos, if unified check run flow is enabled, create
+ // a staging document to track presubmit tests.
+ if (isUnifiedCheckRun) {
+ await UnifiedCheckRun.initializeCiStagingDocument(
+ firestoreService: _firestore,
+ slug: slug,
+ sha: sha,
+ stage: CiStage.genericTests,
+ tasks: [...presubmitTriggerTargets.map((t) => t.name)],
+ pullRequest: pullRequest,
+ config: _config,
+ checkRun: lock,
+ );
+ }
engineArtifacts = const EngineArtifacts.noFrameworkTests(
reason: 'This is not the flutter/flutter repository',
);
@@ -781,6 +795,7 @@
(Target target) => switch (stage) {
CiStage.fusionEngineBuild => target.isReleaseBuild,
CiStage.fusionTests => !target.isReleaseBuild,
+ _ => true, // Include all targets for non-flutter repositories
},
);
@@ -1261,6 +1276,11 @@
sha: check.sha,
logCrumb: logCrumb,
);
+ case CiStage.genericTests:
+ // generic tests do not have a staging document nor are associated
+ // with a merge group - they are only used to collect commit stats.
+ log.warn('$logCrumb: generic tests have no merge queue guard.');
+ break;
}
return true;
}
@@ -1337,6 +1357,7 @@
(Target target) => switch (stage) {
CiStage.fusionEngineBuild => target.isReleaseBuild,
CiStage.fusionTests => !target.isReleaseBuild,
+ _ => true, // Include all targets for non-flutter repositories
},
);
return [...presubmitTargets];