From 9636fd3b575e132877f74a1cc62042cfd3b30a90 Mon Sep 17 00:00:00 2001 From: DaveT1991 Date: Thu, 9 Apr 2026 21:13:26 -0400 Subject: [PATCH] Improve enqueue failure message to hint at missing CI labels When enqueueing a PR fails (e.g. HTTP 400 from the merge queue), the error message now includes actionable guidance to check that CI labels have been added before using the autosubmit label. Fixes flutter/flutter#184848 --- .../lib/service/validation_service.dart | 5 +- .../pull_request_validation_service_test.dart | 46 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/auto_submit/lib/service/validation_service.dart b/auto_submit/lib/service/validation_service.dart index 2a06d7fb2..b7b2b3e6a 100644 --- a/auto_submit/lib/service/validation_service.dart +++ b/auto_submit/lib/service/validation_service.dart @@ -108,7 +108,10 @@ ${pullRequest.title!.replaceFirst('Revert "Revert', 'Reland')} }, retryIf: (Exception e) => e is RetryableException); } catch (e, s) { final message = - 'Failed to enqueue ${slug.fullName}/${restPullRequest.number} with $e'; + 'Failed to enqueue ${slug.fullName}/${restPullRequest.number} with $e. ' + 'If CI checks have not been triggered, please ensure the appropriate ' + 'CI labels have been added before using the ' + "'${Config.kAutosubmitLabel}' label."; log.error(message, e, s); return (result: false, message: message, method: SubmitMethod.enqueue); } diff --git a/auto_submit/test/service/pull_request_validation_service_test.dart b/auto_submit/test/service/pull_request_validation_service_test.dart index cef5493d0..37d56391d 100644 --- a/auto_submit/test/service/pull_request_validation_service_test.dart +++ b/auto_submit/test/service/pull_request_validation_service_test.dart @@ -660,6 +660,52 @@ This is the second line in a paragraph.'''); ); }); + test( + 'Fails to enqueue with helpful hint when GraphQL returns opaque error', + () async { + slug = RepositorySlug('flutter', 'flutter'); + + githubGraphQLClient.queryResultForOptions = (QueryOptions options) { + return QueryResult( + options: options, + source: QueryResultSource.network, + data: { + 'repository': { + 'pullRequest': {'id': 'PR_blahblah'}, + }, + }, + ); + }; + + githubGraphQLClient.mutateResultForOptions = (MutationOptions options) { + return QueryResult( + options: options, + source: QueryResultSource.network, + exception: OperationException(), + ); + }; + + final pullRequest = generatePullRequest( + prNumber: 42, + repoName: slug.name, + title: 'Test PR', + mergeable: true, + ); + + final result = await validationService.submitPullRequest( + config: config, + pullRequest: pullRequest, + ); + + expect(result.result, isFalse); + expect(result.message, contains('Failed to enqueue flutter/flutter/42')); + expect( + result.message, + contains('CI labels have been added before using the'), + ); + }, + ); + test('Jumps the queue for emergency pull requests', () async { slug = RepositorySlug('flutter', 'flutter'); final prTitle = 'This pull request should fail to enqueueueueueueueueueu';