From 4e4f408200df422b9ac1bdd930d0988cf0ea0180 Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Mon, 21 Sep 2026 10:36:24 -0700 Subject: [PATCH 1/3] Don't mark dashboard checks as neutral on rerun. This is causing some PRs to autosubmit with failing checks. Ideally, we'd actually rerun failed checks when this is clicked. For now, we should make this a no-op. --- app_dart/lib/src/service/scheduler.dart | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart index ab984096d..6914c2c8d 100644 --- a/app_dart/lib/src/service/scheduler.dart +++ b/app_dart/lib/src/service/scheduler.dart @@ -1707,36 +1707,13 @@ $stacktrace switch (name) { case Config.kMergeQueueLockName: + case Config.kDashboardCheckName: final checkSuiteId = checkRunEvent.checkRun!.checkSuite!.id!; log.debug( '$logCrumb: Requested re-run of "$name" for ' '$slug / $checkSuiteId - ignoring', ); success = true; - case Config.kDashboardCheckName: - try { - log.info( - 'Resetting dashboard checks ${checkRunEvent.checkRun!.id} to neutral', - ); - await _githubChecksService.githubChecksUtil.updateCheckRun( - _config, - slug, - checkRunEvent.checkRun!.toGithubCheckRun(), - conclusion: CheckRunConclusion.neutral, - output: const CheckRunOutput( - title: Config.kDashboardCheckName, - summary: Scheduler.kDashboardChecksDescription, - ), - ); - success = true; - } catch (e, s) { - // We are not going to block on this error. - log.warn( - 'Failed to reset dashboard checks ${checkRunEvent.checkRun!.id} to neutral', - e, - s, - ); - } case Config.kCiYamlCheckName: // The CheckRunEvent.checkRun.pullRequests array is empty for this // event, so we need to find the matching pull request. From 5fdd1c266bb03b389a8a37c2da7d961740bea029 Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Mon, 21 Sep 2026 11:24:11 -0700 Subject: [PATCH 2/3] Fix unit test. --- app_dart/test/service/scheduler_test.dart | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/app_dart/test/service/scheduler_test.dart b/app_dart/test/service/scheduler_test.dart index 8cfd86a87..bc785af7e 100644 --- a/app_dart/test/service/scheduler_test.dart +++ b/app_dart/test/service/scheduler_test.dart @@ -1050,7 +1050,7 @@ void main() { verifyNever(mockGithubChecksUtil.createCheckRun(any, any, any, any)); }); - test('rerequested dashboard check resets check run to neutral', () async { + test('rerequested dashboard check resets check run is ignored', () async { final mockGithubService = MockGithubService(); final mockGithubClient = MockGitHub(); config = FakeConfig(githubService: mockGithubService); @@ -1084,18 +1084,6 @@ void main() { await scheduler.processCheckRun(checkRunEvent), const ProcessCheckRunResult.success(), ); - verify( - mockGithubChecksUtil.updateCheckRun( - any, - RepositorySlug.full('flutter/cocoon'), - any, - conclusion: CheckRunConclusion.neutral, - output: const CheckRunOutput( - title: Config.kDashboardCheckName, - summary: Scheduler.kDashboardChecksDescription, - ), - ), - ).called(1); // Verifies no checks were created verifyNever(mockGithubChecksUtil.createCheckRun(any, any, any, any)); }); From ba4ba74f7b4568fd01ac01784141a4ee858aaaf8 Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Mon, 21 Sep 2026 14:20:43 -0700 Subject: [PATCH 3/3] Remove rerequest of the Dashboard Checks check run. --- .../lib/src/service/luci_build_service.dart | 37 --------- .../schedule_try_builds_test.dart | 77 ------------------- 2 files changed, 114 deletions(-) diff --git a/app_dart/lib/src/service/luci_build_service.dart b/app_dart/lib/src/service/luci_build_service.dart index 01bc943d1..6cbc88e13 100644 --- a/app_dart/lib/src/service/luci_build_service.dart +++ b/app_dart/lib/src/service/luci_build_service.dart @@ -445,43 +445,6 @@ class LuciBuildService { ); } - // Set the dashboard check status to `CheckRunStatus.inProgress` for the - // initial run. For Re-run Failed Checks, if all failed jobs were reset, we - // need to re-request the check run before updating it to in progress. - final isRerun = targets.values.first > 1; - if (isUnifiedCheckRunFlow && dashboardChecks != null) { - if (isRerun && stage != null) { - try { - final presubmitGuardDoc = await _firestore.getDocument( - PresubmitGuard.documentNameFor( - slug: slug, - prNum: pullRequest.number!, - checkRunId: dashboardChecks.id!, - stage: stage, - ), - ); - final guard = PresubmitGuard.fromDocument(presubmitGuardDoc); - if (guard.failedJobs == 0) { - log.info( - 'Re-requesting dashboard checks id ${dashboardChecks.id} for Guard $guard', - ); - final githubClient = await _config.createGitHubClient(slug: slug); - await githubClient.checks.checkRuns.reRequestCheckRun( - slug, - checkRunId: dashboardChecks.id!, - ); - } - } catch (e, s) { - // We are not going to block on this error. - log.warn( - 'Failed to re-request dashboard checks for PR# ${pullRequest.number}', - e, - s, - ); - } - } - } - return targets.keys.toList(); } diff --git a/app_dart/test/service/luci_build_service/schedule_try_builds_test.dart b/app_dart/test/service/luci_build_service/schedule_try_builds_test.dart index e8caad7bc..d4e451452 100644 --- a/app_dart/test/service/luci_build_service/schedule_try_builds_test.dart +++ b/app_dart/test/service/luci_build_service/schedule_try_builds_test.dart @@ -627,83 +627,6 @@ void main() { }, ); - test( - 'reRequests check run for re-run failed checks when failedJobs is 0', - () async { - final pullRequest = generatePullRequest( - id: 1, - repo: 'flutter', - headSha: 'headsha123', - ); - - final buildTarget = generateTarget( - 1, - properties: {'os': 'abc'}, - slug: RepositorySlug.full('flutter/flutter'), - name: 'Linux foo', - ); - - final mockGithubClient = MockGitHub(); - final mockChecksService = MockChecksService(); - final mockCheckRunsService = MockCheckRunsService(); - - when(mockGithubClient.checks).thenReturn(mockChecksService); - when(mockChecksService.checkRuns).thenReturn(mockCheckRunsService); - - luci = LuciBuildService( - config: FakeConfig( - githubClient: mockGithubClient, - dynamicConfig: DynamicConfig( - unifiedCheckRunFlow: UnifiedCheckRunFlow(useForAll: true), - ), - ), - cache: CacheService.inMemory(), - buildBucketClient: mockBuildBucketClient, - githubChecksUtil: mockGithubChecksUtil, - pubsub: pubSub, - gerritService: gerritService, - firestore: firestore, - ); - - final checkRunGuard = generateCheckRun(1234, name: 'Guard'); - - final guard = PresubmitGuard( - checkRun: checkRunGuard, - headSha: 'headsha123', - slug: RepositorySlug.full('flutter/flutter'), - prNum: pullRequest.number!, - stage: CiStage.fusionTests, - creationTime: 123456789, - author: 'dash', - remainingJobs: 1, - failedJobs: 0, - ); - await firestore.writeViaTransaction( - documentsToWrites([guard], exists: false), - ); - - await expectLater( - luci.reScheduleTryBuilds( - pullRequest: pullRequest, - targets: {buildTarget: 2}, - engineArtifacts: EngineArtifacts.builtFromSource( - commitSha: pullRequest.head!.sha!, - ), - dashboardChecks: checkRunGuard, - stage: CiStage.fusionTests, - ), - completion([isTarget.hasName('Linux foo')]), - ); - - verify( - mockCheckRunsService.reRequestCheckRun( - RepositorySlug.full('flutter/flutter'), - checkRunId: 1234, - ), - ).called(1); - }, - ); - test( 'does not reRequest check run for re-run failed checks when failedJobs > 0', () async {