diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart index 787118707..bdfbec3e5 100644 --- a/app_dart/lib/src/service/scheduler.dart +++ b/app_dart/lib/src/service/scheduler.dart @@ -672,10 +672,14 @@ $s // TODO: MergeQueueHashStatus // - .build: trigger targets! // - .wait: something is building. + // - .completed: hash already built, complete! // - .*: do nothing - // FOR NOW: trigger builds for build/wait + // FOR NOW: trigger builds for build/wait/completed because they are also + // building for SHA. switch (artifactStatus) { - case MergeQueueHashStatus.build || MergeQueueHashStatus.wait + case MergeQueueHashStatus.build || + MergeQueueHashStatus.wait || + MergeQueueHashStatus.complete when _config.flags.contentAwareHashing.waitOnContentHash: // Note from codefu: We do not have the merge queue lock yet. // It was short-circuited if the waitOnContentHash is set. The diff --git a/app_dart/test/service/scheduler/hash_workflow_test.dart b/app_dart/test/service/scheduler/hash_workflow_test.dart index a24896c7e..b37872ddf 100644 --- a/app_dart/test/service/scheduler/hash_workflow_test.dart +++ b/app_dart/test/service/scheduler/hash_workflow_test.dart @@ -191,6 +191,40 @@ void main() async { ), ).called(1); }); + + test( + 'triggers tests on waitOnContentHash + completed artifacts (PRE-CAH flip over)', + () async { + config.dynamicConfig = DynamicConfig.fromJson({ + 'contentAwareHashing': {'waitOnContentHash': true}, + }); + + final job = workflowJobTemplate().toWorkflowJob(); + + firestore.putDocument( + ContentAwareHashBuilds( + createdOn: DateTime(2025, 05, 20), + contentHash: '65038ef4984b927fd1762ef01d35c5ecc34ff5f7', + commitSha: 'a' * 40, + buildStatus: BuildStatus.success, + waitingShas: [], + ), + ); + + await scheduler.processWorkflowJob(job); + + verify( + mockGithubChecksUtil.createCheckRun( + any, + RepositorySlug.full('flutter/flutter'), + '27bfdee25949bc48044c4e16678f3449dd213b6e', + 'Merge Queue Guard', + output: anyNamed('output'), + conclusion: anyNamed('conclusion'), + ), + ).called(1); + }, + ); } extension on String {