diff --git a/app_dart/lib/src/model/ci_yaml/ci_yaml.dart b/app_dart/lib/src/model/ci_yaml/ci_yaml.dart
index 17bcba9..78b9ea1 100644
--- a/app_dart/lib/src/model/ci_yaml/ci_yaml.dart
+++ b/app_dart/lib/src/model/ci_yaml/ci_yaml.dart
@@ -193,7 +193,7 @@
 
   void _checkExceptions(List<String> exceptions) {
     if (exceptions.isNotEmpty) {
-      final String fullException = exceptions.reduce((String exception, _) => exception + '\n');
+      final String fullException = exceptions.reduce((String exception, _) => '$exception\n');
       throw FormatException(fullException);
     }
   }
@@ -226,7 +226,7 @@
     }
 
     if (exceptions.isNotEmpty) {
-      final String fullException = exceptions.reduce((String exception, _) => exception + '\n');
+      final String fullException = exceptions.reduce((String exception, _) => '$exception\n');
       throw FormatException(fullException);
     }
   }
diff --git a/app_dart/lib/src/request_handlers/flaky_handler_utils.dart b/app_dart/lib/src/request_handlers/flaky_handler_utils.dart
index 4e0b3b0..240e35a 100644
--- a/app_dart/lib/src/request_handlers/flaky_handler_utils.dart
+++ b/app_dart/lib/src/request_handlers/flaky_handler_utils.dart
@@ -157,8 +157,7 @@
     String result =
         '[$bucketString pool] current flaky ratio for the past (up to) 100 commits is ${_formatRate(statistic.flakyRate)}%. Flaky number: ${statistic.flakyNumber}; total number: ${statistic.totalNumber}.\n';
     if (statistic.flakyRate > 0.0) {
-      result = result +
-          '''
+      result += '''
 One recent flaky example for a same commit: ${_issueBuildLink(builder: statistic.name, build: statistic.flakyBuildOfRecentCommit, bucket: bucket)}
 Commit: $_commitPrefix${statistic.recentCommit}
 Flaky builds:
diff --git a/app_dart/lib/src/request_handlers/scheduler/batch_backfiller.dart b/app_dart/lib/src/request_handlers/scheduler/batch_backfiller.dart
index cb97892..e17455c 100644
--- a/app_dart/lib/src/request_handlers/scheduler/batch_backfiller.dart
+++ b/app_dart/lib/src/request_handlers/scheduler/batch_backfiller.dart
@@ -70,10 +70,10 @@
       if (target.schedulerPolicy is! BatchPolicy) {
         continue;
       }
-      final FullTask? _backfill = _backfillTask(target, taskColumn);
+      final FullTask? backfillTask = _backfillTask(target, taskColumn);
       final int priority = backfillPriority(taskColumn.map((e) => e.task).toList(), BatchPolicy.kBatchSize);
-      if (_backfill != null) {
-        backfill.add(Tuple<Target, FullTask, int>(target, _backfill, priority));
+      if (backfillTask != null) {
+        backfill.add(Tuple<Target, FullTask, int>(target, backfillTask, priority));
       }
     }
 
diff --git a/app_dart/lib/src/request_handling/pubsub.dart b/app_dart/lib/src/request_handling/pubsub.dart
index 22c20ea..c5d42f3 100644
--- a/app_dart/lib/src/request_handling/pubsub.dart
+++ b/app_dart/lib/src/request_handling/pubsub.dart
@@ -31,8 +31,8 @@
     final PublishRequest request = PublishRequest(messages: <PubsubMessage>[
       PubsubMessage(data: messageBase64),
     ]);
-    final String _topic = 'projects/flutter-dashboard/topics/$topic';
-    final PublishResponse response = await pubsubApi.projects.topics.publish(request, _topic);
+    final String fullTopicName = 'projects/flutter-dashboard/topics/$topic';
+    final PublishResponse response = await pubsubApi.projects.topics.publish(request, fullTopicName);
     log.info('pubsub response messageId=${response.messageIds}');
   }
 }
diff --git a/app_dart/lib/src/request_handling/subscription_handler.dart b/app_dart/lib/src/request_handling/subscription_handler.dart
index a80b3f6..977ccec 100644
--- a/app_dart/lib/src/request_handling/subscription_handler.dart
+++ b/app_dart/lib/src/request_handling/subscription_handler.dart
@@ -59,9 +59,9 @@
     Future<void> Function(HttpStatusException)? onError,
   }) async {
     AuthenticatedContext authContext;
-    final AuthenticationProvider _authProvider = authProvider ?? PubsubAuthenticationProvider(config: config);
+    final AuthenticationProvider auth = authProvider ?? PubsubAuthenticationProvider(config: config);
     try {
-      authContext = await _authProvider.authenticate(request);
+      authContext = await auth.authenticate(request);
     } on Unauthenticated catch (error) {
       final HttpResponse response = request.response;
       response
diff --git a/app_dart/lib/src/service/config.dart b/app_dart/lib/src/service/config.dart
index eae4182..5960e96 100644
--- a/app_dart/lib/src/service/config.dart
+++ b/app_dart/lib/src/service/config.dart
@@ -367,13 +367,13 @@
     );
 
     final String token = await githubOAuthToken;
-    final AuthLink _authLink = AuthLink(
+    final AuthLink authLink = AuthLink(
       getToken: () async => 'Bearer $token',
     );
 
     return GraphQLClient(
       cache: GraphQLCache(),
-      link: _authLink.concat(httpLink),
+      link: authLink.concat(httpLink),
     );
   }
 
diff --git a/app_dart/lib/src/service/github_checks_service.dart b/app_dart/lib/src/service/github_checks_service.dart
index 63e6401..18c83f1 100644
--- a/app_dart/lib/src/service/github_checks_service.dart
+++ b/app_dart/lib/src/service/github_checks_service.dart
@@ -121,7 +121,7 @@
   /// reference from github check run page.
   String getGithubSummary(String? summary) {
     if (summary == null) {
-      return kGithubSummary + 'Empty summaryMarkdown';
+      return '${kGithubSummary}Empty summaryMarkdown';
     }
     // This is an imposed GitHub limit
     const int checkSummaryLimit = 65535;
@@ -129,9 +129,10 @@
     const int checkSummaryBufferLimit = checkSummaryLimit - 10000 - kGithubSummary.length;
     // Return the last [checkSummaryBufferLimit] characters as they are likely the most relevant.
     if (summary.length > checkSummaryBufferLimit) {
-      summary = '[TRUNCATED...] ' + summary.substring(summary.length - checkSummaryBufferLimit);
+      final String truncatedSummary = summary.substring(summary.length - checkSummaryBufferLimit);
+      summary = '[TRUNCATED...] $truncatedSummary';
     }
-    return kGithubSummary + summary;
+    return '$kGithubSummary$summary';
   }
 
   /// Transforms a [push_message.Result] to a [github.CheckRunConclusion].
diff --git a/app_dart/pubspec.lock b/app_dart/pubspec.lock
index efe0e09..07434dd 100644
--- a/app_dart/pubspec.lock
+++ b/app_dart/pubspec.lock
@@ -5,729 +5,833 @@
     dependency: transitive
     description:
       name: _discoveryapis_commons
-      url: "https://pub.dartlang.org"
+      sha256: "50d83f715747fd9f41bcdc87eec93fa300c63dd9ca16bb884bbe7864a2a547bd"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.3"
   _fe_analyzer_shared:
     dependency: transitive
     description:
       name: _fe_analyzer_shared
-      url: "https://pub.dartlang.org"
+      sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8"
+      url: "https://pub.dev"
     source: hosted
     version: "47.0.0"
   analyzer:
-    dependency: transitive
+    dependency: "direct dev"
     description:
       name: analyzer
-      url: "https://pub.dartlang.org"
+      sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80"
+      url: "https://pub.dev"
     source: hosted
     version: "4.7.0"
   appengine:
     dependency: "direct main"
     description:
       name: appengine
-      url: "https://pub.dartlang.org"
+      sha256: "3e2a0fbfa16d9312f5a8bcb3f984851ada01b99d1bcea951a90f7ab957fcbb25"
+      url: "https://pub.dev"
     source: hosted
     version: "0.13.2"
   archive:
     dependency: transitive
     description:
       name: archive
-      url: "https://pub.dartlang.org"
+      sha256: "80e5141fafcb3361653ce308776cfd7d45e6e9fbb429e14eec571382c0c5fecb"
+      url: "https://pub.dev"
     source: hosted
     version: "3.3.2"
   args:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: args
-      url: "https://pub.dartlang.org"
+      sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515
+      url: "https://pub.dev"
     source: hosted
     version: "2.3.1"
   asn1lib:
     dependency: transitive
     description:
       name: asn1lib
-      url: "https://pub.dartlang.org"
+      sha256: d7f1708143914ebf1d876de719998a6dad75194e85f5e85a2500402a5fc2de5f
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.0"
   async:
     dependency: transitive
     description:
       name: async
-      url: "https://pub.dartlang.org"
+      sha256: "271b8899fc99f9df4f4ed419fa14e2fff392c7b2c162fbb87b222e2e963ddc73"
+      url: "https://pub.dev"
     source: hosted
     version: "2.9.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      url: "https://pub.dartlang.org"
+      sha256: "5bbf32bc9e518d41ec49718e2931cd4527292c9b0c6d2dffcf7fe6b9a8a8cf72"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   build:
     dependency: transitive
     description:
       name: build
-      url: "https://pub.dartlang.org"
+      sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777"
+      url: "https://pub.dev"
     source: hosted
     version: "2.3.1"
   build_config:
     dependency: transitive
     description:
       name: build_config
-      url: "https://pub.dartlang.org"
+      sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   build_daemon:
     dependency: transitive
     description:
       name: build_daemon
-      url: "https://pub.dartlang.org"
+      sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   build_resolvers:
     dependency: transitive
     description:
       name: build_resolvers
-      url: "https://pub.dartlang.org"
+      sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.10"
   build_runner:
     dependency: "direct dev"
     description:
       name: build_runner
-      url: "https://pub.dartlang.org"
+      sha256: "6f48c61a9dcd2c3a9e62d3dcdab1ba382790e2f31026288cbabe55d6003c9c23"
+      url: "https://pub.dev"
     source: hosted
     version: "2.3.2"
   build_runner_core:
     dependency: transitive
     description:
       name: build_runner_core
-      url: "https://pub.dartlang.org"
+      sha256: "597a55d780766b10e02595b57b933a597cfbfa08c1bb0f5edfe826d34af1d818"
+      url: "https://pub.dev"
     source: hosted
     version: "7.2.6"
   built_collection:
     dependency: transitive
     description:
       name: built_collection
-      url: "https://pub.dartlang.org"
+      sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+      url: "https://pub.dev"
     source: hosted
     version: "5.1.1"
   built_value:
     dependency: transitive
     description:
       name: built_value
-      url: "https://pub.dartlang.org"
+      sha256: d7a9cd57c215bdf8d502772447aa6b52a8ab3f956d25d5fdea6ef1df2d2dad60
+      url: "https://pub.dev"
     source: hosted
     version: "8.4.1"
   checked_yaml:
     dependency: transitive
     description:
       name: checked_yaml
-      url: "https://pub.dartlang.org"
+      sha256: dd007e4fb8270916820a0d66e24f619266b60773cddd082c6439341645af2659
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   clock:
     dependency: transitive
     description:
       name: clock
-      url: "https://pub.dartlang.org"
+      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   code_builder:
     dependency: transitive
     description:
       name: code_builder
-      url: "https://pub.dartlang.org"
+      sha256: "02ce3596b459c666530f045ad6f96209474e8fee6e4855940a3cee65fb872ec5"
+      url: "https://pub.dev"
     source: hosted
     version: "4.3.0"
   collection:
     dependency: "direct main"
     description:
       name: collection
-      url: "https://pub.dartlang.org"
+      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      url: "https://pub.dev"
     source: hosted
     version: "1.17.0"
   convert:
     dependency: transitive
     description:
       name: convert
-      url: "https://pub.dartlang.org"
+      sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.1"
   corsac_jwt:
     dependency: "direct main"
     description:
       name: corsac_jwt
-      url: "https://pub.dartlang.org"
+      sha256: f86d1a1ad7d4db5727ae5d68dfd4437cbcf62daabe920190fcd5425457f5f377
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.0-nullsafety.1"
   coverage:
     dependency: transitive
     description:
       name: coverage
-      url: "https://pub.dartlang.org"
+      sha256: d2494157c32b303f47dedee955b1479f2979c4ff66934eb7c0def44fd9e0267a
+      url: "https://pub.dev"
     source: hosted
     version: "1.6.1"
   crypto:
     dependency: "direct main"
     description:
       name: crypto
-      url: "https://pub.dartlang.org"
+      sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.2"
   dart_style:
     dependency: transitive
     description:
       name: dart_style
-      url: "https://pub.dartlang.org"
+      sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
+      url: "https://pub.dev"
     source: hosted
     version: "2.2.4"
   dbcrypt:
     dependency: "direct main"
     description:
       name: dbcrypt
-      url: "https://pub.dartlang.org"
+      sha256: b32a786486509ddc31b1fa97932a2fc9a3838bbed5d82e43bd636604c96b031e
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.0"
   fake_async:
     dependency: "direct dev"
     description:
       name: fake_async
-      url: "https://pub.dartlang.org"
+      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   file:
     dependency: "direct main"
     description:
       name: file
-      url: "https://pub.dartlang.org"
+      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
+      url: "https://pub.dev"
     source: hosted
     version: "6.1.4"
   fixnum:
     dependency: "direct main"
     description:
       name: fixnum
-      url: "https://pub.dartlang.org"
+      sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.1"
   flutter_lints:
     dependency: "direct dev"
     description:
       name: flutter_lints
-      url: "https://pub.dartlang.org"
+      sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
+      url: "https://pub.dev"
     source: hosted
-    version: "1.0.4"
+    version: "2.0.1"
   frontend_server_client:
     dependency: transitive
     description:
       name: frontend_server_client
-      url: "https://pub.dartlang.org"
+      sha256: "82715f8041a85a534a7bf64400b2ee0bb3d594ccf695d97c0bb017259657ff5d"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   gcloud:
     dependency: "direct main"
     description:
       name: gcloud
-      url: "https://pub.dartlang.org"
+      sha256: a8ba019d4be7d2a4347eeff5baeee7dacb4d6b4f9b27dc747d3b51831ba1a54d
+      url: "https://pub.dev"
     source: hosted
     version: "0.8.6"
   github:
     dependency: "direct main"
     description:
       name: github
-      url: "https://pub.dartlang.org"
+      sha256: "51b66773ac2c4276c4ecc2657a9997a5cb91da33adb20b6107b2ba76b3a829ba"
+      url: "https://pub.dev"
     source: hosted
     version: "9.4.0"
   glob:
     dependency: transitive
     description:
       name: glob
-      url: "https://pub.dartlang.org"
+      sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   googleapis:
     dependency: "direct main"
     description:
       name: googleapis
-      url: "https://pub.dartlang.org"
+      sha256: dfea9984f0785ed445ba78e2aa8c55dadd86d6a60ea9e0ffbadad51edb5e7e36
+      url: "https://pub.dev"
     source: hosted
     version: "9.2.0"
   googleapis_auth:
     dependency: "direct main"
     description:
       name: googleapis_auth
-      url: "https://pub.dartlang.org"
+      sha256: "127b1bbd32170ab8312f503bd57f1d654d8e4039ddfbc63c027d3f7ade0eff74"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   gql:
     dependency: "direct main"
     description:
       name: gql
-      url: "https://pub.dartlang.org"
+      sha256: "11fa39353e8a69ec9d3c32bd133054593129c99564be18461c1b3ce212966373"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.13.1"
+    version: "0.14.1-alpha+1661890990239"
   gql_dedupe_link:
     dependency: transitive
     description:
       name: gql_dedupe_link
-      url: "https://pub.dartlang.org"
+      sha256: "024aa836258fdc67a25ae4547c3bafbea10c4948f925c6d6d6fd77c8e8dcbfb1"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.2"
+    version: "2.0.3"
   gql_error_link:
     dependency: transitive
     description:
       name: gql_error_link
-      url: "https://pub.dartlang.org"
+      sha256: a80b1f5f858798bc3ede38910e4c262d99755bffccb55d146c364bfeb8fa8350
+      url: "https://pub.dev"
     source: hosted
-    version: "0.2.2"
+    version: "0.2.3"
   gql_exec:
     dependency: transitive
     description:
       name: gql_exec
-      url: "https://pub.dartlang.org"
+      sha256: "983b702593eba382a5c518d30678b86798bf20fbf1b03affb8b10a418439160e"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.0"
+    version: "0.4.1"
   gql_http_link:
     dependency: transitive
     description:
       name: gql_http_link
-      url: "https://pub.dartlang.org"
+      sha256: "101232d7fd5a3524974c05d26bb3c247a3d35c5b4a8806a361accf841a8e942e"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.2"
+    version: "0.4.4+1"
   gql_link:
     dependency: transitive
     description:
       name: gql_link
-      url: "https://pub.dartlang.org"
+      sha256: "50c36e7462530361859e6a34bb84885b3091a1906846494295c5ea947019d854"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.2"
+    version: "0.5.1-alpha+1660256327632"
   gql_transform_link:
     dependency: transitive
     description:
       name: gql_transform_link
-      url: "https://pub.dartlang.org"
+      sha256: b532c777b5d1d7147d4ae5cc27fcd57bfcddb47a09e102c7b4a2e98fcc162737
+      url: "https://pub.dev"
     source: hosted
-    version: "0.2.2"
+    version: "0.2.3-alpha+1660256327655"
   graphql:
     dependency: "direct main"
     description:
       name: graphql
-      url: "https://pub.dartlang.org"
+      sha256: f4a91622de5f77e8df785e48286de57fed2efd8e8898d035409de07e530efc0d
+      url: "https://pub.dev"
     source: hosted
-    version: "5.1.1"
+    version: "5.1.2-beta.5"
   graphs:
     dependency: transitive
     description:
       name: graphs
-      url: "https://pub.dartlang.org"
+      sha256: ae0b3d956ff324c6f8671f08dcb2dbd71c99cdbf2aa3ca63a14190c47aa6679c
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   grpc:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: grpc
-      url: "https://pub.dartlang.org"
+      sha256: "3e8e04c6277059b66d67951143842097e52bbf3f2c6fca2e67d3607b48d5c3ab"
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.2"
   hive:
     dependency: transitive
     description:
       name: hive
-      url: "https://pub.dartlang.org"
+      sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
+      url: "https://pub.dev"
     source: hosted
     version: "2.2.3"
   http:
     dependency: "direct main"
     description:
       name: http
-      url: "https://pub.dartlang.org"
+      sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
+      url: "https://pub.dev"
     source: hosted
     version: "0.13.5"
   http2:
     dependency: transitive
     description:
       name: http2
-      url: "https://pub.dartlang.org"
+      sha256: "58805ebc6513eed3b98ee0a455a8357e61d187bf2e0fdc1e53120770f78de258"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   http_multi_server:
     dependency: transitive
     description:
       name: http_multi_server
-      url: "https://pub.dartlang.org"
+      sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
+      url: "https://pub.dev"
     source: hosted
     version: "3.2.1"
   http_parser:
     dependency: transitive
     description:
       name: http_parser
-      url: "https://pub.dartlang.org"
+      sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+      url: "https://pub.dev"
     source: hosted
     version: "4.0.2"
   io:
     dependency: transitive
     description:
       name: io
-      url: "https://pub.dartlang.org"
+      sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.3"
   js:
     dependency: transitive
     description:
       name: js
-      url: "https://pub.dartlang.org"
+      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      url: "https://pub.dev"
     source: hosted
     version: "0.6.5"
   json_annotation:
     dependency: "direct main"
     description:
       name: json_annotation
-      url: "https://pub.dartlang.org"
+      sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c"
+      url: "https://pub.dev"
     source: hosted
     version: "4.7.0"
   json_serializable:
     dependency: "direct dev"
     description:
       name: json_serializable
-      url: "https://pub.dartlang.org"
+      sha256: "87ce738d360e9f97861a06a7ed99bad56c60cdb76adc37b870c2667001c2bfb0"
+      url: "https://pub.dev"
     source: hosted
     version: "6.5.3"
   lints:
     dependency: transitive
     description:
       name: lints
-      url: "https://pub.dartlang.org"
+      sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.0.1"
+    version: "2.0.1"
   logging:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: logging
-      url: "https://pub.dartlang.org"
+      sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
   matcher:
     dependency: transitive
     description:
       name: matcher
-      url: "https://pub.dartlang.org"
+      sha256: "80c2989398773fa06e2457e9ff08580f24e9858b28462a722241cb53e5613478"
+      url: "https://pub.dev"
     source: hosted
     version: "0.12.12"
   meta:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: meta
-      url: "https://pub.dartlang.org"
+      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.0"
   mime:
     dependency: "direct main"
     description:
       name: mime
-      url: "https://pub.dartlang.org"
+      sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.2"
   mockito:
     dependency: "direct dev"
     description:
       name: mockito
-      url: "https://pub.dartlang.org"
+      sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe"
+      url: "https://pub.dev"
     source: hosted
-    version: "5.3.0"
+    version: "5.3.2"
   neat_cache:
     dependency: "direct main"
     description:
       name: neat_cache
-      url: "https://pub.dartlang.org"
+      sha256: "98f528e6787988b85dc1384cfe9ed0b472a7277a1c7ea5a40cbed51e22f71163"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.2"
   node_preamble:
     dependency: transitive
     description:
       name: node_preamble
-      url: "https://pub.dartlang.org"
+      sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   normalize:
     dependency: transitive
     description:
       name: normalize
-      url: "https://pub.dartlang.org"
+      sha256: baf8caf2d8b745af5737cca6c24f7fe3cf3158897fdbcde9a909b9c8d3e2e5af
+      url: "https://pub.dev"
     source: hosted
-    version: "0.6.0+1"
+    version: "0.7.2"
   package_config:
     dependency: transitive
     description:
       name: package_config
-      url: "https://pub.dartlang.org"
+      sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   path:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: path
-      url: "https://pub.dartlang.org"
+      sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.2"
   platform:
     dependency: "direct dev"
     description:
       name: platform
-      url: "https://pub.dartlang.org"
+      sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   pointycastle:
     dependency: transitive
     description:
       name: pointycastle
-      url: "https://pub.dartlang.org"
+      sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346
+      url: "https://pub.dev"
     source: hosted
     version: "3.6.2"
   pool:
     dependency: transitive
     description:
       name: pool
-      url: "https://pub.dartlang.org"
+      sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+      url: "https://pub.dev"
     source: hosted
     version: "1.5.1"
   process:
-    dependency: "direct dev"
+    dependency: "direct main"
     description:
       name: process
-      url: "https://pub.dartlang.org"
+      sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
+      url: "https://pub.dev"
     source: hosted
     version: "4.2.4"
   process_runner:
     dependency: "direct main"
     description:
       name: process_runner
-      url: "https://pub.dartlang.org"
+      sha256: a3511a69d42216522166583f19cce6bf44efe109f3ca52fc7994f64bbdbe01e6
+      url: "https://pub.dev"
     source: hosted
     version: "4.1.2"
   protobuf:
     dependency: "direct main"
     description:
       name: protobuf
-      url: "https://pub.dartlang.org"
+      sha256: "01dd9bd0fa02548bf2ceee13545d4a0ec6046459d847b6b061d8a27237108a08"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   pub_semver:
     dependency: transitive
     description:
       name: pub_semver
-      url: "https://pub.dartlang.org"
+      sha256: b959af0a045c3484c4a8f4997731f5bfe4cac60d732fd8ce35b351f2d6a459fe
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.2"
   pubspec_parse:
     dependency: transitive
     description:
       name: pubspec_parse
-      url: "https://pub.dartlang.org"
+      sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   retry:
     dependency: "direct main"
     description:
       name: retry
-      url: "https://pub.dartlang.org"
+      sha256: "45dfeebaf095b606fdb9dbfb4c114cc204449bc274783b452658365e03afdbab"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   rsa_pkcs:
     dependency: transitive
     description:
       name: rsa_pkcs
-      url: "https://pub.dartlang.org"
+      sha256: "17a52b0c010319f0d4c7bcc635eb89e2efeaec44975b3fb45f850b350a2b0513"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   rxdart:
     dependency: transitive
     description:
       name: rxdart
-      url: "https://pub.dartlang.org"
+      sha256: "5d22055fd443806c03ef24a02000637cf51eae49c2a0168d38a43fc166b0209c"
+      url: "https://pub.dev"
     source: hosted
     version: "0.27.5"
   shelf:
     dependency: transitive
     description:
       name: shelf
-      url: "https://pub.dartlang.org"
+      sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c
+      url: "https://pub.dev"
     source: hosted
     version: "1.4.0"
   shelf_packages_handler:
     dependency: transitive
     description:
       name: shelf_packages_handler
-      url: "https://pub.dartlang.org"
+      sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.1"
   shelf_static:
     dependency: transitive
     description:
       name: shelf_static
-      url: "https://pub.dartlang.org"
+      sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   shelf_web_socket:
     dependency: transitive
     description:
       name: shelf_web_socket
-      url: "https://pub.dartlang.org"
+      sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.2"
   source_gen:
     dependency: transitive
     description:
       name: source_gen
-      url: "https://pub.dartlang.org"
+      sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d"
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.6"
   source_helper:
     dependency: transitive
     description:
       name: source_helper
-      url: "https://pub.dartlang.org"
+      sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.3"
   source_map_stack_trace:
     dependency: transitive
     description:
       name: source_map_stack_trace
-      url: "https://pub.dartlang.org"
+      sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.1"
   source_maps:
     dependency: transitive
     description:
       name: source_maps
-      url: "https://pub.dartlang.org"
+      sha256: "490098075234dcedb83c5d949b4c93dad5e6b7702748de000be2b57b8e6b2427"
+      url: "https://pub.dev"
     source: hosted
     version: "0.10.11"
   source_span:
     dependency: transitive
     description:
       name: source_span
-      url: "https://pub.dartlang.org"
+      sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
+      url: "https://pub.dev"
     source: hosted
     version: "1.9.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      url: "https://pub.dartlang.org"
+      sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+      url: "https://pub.dev"
     source: hosted
     version: "1.11.0"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      url: "https://pub.dartlang.org"
+      sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.1"
   stream_transform:
     dependency: transitive
     description:
       name: stream_transform
-      url: "https://pub.dartlang.org"
+      sha256: f1d172e22a5432c042b5adfa9aff621372e4292231d9d73ad00f486ad01c2395
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      url: "https://pub.dartlang.org"
+      sha256: "862015c5db1f3f3c4ea3b94dc2490363a84262994b88902315ed74be1155612f"
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      url: "https://pub.dartlang.org"
+      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   test:
     dependency: "direct dev"
     description:
       name: test
-      url: "https://pub.dartlang.org"
+      sha256: "9ffb8dbda445ba2922522423e7c7288967de89129205ce2dadf856abfd2b72ae"
+      url: "https://pub.dev"
     source: hosted
     version: "1.21.6"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      url: "https://pub.dartlang.org"
+      sha256: ceeddf59d613e862e77f4b506cfc2945ac9637ce0b4c00f4f4c1ac639f3e9731
+      url: "https://pub.dev"
     source: hosted
     version: "0.4.14"
   test_core:
     dependency: transitive
     description:
       name: test_core
-      url: "https://pub.dartlang.org"
+      sha256: "2b38b8ecfa37f8d375b4aa2a106a86ade536b577411530c2ea68c83abb1f004b"
+      url: "https://pub.dev"
     source: hosted
     version: "0.4.18"
   timing:
     dependency: transitive
     description:
       name: timing
-      url: "https://pub.dartlang.org"
+      sha256: c386d07d7f5efc613479a7c4d9d64b03710b03cfaa7e8ad5f2bfb295a1f0dfad
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.0"
   truncate:
     dependency: "direct main"
     description:
       name: truncate
-      url: "https://pub.dartlang.org"
+      sha256: ac4f0c447d440886e53dc583423d2ce963add32160bf7790d5f72cbda5dc76c2
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.1"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
-      url: "https://pub.dartlang.org"
+      sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   uuid:
     dependency: transitive
     description:
       name: uuid
-      url: "https://pub.dartlang.org"
+      sha256: "2469694ad079893e3b434a627970c33f2fa5adc46dfe03c9617546969a9a8afc"
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.6"
   vm_service:
     dependency: transitive
     description:
       name: vm_service
-      url: "https://pub.dartlang.org"
+      sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7
+      url: "https://pub.dev"
     source: hosted
     version: "9.4.0"
   watcher:
     dependency: transitive
     description:
       name: watcher
-      url: "https://pub.dartlang.org"
+      sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.2"
   web_socket_channel:
     dependency: transitive
     description:
       name: web_socket_channel
-      url: "https://pub.dartlang.org"
+      sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd"
+      url: "https://pub.dev"
     source: hosted
     version: "2.2.0"
   webkit_inspection_protocol:
     dependency: transitive
     description:
       name: webkit_inspection_protocol
-      url: "https://pub.dartlang.org"
+      sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.0"
   yaml:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: yaml
-      url: "https://pub.dartlang.org"
+      sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.1"
 sdks:
-  dart: ">=2.18.0 <3.0.0"
+  dart: ">=2.19.0-0 <4.0.0"
diff --git a/app_dart/pubspec.yaml b/app_dart/pubspec.yaml
index 487f383..c34126a 100644
--- a/app_dart/pubspec.yaml
+++ b/app_dart/pubspec.yaml
@@ -8,10 +8,11 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.17.0 <3.0.0'
+  sdk: '>=2.19.0-0 <3.0.0'
 
 dependencies:
   appengine: ^0.13.2
+  args: ^2.3.1
   collection: ^1.17.0
   corsac_jwt: ^1.0.0-nullsafety.1
   crypto: ^3.0.2
@@ -22,25 +23,31 @@
   github: ^9.4.0
   googleapis: ^9.2.0
   googleapis_auth: ^1.3.1
-  gql: ^0.13.1
+  gql: ^0.14.0
   graphql: ^5.1.1
+  grpc: ^3.0.2
   http: ^0.13.5
   json_annotation: ^4.7.0
+  logging: ^1.1.0
+  meta: ^1.8.0
   mime: ^1.0.2
   neat_cache: ^2.0.2
+  path: ^1.8.2
+  process: ^4.2.4
   process_runner: ^4.1.2
   protobuf: ^2.1.0
   retry: ^3.1.0
   truncate: ^3.0.1
+  yaml: ^3.1.1
 
 dev_dependencies:
+  analyzer: ^4.0.0
   build_runner: ^2.3.2
   fake_async: ^1.3.1
-  flutter_lints: ^1.0.4
+  flutter_lints: ^2.0.1
   json_serializable: ^6.5.3
-  mockito: '>=5.2.0 <=5.3.0'
+  mockito: ^5.3.0
   platform: ^3.1.0
-  process: ^4.2.4
   test: ^1.21.6
 
 builders:
diff --git a/app_dart/test/request_handlers/github/webhook_subscription_test.dart b/app_dart/test/request_handlers/github/webhook_subscription_test.dart
index 53e3391..9740d49 100644
--- a/app_dart/test/request_handlers/github/webhook_subscription_test.dart
+++ b/app_dart/test/request_handlers/github/webhook_subscription_test.dart
@@ -263,12 +263,12 @@
       );
       bool batchRequestCalled = false;
 
-      Future<BatchResponse> _getBatchResponse() async {
+      Future<BatchResponse> getBatchResponse() async {
         batchRequestCalled = true;
         fail('Marking a draft ready for review should not trigger new builds');
       }
 
-      fakeBuildBucketClient.batchResponse = _getBatchResponse;
+      fakeBuildBucketClient.batchResponse = getBatchResponse;
 
       await tester.post(webhook);
 
@@ -285,7 +285,7 @@
       );
       bool batchRequestCalled = false;
 
-      Future<BatchResponse> _getBatchResponse() async {
+      Future<BatchResponse> getBatchResponse() async {
         batchRequestCalled = true;
         return BatchResponse(
           responses: <Response>[
@@ -307,7 +307,7 @@
         );
       }
 
-      fakeBuildBucketClient.batchResponse = _getBatchResponse;
+      fakeBuildBucketClient.batchResponse = getBatchResponse;
 
       await tester.post(webhook);
 
@@ -2307,7 +2307,7 @@
     test('When synchronized, cancels existing builds and schedules new ones', () async {
       const int issueNumber = 12345;
       bool batchRequestCalled = false;
-      Future<BatchResponse> _getBatchResponse() async {
+      Future<BatchResponse> getBatchResponse() async {
         batchRequestCalled = true;
         return BatchResponse(
           responses: <Response>[
@@ -2329,7 +2329,7 @@
         );
       }
 
-      fakeBuildBucketClient.batchResponse = _getBatchResponse;
+      fakeBuildBucketClient.batchResponse = getBatchResponse;
 
       tester.message = generateGithubWebhookMessage(
         action: 'synchronize',
@@ -2346,7 +2346,7 @@
     group('BuildBucket', () {
       const int issueNumber = 123;
 
-      Future<void> _testActions(String action) async {
+      Future<void> testActions(String action) async {
         when(issuesService.listLabelsByIssue(any, issueNumber)).thenAnswer((_) {
           return Stream<IssueLabel>.fromIterable(<IssueLabel>[
             IssueLabel()..name = 'Random Label',
@@ -2379,27 +2379,27 @@
       }
 
       test('Edited Action works properly', () async {
-        await _testActions('edited');
+        await testActions('edited');
       });
 
       test('Opened Action works properly', () async {
-        await _testActions('opened');
+        await testActions('opened');
       });
 
       test('Ready_for_review Action works properly', () async {
-        await _testActions('ready_for_review');
+        await testActions('ready_for_review');
       });
 
       test('Reopened Action works properly', () async {
-        await _testActions('reopened');
+        await testActions('reopened');
       });
 
       test('Labeled Action works properly', () async {
-        await _testActions('labeled');
+        await testActions('labeled');
       });
 
       test('Synchronize Action works properly', () async {
-        await _testActions('synchronize');
+        await testActions('synchronize');
       });
 
       test('Comments on PR but does not schedule builds for unmergeable PRs', () async {
diff --git a/app_dart/test/request_handling/static_file_handler_test.dart b/app_dart/test/request_handling/static_file_handler_test.dart
index 3519ad9..514a6e2 100644
--- a/app_dart/test/request_handling/static_file_handler_test.dart
+++ b/app_dart/test/request_handling/static_file_handler_test.dart
@@ -32,7 +32,7 @@
       fs.file('build/web/$dartMapFileName').writeAsStringSync('[{}]');
     });
 
-    Future<String> _decodeHandlerBody(Body body) {
+    Future<String> decodeHandlerBody(Body body) {
       return utf8.decoder.bind(body.serialize() as Stream<List<int>>).first;
     }
 
@@ -47,7 +47,7 @@
 
       final Body body = await tester.get(staticFileHandler);
       expect(body, isNotNull);
-      final String response = await _decodeHandlerBody(body);
+      final String response = await decodeHandlerBody(body);
       expect(response, indexFileContent);
     });
 
@@ -56,7 +56,7 @@
 
       final Body body = await tester.get(staticFileHandler);
       expect(body, isNotNull);
-      final String response = await _decodeHandlerBody(body);
+      final String response = await decodeHandlerBody(body);
       expect(response, '[{}]');
     });
 
@@ -66,7 +66,7 @@
 
       final Body body = await tester.get(staticFileHandler);
       expect(body, isNotNull);
-      final String response = await _decodeHandlerBody(body);
+      final String response = await decodeHandlerBody(body);
       expect(response, 'abc');
     });
   });
diff --git a/app_dart/test/service/buildbucket_test.dart b/app_dart/test/service/buildbucket_test.dart
index 504087a..b9eab76 100644
--- a/app_dart/test/service/buildbucket_test.dart
+++ b/app_dart/test/service/buildbucket_test.dart
@@ -43,7 +43,7 @@
       mockAccessTokenProvider = MockAccessTokenService();
     });
 
-    Future<T> _httpTest<R extends JsonBody, T>(
+    Future<T> httpTest<R extends JsonBody, T>(
       R request,
       String response,
       String urlPrefix,
@@ -105,7 +105,7 @@
         },
       );
 
-      final Build build = await _httpTest<ScheduleBuildRequest, Build>(
+      final Build build = await httpTest<ScheduleBuildRequest, Build>(
         request,
         buildJson,
         'builds',
@@ -128,7 +128,7 @@
         summaryMarkdown: 'Because I felt like it.',
       );
 
-      final Build build = await _httpTest<CancelBuildRequest, Build>(
+      final Build build = await httpTest<CancelBuildRequest, Build>(
         request,
         buildJson,
         'builds',
@@ -158,7 +158,7 @@
         ))
       ]);
 
-      final BatchResponse response = await _httpTest<BatchRequest, BatchResponse>(
+      final BatchResponse response = await httpTest<BatchRequest, BatchResponse>(
         request,
         batchJson,
         'builds',
@@ -183,7 +183,7 @@
         ))
       ]);
 
-      final BatchResponse response = await _httpTest<BatchRequest, BatchResponse>(
+      final BatchResponse response = await httpTest<BatchRequest, BatchResponse>(
         request,
         batchJson,
         'builds',
@@ -200,7 +200,7 @@
         id: '1234',
       );
 
-      final Build build = await _httpTest<GetBuildRequest, Build>(
+      final Build build = await httpTest<GetBuildRequest, Build>(
         request,
         buildJson,
         'builds',
@@ -221,7 +221,7 @@
         ),
       );
 
-      final SearchBuildsResponse response = await _httpTest<SearchBuildsRequest, SearchBuildsResponse>(
+      final SearchBuildsResponse response = await httpTest<SearchBuildsRequest, SearchBuildsResponse>(
         request,
         searchJson,
         'builds',
@@ -236,7 +236,7 @@
     test('ListBuilders', () async {
       const ListBuildersRequest request = ListBuildersRequest(project: 'test');
 
-      final ListBuildersResponse listBuildersResponse = await _httpTest<ListBuildersRequest, ListBuildersResponse>(
+      final ListBuildersResponse listBuildersResponse = await httpTest<ListBuildersRequest, ListBuildersResponse>(
         request,
         builderJson,
         'builders',
diff --git a/app_dart/test/service/datastore_test.dart b/app_dart/test/service/datastore_test.dart
index 4ea8166..2fa08aa 100644
--- a/app_dart/test/service/datastore_test.dart
+++ b/app_dart/test/service/datastore_test.dart
@@ -172,7 +172,7 @@
 
     test('LookupByValue', () async {
       config.db.values[commit.key] = commit;
-      final Commit? expected = await datastoreService.lookupByValue(commit.key);
+      final Commit expected = await datastoreService.lookupByValue(commit.key);
       expect(expected, equals(commit));
     });
 
diff --git a/app_dart/test/src/utilities/entity_generators.dart b/app_dart/test/src/utilities/entity_generators.dart
index 197b210..aa465b1 100644
--- a/app_dart/test/src/utilities/entity_generators.dart
+++ b/app_dart/test/src/utilities/entity_generators.dart
@@ -31,7 +31,7 @@
       branch: branch,
       key: generateKey<String>(
         Commit,
-        'flutter/$repo/$branch/' + (sha ?? '$i'),
+        'flutter/$repo/$branch/${sha ?? '$i'}',
       ),
     );
 
diff --git a/app_dart/test/src/utilities/mocks.dart b/app_dart/test/src/utilities/mocks.dart
index c0daa4c..87c0686 100644
--- a/app_dart/test/src/utilities/mocks.dart
+++ b/app_dart/test/src/utilities/mocks.dart
@@ -55,18 +55,6 @@
 }) async =>
     FakeAuthClient(baseClient ?? MockClient((_) => throw const InternalServerError('Test did not set up HttpClient')));
 
-const List<MockSpec<dynamic>> _mocks = <MockSpec<dynamic>>[
-  MockSpec<Cache<Uint8List>>(),
-  MockSpec<GitHub>(
-    fallbackGenerators: <Symbol, Function>{
-      #postJSON: postJsonShim,
-    },
-  ),
-  // MockSpec<GerritService>(fallbackGenerators: <Symbol, Function>{
-  //   #authClientProvider: authClientProviderShim,
-  // }),
-];
-
 @GenerateMocks(
   <Type>[
     AccessClientProvider,
@@ -92,7 +80,14 @@
     TabledataResource,
     UsersService,
   ],
-  customMocks: _mocks,
+  customMocks: [
+    MockSpec<Cache<Uint8List>>(),
+    MockSpec<GitHub>(
+      fallbackGenerators: <Symbol, Function>{
+        #postJSON: postJsonShim,
+      },
+    ),
+  ],
 )
 void main() {}
 
diff --git a/app_dart/test/src/utilities/mocks.mocks.dart b/app_dart/test/src/utilities/mocks.mocks.dart
new file mode 100644
index 0000000..f524363
--- /dev/null
+++ b/app_dart/test/src/utilities/mocks.mocks.dart
@@ -0,0 +1,7429 @@
+// Mocks generated by Mockito 5.3.2 from annotations
+// in cocoon_service/test/src/utilities/mocks.dart.
+// Do not manually edit this file.
+
+// ignore_for_file: no_leading_underscores_for_library_prefixes
+import 'dart:async' as _i17;
+import 'dart:convert' as _i16;
+import 'dart:io' as _i15;
+import 'dart:typed_data' as _i27;
+
+import 'package:cocoon_service/src/foundation/github_checks_util.dart' as _i11;
+import 'package:cocoon_service/src/foundation/utils.dart' as _i35;
+import 'package:cocoon_service/src/model/appengine/commit.dart' as _i34;
+import 'package:cocoon_service/src/model/appengine/task.dart' as _i36;
+import 'package:cocoon_service/src/model/ci_yaml/target.dart' as _i32;
+import 'package:cocoon_service/src/model/github/checks.dart' as _i33;
+import 'package:cocoon_service/src/model/luci/buildbucket.dart' as _i9;
+import 'package:cocoon_service/src/model/luci/push_message.dart' as _i30;
+import 'package:cocoon_service/src/request_handling/pubsub.dart' as _i19;
+import 'package:cocoon_service/src/service/access_client_provider.dart' as _i5;
+import 'package:cocoon_service/src/service/access_token_provider.dart' as _i21;
+import 'package:cocoon_service/src/service/bigquery.dart' as _i22;
+import 'package:cocoon_service/src/service/branch_service.dart' as _i23;
+import 'package:cocoon_service/src/service/buildbucket.dart' as _i18;
+import 'package:cocoon_service/src/service/config.dart' as _i3;
+import 'package:cocoon_service/src/service/datastore.dart' as _i37;
+import 'package:cocoon_service/src/service/gerrit_service.dart' as _i7;
+import 'package:cocoon_service/src/service/github_checks_service.dart' as _i28;
+import 'package:cocoon_service/src/service/github_service.dart' as _i25;
+import 'package:cocoon_service/src/service/luci_build_service.dart' as _i31;
+import 'package:cocoon_service/src/service/scheduler.dart' as _i29;
+import 'package:github/github.dart' as _i10;
+import 'package:github/hooks.dart' as _i24;
+import 'package:googleapis/bigquery/v2.dart' as _i6;
+import 'package:googleapis_auth/auth_io.dart' as _i4;
+import 'package:graphql/src/cache/cache.dart' as _i13;
+import 'package:graphql/src/core/core.dart' as _i12;
+import 'package:graphql/src/graphql_client.dart' as _i14;
+import 'package:http/http.dart' as _i2;
+import 'package:mockito/mockito.dart' as _i1;
+import 'package:neat_cache/neat_cache.dart' as _i20;
+import 'package:process/src/interface/process_manager.dart' as _i38;
+import 'package:retry/retry.dart' as _i8;
+
+import '../../service/cache_service_test.dart' as _i26;
+import 'mocks.dart' as _i39;
+
+// ignore_for_file: type=lint
+// ignore_for_file: avoid_redundant_argument_values
+// ignore_for_file: avoid_setters_without_getters
+// ignore_for_file: comment_references
+// ignore_for_file: implementation_imports
+// ignore_for_file: invalid_use_of_visible_for_testing_member
+// ignore_for_file: prefer_const_constructors
+// ignore_for_file: unnecessary_parenthesis
+// ignore_for_file: camel_case_types
+// ignore_for_file: subtype_of_sealed_class
+
+class _FakeClient_0 extends _i1.SmartFake implements _i2.Client {
+  _FakeClient_0(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeConfig_1 extends _i1.SmartFake implements _i3.Config {
+  _FakeConfig_1(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeAccessToken_2 extends _i1.SmartFake implements _i4.AccessToken {
+  _FakeAccessToken_2(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeAccessClientProvider_3 extends _i1.SmartFake implements _i5.AccessClientProvider {
+  _FakeAccessClientProvider_3(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeTabledataResource_4 extends _i1.SmartFake implements _i6.TabledataResource {
+  _FakeTabledataResource_4(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeJobsResource_5 extends _i1.SmartFake implements _i6.JobsResource {
+  _FakeJobsResource_5(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGerritService_6 extends _i1.SmartFake implements _i7.GerritService {
+  _FakeGerritService_6(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRetryOptions_7 extends _i1.SmartFake implements _i8.RetryOptions {
+  _FakeRetryOptions_7(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeBuild_8 extends _i1.SmartFake implements _i9.Build {
+  _FakeBuild_8(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeSearchBuildsResponse_9 extends _i1.SmartFake implements _i9.SearchBuildsResponse {
+  _FakeSearchBuildsResponse_9(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeBatchResponse_10 extends _i1.SmartFake implements _i9.BatchResponse {
+  _FakeBatchResponse_10(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeListBuildersResponse_11 extends _i1.SmartFake implements _i9.ListBuildersResponse {
+  _FakeListBuildersResponse_11(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitHub_12 extends _i1.SmartFake implements _i10.GitHub {
+  _FakeGitHub_12(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeIssue_13 extends _i1.SmartFake implements _i10.Issue {
+  _FakeIssue_13(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeIssueComment_14 extends _i1.SmartFake implements _i10.IssueComment {
+  _FakeIssueComment_14(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeIssueLabel_15 extends _i1.SmartFake implements _i10.IssueLabel {
+  _FakeIssueLabel_15(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeMilestone_16 extends _i1.SmartFake implements _i10.Milestone {
+  _FakeMilestone_16(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGithubChecksUtil_17 extends _i1.SmartFake implements _i11.GithubChecksUtil {
+  _FakeGithubChecksUtil_17(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCheckRunConclusion_18 extends _i1.SmartFake implements _i10.CheckRunConclusion {
+  _FakeCheckRunConclusion_18(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCheckRunStatus_19 extends _i1.SmartFake implements _i10.CheckRunStatus {
+  _FakeCheckRunStatus_19(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCheckSuite_20 extends _i1.SmartFake implements _i10.CheckSuite {
+  _FakeCheckSuite_20(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCheckRun_21 extends _i1.SmartFake implements _i10.CheckRun {
+  _FakeCheckRun_21(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePullRequest_22 extends _i1.SmartFake implements _i10.PullRequest {
+  _FakePullRequest_22(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitReference_23 extends _i1.SmartFake implements _i10.GitReference {
+  _FakeGitReference_23(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRateLimit_24 extends _i1.SmartFake implements _i10.RateLimit {
+  _FakeRateLimit_24(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitBlob_25 extends _i1.SmartFake implements _i10.GitBlob {
+  _FakeGitBlob_25(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitCommit_26 extends _i1.SmartFake implements _i10.GitCommit {
+  _FakeGitCommit_26(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitTag_27 extends _i1.SmartFake implements _i10.GitTag {
+  _FakeGitTag_27(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitTree_28 extends _i1.SmartFake implements _i10.GitTree {
+  _FakeGitTree_28(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeDefaultPolicies_29 extends _i1.SmartFake implements _i12.DefaultPolicies {
+  _FakeDefaultPolicies_29(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeLink_30 extends _i1.SmartFake implements _i12.Link {
+  _FakeLink_30(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGraphQLCache_31 extends _i1.SmartFake implements _i13.GraphQLCache {
+  _FakeGraphQLCache_31(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeQueryManager_32 extends _i1.SmartFake implements _i12.QueryManager {
+  _FakeQueryManager_32(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGraphQLClient_33 extends _i1.SmartFake implements _i14.GraphQLClient {
+  _FakeGraphQLClient_33(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeObservableQuery_34<TParsed> extends _i1.SmartFake implements _i12.ObservableQuery<TParsed> {
+  _FakeObservableQuery_34(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeQueryResult_35<TParsed extends Object?> extends _i1.SmartFake implements _i12.QueryResult<TParsed> {
+  _FakeQueryResult_35(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeDuration_36 extends _i1.SmartFake implements Duration {
+  _FakeDuration_36(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeHttpClientRequest_37 extends _i1.SmartFake implements _i15.HttpClientRequest {
+  _FakeHttpClientRequest_37(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeUri_38 extends _i1.SmartFake implements Uri {
+  _FakeUri_38(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeHttpHeaders_39 extends _i1.SmartFake implements _i15.HttpHeaders {
+  _FakeHttpHeaders_39(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeHttpClientResponse_40 extends _i1.SmartFake implements _i15.HttpClientResponse {
+  _FakeHttpClientResponse_40(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeEncoding_41 extends _i1.SmartFake implements _i16.Encoding {
+  _FakeEncoding_41(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeSocket_42 extends _i1.SmartFake implements _i15.Socket {
+  _FakeSocket_42(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeStreamSubscription_43<T> extends _i1.SmartFake implements _i17.StreamSubscription<T> {
+  _FakeStreamSubscription_43(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeJobCancelResponse_44 extends _i1.SmartFake implements _i6.JobCancelResponse {
+  _FakeJobCancelResponse_44(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeJob_45 extends _i1.SmartFake implements _i6.Job {
+  _FakeJob_45(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGetQueryResultsResponse_46 extends _i1.SmartFake implements _i6.GetQueryResultsResponse {
+  _FakeGetQueryResultsResponse_46(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeJobList_47 extends _i1.SmartFake implements _i6.JobList {
+  _FakeJobList_47(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeQueryResponse_48 extends _i1.SmartFake implements _i6.QueryResponse {
+  _FakeQueryResponse_48(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeBuildBucketClient_49 extends _i1.SmartFake implements _i18.BuildBucketClient {
+  _FakeBuildBucketClient_49(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePubSub_50 extends _i1.SmartFake implements _i19.PubSub {
+  _FakePubSub_50(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeProcess_51 extends _i1.SmartFake implements _i15.Process {
+  _FakeProcess_51(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeProcessResult_52 extends _i1.SmartFake implements _i15.ProcessResult {
+  _FakeProcessResult_52(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePullRequestMerge_53 extends _i1.SmartFake implements _i10.PullRequestMerge {
+  _FakePullRequestMerge_53(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePullRequestComment_54 extends _i1.SmartFake implements _i10.PullRequestComment {
+  _FakePullRequestComment_54(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePullRequestReview_55 extends _i1.SmartFake implements _i10.PullRequestReview {
+  _FakePullRequestReview_55(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepository_56 extends _i1.SmartFake implements _i10.Repository {
+  _FakeRepository_56(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeLicenseDetails_57 extends _i1.SmartFake implements _i10.LicenseDetails {
+  _FakeLicenseDetails_57(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeLanguageBreakdown_58 extends _i1.SmartFake implements _i10.LanguageBreakdown {
+  _FakeLanguageBreakdown_58(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeBranch_59 extends _i1.SmartFake implements _i10.Branch {
+  _FakeBranch_59(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCommitComment_60 extends _i1.SmartFake implements _i10.CommitComment {
+  _FakeCommitComment_60(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoryCommit_61 extends _i1.SmartFake implements _i10.RepositoryCommit {
+  _FakeRepositoryCommit_61(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitHubComparison_62 extends _i1.SmartFake implements _i10.GitHubComparison {
+  _FakeGitHubComparison_62(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitHubFile_63 extends _i1.SmartFake implements _i10.GitHubFile {
+  _FakeGitHubFile_63(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoryContents_64 extends _i1.SmartFake implements _i10.RepositoryContents {
+  _FakeRepositoryContents_64(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeContentCreation_65 extends _i1.SmartFake implements _i10.ContentCreation {
+  _FakeContentCreation_65(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeHook_66 extends _i1.SmartFake implements _i10.Hook {
+  _FakeHook_66(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePublicKey_67 extends _i1.SmartFake implements _i10.PublicKey {
+  _FakePublicKey_67(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoryPages_68 extends _i1.SmartFake implements _i10.RepositoryPages {
+  _FakeRepositoryPages_68(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePageBuild_69 extends _i1.SmartFake implements _i10.PageBuild {
+  _FakePageBuild_69(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRelease_70 extends _i1.SmartFake implements _i10.Release {
+  _FakeRelease_70(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeReleaseAsset_71 extends _i1.SmartFake implements _i10.ReleaseAsset {
+  _FakeReleaseAsset_71(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeContributorParticipation_72 extends _i1.SmartFake implements _i10.ContributorParticipation {
+  _FakeContributorParticipation_72(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoryStatus_73 extends _i1.SmartFake implements _i10.RepositoryStatus {
+  _FakeRepositoryStatus_73(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCombinedRepositoryStatus_74 extends _i1.SmartFake implements _i10.CombinedRepositoryStatus {
+  _FakeCombinedRepositoryStatus_74(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeReleaseNotes_75 extends _i1.SmartFake implements _i10.ReleaseNotes {
+  _FakeReleaseNotes_75(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeTableDataInsertAllResponse_76 extends _i1.SmartFake implements _i6.TableDataInsertAllResponse {
+  _FakeTableDataInsertAllResponse_76(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeTableDataList_77 extends _i1.SmartFake implements _i6.TableDataList {
+  _FakeTableDataList_77(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeUser_78 extends _i1.SmartFake implements _i10.User {
+  _FakeUser_78(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCurrentUser_79 extends _i1.SmartFake implements _i10.CurrentUser {
+  _FakeCurrentUser_79(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeEntry_80<T> extends _i1.SmartFake implements _i20.Entry<T> {
+  _FakeEntry_80(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCache_81<T> extends _i1.SmartFake implements _i20.Cache<T> {
+  _FakeCache_81(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeActivityService_82 extends _i1.SmartFake implements _i10.ActivityService {
+  _FakeActivityService_82(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeAuthorizationsService_83 extends _i1.SmartFake implements _i10.AuthorizationsService {
+  _FakeAuthorizationsService_83(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGistsService_84 extends _i1.SmartFake implements _i10.GistsService {
+  _FakeGistsService_84(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeGitService_85 extends _i1.SmartFake implements _i10.GitService {
+  _FakeGitService_85(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeIssuesService_86 extends _i1.SmartFake implements _i10.IssuesService {
+  _FakeIssuesService_86(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeMiscService_87 extends _i1.SmartFake implements _i10.MiscService {
+  _FakeMiscService_87(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeOrganizationsService_88 extends _i1.SmartFake implements _i10.OrganizationsService {
+  _FakeOrganizationsService_88(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePullRequestsService_89 extends _i1.SmartFake implements _i10.PullRequestsService {
+  _FakePullRequestsService_89(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoriesService_90 extends _i1.SmartFake implements _i10.RepositoriesService {
+  _FakeRepositoriesService_90(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeSearchService_91 extends _i1.SmartFake implements _i10.SearchService {
+  _FakeSearchService_91(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeUrlShortenerService_92 extends _i1.SmartFake implements _i10.UrlShortenerService {
+  _FakeUrlShortenerService_92(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeUsersService_93 extends _i1.SmartFake implements _i10.UsersService {
+  _FakeUsersService_93(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeChecksService_94 extends _i1.SmartFake implements _i10.ChecksService {
+  _FakeChecksService_94(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeResponse_95 extends _i1.SmartFake implements _i2.Response {
+  _FakeResponse_95(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+/// A class which mocks [AccessClientProvider].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockAccessClientProvider extends _i1.Mock implements _i5.AccessClientProvider {
+  MockAccessClientProvider() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i17.Future<_i2.Client> createAccessClient(
+          {List<String>? scopes = const [r'https://www.googleapis.com/auth/cloud-platform']}) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createAccessClient,
+          [],
+          {#scopes: scopes},
+        ),
+        returnValue: _i17.Future<_i2.Client>.value(_FakeClient_0(
+          this,
+          Invocation.method(
+            #createAccessClient,
+            [],
+            {#scopes: scopes},
+          ),
+        )),
+      ) as _i17.Future<_i2.Client>);
+}
+
+/// A class which mocks [AccessTokenService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockAccessTokenService extends _i1.Mock implements _i21.AccessTokenService {
+  MockAccessTokenService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i3.Config get config => (super.noSuchMethod(
+        Invocation.getter(#config),
+        returnValue: _FakeConfig_1(
+          this,
+          Invocation.getter(#config),
+        ),
+      ) as _i3.Config);
+  @override
+  _i17.Future<_i4.AccessToken> createAccessToken() => (super.noSuchMethod(
+        Invocation.method(
+          #createAccessToken,
+          [],
+        ),
+        returnValue: _i17.Future<_i4.AccessToken>.value(_FakeAccessToken_2(
+          this,
+          Invocation.method(
+            #createAccessToken,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i4.AccessToken>);
+}
+
+/// A class which mocks [BigqueryService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockBigqueryService extends _i1.Mock implements _i22.BigqueryService {
+  MockBigqueryService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i5.AccessClientProvider get accessClientProvider => (super.noSuchMethod(
+        Invocation.getter(#accessClientProvider),
+        returnValue: _FakeAccessClientProvider_3(
+          this,
+          Invocation.getter(#accessClientProvider),
+        ),
+      ) as _i5.AccessClientProvider);
+  @override
+  _i17.Future<_i6.TabledataResource> defaultTabledata() => (super.noSuchMethod(
+        Invocation.method(
+          #defaultTabledata,
+          [],
+        ),
+        returnValue: _i17.Future<_i6.TabledataResource>.value(_FakeTabledataResource_4(
+          this,
+          Invocation.method(
+            #defaultTabledata,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i6.TabledataResource>);
+  @override
+  _i17.Future<_i6.JobsResource> defaultJobs() => (super.noSuchMethod(
+        Invocation.method(
+          #defaultJobs,
+          [],
+        ),
+        returnValue: _i17.Future<_i6.JobsResource>.value(_FakeJobsResource_5(
+          this,
+          Invocation.method(
+            #defaultJobs,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i6.JobsResource>);
+  @override
+  _i17.Future<List<_i22.BuilderStatistic>> listBuilderStatistic(
+    String? projectId, {
+    int? limit = 100,
+    String? bucket = r'prod',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listBuilderStatistic,
+          [projectId],
+          {
+            #limit: limit,
+            #bucket: bucket,
+          },
+        ),
+        returnValue: _i17.Future<List<_i22.BuilderStatistic>>.value(<_i22.BuilderStatistic>[]),
+      ) as _i17.Future<List<_i22.BuilderStatistic>>);
+  @override
+  _i17.Future<List<_i22.BuilderRecord>> listRecentBuildRecordsForBuilder(
+    String? projectId, {
+    String? builder,
+    int? limit,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listRecentBuildRecordsForBuilder,
+          [projectId],
+          {
+            #builder: builder,
+            #limit: limit,
+          },
+        ),
+        returnValue: _i17.Future<List<_i22.BuilderRecord>>.value(<_i22.BuilderRecord>[]),
+      ) as _i17.Future<List<_i22.BuilderRecord>>);
+}
+
+/// A class which mocks [BranchService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockBranchService extends _i1.Mock implements _i23.BranchService {
+  MockBranchService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i3.Config get config => (super.noSuchMethod(
+        Invocation.getter(#config),
+        returnValue: _FakeConfig_1(
+          this,
+          Invocation.getter(#config),
+        ),
+      ) as _i3.Config);
+  @override
+  _i7.GerritService get gerritService => (super.noSuchMethod(
+        Invocation.getter(#gerritService),
+        returnValue: _FakeGerritService_6(
+          this,
+          Invocation.getter(#gerritService),
+        ),
+      ) as _i7.GerritService);
+  @override
+  _i8.RetryOptions get retryOptions => (super.noSuchMethod(
+        Invocation.getter(#retryOptions),
+        returnValue: _FakeRetryOptions_7(
+          this,
+          Invocation.getter(#retryOptions),
+        ),
+      ) as _i8.RetryOptions);
+  @override
+  _i17.Future<void> handleCreateRequest(_i24.CreateEvent? createEvent) => (super.noSuchMethod(
+        Invocation.method(
+          #handleCreateRequest,
+          [createEvent],
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<void> branchFlutterRecipes(String? branch) => (super.noSuchMethod(
+        Invocation.method(
+          #branchFlutterRecipes,
+          [branch],
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<List<Map<String, String>>> getReleaseBranches({
+    required _i25.GithubService? githubService,
+    required _i10.RepositorySlug? slug,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseBranches,
+          [],
+          {
+            #githubService: githubService,
+            #slug: slug,
+          },
+        ),
+        returnValue: _i17.Future<List<Map<String, String>>>.value(<Map<String, String>>[]),
+      ) as _i17.Future<List<Map<String, String>>>);
+}
+
+/// A class which mocks [BuildBucketClient].
+///
+/// See the documentation for Mockito's code generation for more information.
+// ignore: must_be_immutable
+class MockBuildBucketClient extends _i1.Mock implements _i18.BuildBucketClient {
+  MockBuildBucketClient() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  String get buildBucketBuildUri => (super.noSuchMethod(
+        Invocation.getter(#buildBucketBuildUri),
+        returnValue: '',
+      ) as String);
+  @override
+  String get buildBucketBuilderUri => (super.noSuchMethod(
+        Invocation.getter(#buildBucketBuilderUri),
+        returnValue: '',
+      ) as String);
+  @override
+  _i2.Client get httpClient => (super.noSuchMethod(
+        Invocation.getter(#httpClient),
+        returnValue: _FakeClient_0(
+          this,
+          Invocation.getter(#httpClient),
+        ),
+      ) as _i2.Client);
+  @override
+  _i17.Future<_i9.Build> scheduleBuild(
+    _i9.ScheduleBuildRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #scheduleBuild,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+          this,
+          Invocation.method(
+            #scheduleBuild,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.Build>);
+  @override
+  _i17.Future<_i9.SearchBuildsResponse> searchBuilds(
+    _i9.SearchBuildsRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #searchBuilds,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.SearchBuildsResponse>.value(_FakeSearchBuildsResponse_9(
+          this,
+          Invocation.method(
+            #searchBuilds,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.SearchBuildsResponse>);
+  @override
+  _i17.Future<_i9.BatchResponse> batch(
+    _i9.BatchRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #batch,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.BatchResponse>.value(_FakeBatchResponse_10(
+          this,
+          Invocation.method(
+            #batch,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.BatchResponse>);
+  @override
+  _i17.Future<_i9.Build> cancelBuild(
+    _i9.CancelBuildRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #cancelBuild,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+          this,
+          Invocation.method(
+            #cancelBuild,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.Build>);
+  @override
+  _i17.Future<_i9.Build> getBuild(
+    _i9.GetBuildRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getBuild,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+          this,
+          Invocation.method(
+            #getBuild,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.Build>);
+  @override
+  _i17.Future<_i9.ListBuildersResponse> listBuilders(
+    _i9.ListBuildersRequest? request, {
+    String? buildBucketUri = r'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builders',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listBuilders,
+          [request],
+          {#buildBucketUri: buildBucketUri},
+        ),
+        returnValue: _i17.Future<_i9.ListBuildersResponse>.value(_FakeListBuildersResponse_11(
+          this,
+          Invocation.method(
+            #listBuilders,
+            [request],
+            {#buildBucketUri: buildBucketUri},
+          ),
+        )),
+      ) as _i17.Future<_i9.ListBuildersResponse>);
+  @override
+  void close() => super.noSuchMethod(
+        Invocation.method(
+          #close,
+          [],
+        ),
+        returnValueForMissingStub: null,
+      );
+}
+
+/// A class which mocks [FakeEntry].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockFakeEntry extends _i1.Mock implements _i26.FakeEntry {
+  MockFakeEntry() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i27.Uint8List get value => (super.noSuchMethod(
+        Invocation.getter(#value),
+        returnValue: _i27.Uint8List(0),
+      ) as _i27.Uint8List);
+  @override
+  set value(_i27.Uint8List? _value) => super.noSuchMethod(
+        Invocation.setter(
+          #value,
+          _value,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<_i27.Uint8List> get([
+    _i17.Future<_i27.Uint8List?> Function()? create,
+    Duration? ttl,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [
+            create,
+            ttl,
+          ],
+        ),
+        returnValue: _i17.Future<_i27.Uint8List>.value(_i27.Uint8List(0)),
+      ) as _i17.Future<_i27.Uint8List>);
+  @override
+  _i17.Future<void> purge({int? retries = 0}) => (super.noSuchMethod(
+        Invocation.method(
+          #purge,
+          [],
+          {#retries: retries},
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<_i27.Uint8List?> set(
+    _i27.Uint8List? value, [
+    Duration? ttl,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #set,
+          [
+            value,
+            ttl,
+          ],
+        ),
+        returnValue: _i17.Future<_i27.Uint8List?>.value(),
+      ) as _i17.Future<_i27.Uint8List?>);
+}
+
+/// A class which mocks [IssuesService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockIssuesService extends _i1.Mock implements _i10.IssuesService {
+  MockIssuesService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Stream<_i10.Issue> listAll({
+    int? milestoneNumber,
+    String? state,
+    String? direction,
+    String? sort,
+    DateTime? since,
+    int? perPage,
+    List<String>? labels,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listAll,
+          [],
+          {
+            #milestoneNumber: milestoneNumber,
+            #state: state,
+            #direction: direction,
+            #sort: sort,
+            #since: since,
+            #perPage: perPage,
+            #labels: labels,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Issue>.empty(),
+      ) as _i17.Stream<_i10.Issue>);
+  @override
+  _i17.Stream<_i10.Issue> listByUser({
+    int? milestoneNumber,
+    String? state,
+    String? direction,
+    String? sort,
+    DateTime? since,
+    int? perPage,
+    List<String>? labels,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listByUser,
+          [],
+          {
+            #milestoneNumber: milestoneNumber,
+            #state: state,
+            #direction: direction,
+            #sort: sort,
+            #since: since,
+            #perPage: perPage,
+            #labels: labels,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Issue>.empty(),
+      ) as _i17.Stream<_i10.Issue>);
+  @override
+  _i17.Stream<_i10.Issue> listByOrg(
+    String? org, {
+    int? milestoneNumber,
+    String? state,
+    String? direction,
+    String? sort,
+    DateTime? since,
+    int? perPage,
+    List<String>? labels,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listByOrg,
+          [org],
+          {
+            #milestoneNumber: milestoneNumber,
+            #state: state,
+            #direction: direction,
+            #sort: sort,
+            #since: since,
+            #perPage: perPage,
+            #labels: labels,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Issue>.empty(),
+      ) as _i17.Stream<_i10.Issue>);
+  @override
+  _i17.Stream<_i10.Issue> listByRepo(
+    _i10.RepositorySlug? slug, {
+    int? milestoneNumber,
+    String? state,
+    String? direction,
+    String? sort,
+    DateTime? since,
+    int? perPage,
+    List<String>? labels,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listByRepo,
+          [slug],
+          {
+            #milestoneNumber: milestoneNumber,
+            #state: state,
+            #direction: direction,
+            #sort: sort,
+            #since: since,
+            #perPage: perPage,
+            #labels: labels,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Issue>.empty(),
+      ) as _i17.Stream<_i10.Issue>);
+  @override
+  _i17.Stream<_i10.Reaction> listReactions(
+    _i10.RepositorySlug? slug,
+    int? issueNumber, {
+    _i10.ReactionType? content,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReactions,
+          [
+            slug,
+            issueNumber,
+          ],
+          {#content: content},
+        ),
+        returnValue: _i17.Stream<_i10.Reaction>.empty(),
+      ) as _i17.Stream<_i10.Reaction>);
+  @override
+  _i17.Future<_i10.Issue> edit(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+    _i10.IssueRequest? issue,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #edit,
+          [
+            slug,
+            issueNumber,
+            issue,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Issue>.value(_FakeIssue_13(
+          this,
+          Invocation.method(
+            #edit,
+            [
+              slug,
+              issueNumber,
+              issue,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Issue>);
+  @override
+  _i17.Future<_i10.Issue> get(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [
+            slug,
+            issueNumber,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Issue>.value(_FakeIssue_13(
+          this,
+          Invocation.method(
+            #get,
+            [
+              slug,
+              issueNumber,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Issue>);
+  @override
+  _i17.Future<_i10.Issue> create(
+    _i10.RepositorySlug? slug,
+    _i10.IssueRequest? issue,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #create,
+          [
+            slug,
+            issue,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Issue>.value(_FakeIssue_13(
+          this,
+          Invocation.method(
+            #create,
+            [
+              slug,
+              issue,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Issue>);
+  @override
+  _i17.Stream<_i10.User> listAssignees(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listAssignees,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Future<bool> isAssignee(
+    _i10.RepositorySlug? slug,
+    String? repoName,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #isAssignee,
+          [
+            slug,
+            repoName,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.IssueComment> listCommentsByIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommentsByIssue,
+          [
+            slug,
+            issueNumber,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.IssueComment>.empty(),
+      ) as _i17.Stream<_i10.IssueComment>);
+  @override
+  _i17.Stream<_i10.IssueComment> listCommentsByRepo(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCommentsByRepo,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.IssueComment>.empty(),
+      ) as _i17.Stream<_i10.IssueComment>);
+  @override
+  _i17.Future<_i10.IssueComment> getComment(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getComment,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueComment>.value(_FakeIssueComment_14(
+          this,
+          Invocation.method(
+            #getComment,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueComment>);
+  @override
+  _i17.Future<_i10.IssueComment> createComment(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+    String? body,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createComment,
+          [
+            slug,
+            issueNumber,
+            body,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueComment>.value(_FakeIssueComment_14(
+          this,
+          Invocation.method(
+            #createComment,
+            [
+              slug,
+              issueNumber,
+              body,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueComment>);
+  @override
+  _i17.Future<_i10.IssueComment> updateComment(
+    _i10.RepositorySlug? slug,
+    int? id,
+    String? body,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateComment,
+          [
+            slug,
+            id,
+            body,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueComment>.value(_FakeIssueComment_14(
+          this,
+          Invocation.method(
+            #updateComment,
+            [
+              slug,
+              id,
+              body,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueComment>);
+  @override
+  _i17.Future<bool> deleteComment(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteComment,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.IssueLabel> listLabels(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listLabels,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.IssueLabel>.empty(),
+      ) as _i17.Stream<_i10.IssueLabel>);
+  @override
+  _i17.Future<_i10.IssueLabel> getLabel(
+    _i10.RepositorySlug? slug,
+    String? name,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getLabel,
+          [
+            slug,
+            name,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueLabel>.value(_FakeIssueLabel_15(
+          this,
+          Invocation.method(
+            #getLabel,
+            [
+              slug,
+              name,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueLabel>);
+  @override
+  _i17.Future<_i10.IssueLabel> createLabel(
+    _i10.RepositorySlug? slug,
+    String? name,
+    String? color,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createLabel,
+          [
+            slug,
+            name,
+            color,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueLabel>.value(_FakeIssueLabel_15(
+          this,
+          Invocation.method(
+            #createLabel,
+            [
+              slug,
+              name,
+              color,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueLabel>);
+  @override
+  _i17.Future<_i10.IssueLabel> editLabel(
+    _i10.RepositorySlug? slug,
+    String? name,
+    String? color,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editLabel,
+          [
+            slug,
+            name,
+            color,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.IssueLabel>.value(_FakeIssueLabel_15(
+          this,
+          Invocation.method(
+            #editLabel,
+            [
+              slug,
+              name,
+              color,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.IssueLabel>);
+  @override
+  _i17.Future<bool> deleteLabel(
+    _i10.RepositorySlug? slug,
+    String? name,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteLabel,
+          [
+            slug,
+            name,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.IssueLabel> listLabelsByIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listLabelsByIssue,
+          [
+            slug,
+            issueNumber,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.IssueLabel>.empty(),
+      ) as _i17.Stream<_i10.IssueLabel>);
+  @override
+  _i17.Future<List<_i10.IssueLabel>> addLabelsToIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+    List<String>? labels,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #addLabelsToIssue,
+          [
+            slug,
+            issueNumber,
+            labels,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i10.IssueLabel>>.value(<_i10.IssueLabel>[]),
+      ) as _i17.Future<List<_i10.IssueLabel>>);
+  @override
+  _i17.Future<List<_i10.IssueLabel>> replaceLabelsForIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+    List<String>? labels,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #replaceLabelsForIssue,
+          [
+            slug,
+            issueNumber,
+            labels,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i10.IssueLabel>>.value(<_i10.IssueLabel>[]),
+      ) as _i17.Future<List<_i10.IssueLabel>>);
+  @override
+  _i17.Future<bool> removeLabelForIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+    String? label,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #removeLabelForIssue,
+          [
+            slug,
+            issueNumber,
+            label,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> removeAllLabelsForIssue(
+    _i10.RepositorySlug? slug,
+    int? issueNumber,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #removeAllLabelsForIssue,
+          [
+            slug,
+            issueNumber,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.Milestone> listMilestones(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listMilestones,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Milestone>.empty(),
+      ) as _i17.Stream<_i10.Milestone>);
+  @override
+  _i17.Future<_i10.Milestone> createMilestone(
+    _i10.RepositorySlug? slug,
+    _i10.CreateMilestone? request,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createMilestone,
+          [
+            slug,
+            request,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Milestone>.value(_FakeMilestone_16(
+          this,
+          Invocation.method(
+            #createMilestone,
+            [
+              slug,
+              request,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Milestone>);
+  @override
+  _i17.Future<bool> deleteMilestone(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteMilestone,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+}
+
+/// A class which mocks [GithubChecksService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGithubChecksService extends _i1.Mock implements _i28.GithubChecksService {
+  MockGithubChecksService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i3.Config get config => (super.noSuchMethod(
+        Invocation.getter(#config),
+        returnValue: _FakeConfig_1(
+          this,
+          Invocation.getter(#config),
+        ),
+      ) as _i3.Config);
+  @override
+  set config(_i3.Config? _config) => super.noSuchMethod(
+        Invocation.setter(
+          #config,
+          _config,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i11.GithubChecksUtil get githubChecksUtil => (super.noSuchMethod(
+        Invocation.getter(#githubChecksUtil),
+        returnValue: _FakeGithubChecksUtil_17(
+          this,
+          Invocation.getter(#githubChecksUtil),
+        ),
+      ) as _i11.GithubChecksUtil);
+  @override
+  set githubChecksUtil(_i11.GithubChecksUtil? _githubChecksUtil) => super.noSuchMethod(
+        Invocation.setter(
+          #githubChecksUtil,
+          _githubChecksUtil,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<void> handleCheckSuite(
+    _i10.PullRequest? pullRequest,
+    _i24.CheckSuiteEvent? checkSuiteEvent,
+    _i29.Scheduler? scheduler,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #handleCheckSuite,
+          [
+            pullRequest,
+            checkSuiteEvent,
+            scheduler,
+          ],
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<bool> updateCheckStatus(
+    _i30.BuildPushMessage? buildPushMessage,
+    _i31.LuciBuildService? luciBuildService,
+    _i10.RepositorySlug? slug,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateCheckStatus,
+          [
+            buildPushMessage,
+            luciBuildService,
+            slug,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  String getGithubSummary(String? summary) => (super.noSuchMethod(
+        Invocation.method(
+          #getGithubSummary,
+          [summary],
+        ),
+        returnValue: '',
+      ) as String);
+  @override
+  _i10.CheckRunConclusion conclusionForResult(_i30.Result? result) => (super.noSuchMethod(
+        Invocation.method(
+          #conclusionForResult,
+          [result],
+        ),
+        returnValue: _FakeCheckRunConclusion_18(
+          this,
+          Invocation.method(
+            #conclusionForResult,
+            [result],
+          ),
+        ),
+      ) as _i10.CheckRunConclusion);
+  @override
+  _i10.CheckRunStatus statusForResult(_i30.Status? status) => (super.noSuchMethod(
+        Invocation.method(
+          #statusForResult,
+          [status],
+        ),
+        returnValue: _FakeCheckRunStatus_19(
+          this,
+          Invocation.method(
+            #statusForResult,
+            [status],
+          ),
+        ),
+      ) as _i10.CheckRunStatus);
+}
+
+/// A class which mocks [GithubChecksUtil].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGithubChecksUtil extends _i1.Mock implements _i11.GithubChecksUtil {
+  MockGithubChecksUtil() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i17.Future<Map<String, _i10.CheckRun>> allCheckRuns(
+    _i10.GitHub? gitHubClient,
+    _i24.CheckSuiteEvent? checkSuiteEvent,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #allCheckRuns,
+          [
+            gitHubClient,
+            checkSuiteEvent,
+          ],
+        ),
+        returnValue: _i17.Future<Map<String, _i10.CheckRun>>.value(<String, _i10.CheckRun>{}),
+      ) as _i17.Future<Map<String, _i10.CheckRun>>);
+  @override
+  _i17.Future<_i10.CheckSuite> getCheckSuite(
+    _i10.GitHub? gitHubClient,
+    _i10.RepositorySlug? slug,
+    int? checkSuiteId,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCheckSuite,
+          [
+            gitHubClient,
+            slug,
+            checkSuiteId,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.CheckSuite>.value(_FakeCheckSuite_20(
+          this,
+          Invocation.method(
+            #getCheckSuite,
+            [
+              gitHubClient,
+              slug,
+              checkSuiteId,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.CheckSuite>);
+  @override
+  _i17.Future<void> updateCheckRun(
+    _i3.Config? cocoonConfig,
+    _i10.RepositorySlug? slug,
+    _i10.CheckRun? checkRun, {
+    _i10.CheckRunStatus? status = _i10.CheckRunStatus.queued,
+    _i10.CheckRunConclusion? conclusion,
+    String? detailsUrl,
+    _i10.CheckRunOutput? output,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateCheckRun,
+          [
+            cocoonConfig,
+            slug,
+            checkRun,
+          ],
+          {
+            #status: status,
+            #conclusion: conclusion,
+            #detailsUrl: detailsUrl,
+            #output: output,
+          },
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<_i10.CheckRun> getCheckRun(
+    _i3.Config? cocoonConfig,
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCheckRun,
+          [
+            cocoonConfig,
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.CheckRun>.value(_FakeCheckRun_21(
+          this,
+          Invocation.method(
+            #getCheckRun,
+            [
+              cocoonConfig,
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.CheckRun>);
+  @override
+  _i17.Future<_i10.CheckRun> createCheckRun(
+    _i3.Config? cocoonConfig,
+    _i10.RepositorySlug? slug,
+    String? sha,
+    String? name, {
+    _i10.CheckRunOutput? output,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createCheckRun,
+          [
+            cocoonConfig,
+            slug,
+            sha,
+            name,
+          ],
+          {#output: output},
+        ),
+        returnValue: _i17.Future<_i10.CheckRun>.value(_FakeCheckRun_21(
+          this,
+          Invocation.method(
+            #createCheckRun,
+            [
+              cocoonConfig,
+              slug,
+              sha,
+              name,
+            ],
+            {#output: output},
+          ),
+        )),
+      ) as _i17.Future<_i10.CheckRun>);
+}
+
+/// A class which mocks [GithubService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGithubService extends _i1.Mock implements _i25.GithubService {
+  MockGithubService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Future<List<_i10.RepositoryCommit>> listCommits(
+    _i10.RepositorySlug? slug,
+    String? branch,
+    int? lastCommitTimestampMills,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommits,
+          [
+            slug,
+            branch,
+            lastCommitTimestampMills,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i10.RepositoryCommit>>.value(<_i10.RepositoryCommit>[]),
+      ) as _i17.Future<List<_i10.RepositoryCommit>>);
+  @override
+  _i17.Future<List<_i10.PullRequest>> listPullRequests(
+    _i10.RepositorySlug? slug,
+    String? branch,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listPullRequests,
+          [
+            slug,
+            branch,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i10.PullRequest>>.value(<_i10.PullRequest>[]),
+      ) as _i17.Future<List<_i10.PullRequest>>);
+  @override
+  _i17.Future<_i10.PullRequest> createPullRequest(
+    _i10.RepositorySlug? slug, {
+    required String? title,
+    String? body,
+    String? commitMessage,
+    required _i10.GitReference? baseRef,
+    List<_i10.CreateGitTreeEntry>? entries,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createPullRequest,
+          [slug],
+          {
+            #title: title,
+            #body: body,
+            #commitMessage: commitMessage,
+            #baseRef: baseRef,
+            #entries: entries,
+          },
+        ),
+        returnValue: _i17.Future<_i10.PullRequest>.value(_FakePullRequest_22(
+          this,
+          Invocation.method(
+            #createPullRequest,
+            [slug],
+            {
+              #title: title,
+              #body: body,
+              #commitMessage: commitMessage,
+              #baseRef: baseRef,
+              #entries: entries,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequest>);
+  @override
+  _i17.Future<void> assignReviewer(
+    _i10.RepositorySlug? slug, {
+    int? pullRequestNumber,
+    String? reviewer,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #assignReviewer,
+          [slug],
+          {
+            #pullRequestNumber: pullRequestNumber,
+            #reviewer: reviewer,
+          },
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<List<_i10.Issue>> listIssues(
+    _i10.RepositorySlug? slug, {
+    List<String>? labels,
+    String? state = r'open',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listIssues,
+          [slug],
+          {
+            #labels: labels,
+            #state: state,
+          },
+        ),
+        returnValue: _i17.Future<List<_i10.Issue>>.value(<_i10.Issue>[]),
+      ) as _i17.Future<List<_i10.Issue>>);
+  @override
+  _i17.Future<_i10.Issue>? getIssue(
+    _i10.RepositorySlug? slug, {
+    required int? issueNumber,
+  }) =>
+      (super.noSuchMethod(Invocation.method(
+        #getIssue,
+        [slug],
+        {#issueNumber: issueNumber},
+      )) as _i17.Future<_i10.Issue>?);
+  @override
+  _i17.Future<void> assignIssue(
+    _i10.RepositorySlug? slug, {
+    required int? issueNumber,
+    required String? assignee,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #assignIssue,
+          [slug],
+          {
+            #issueNumber: issueNumber,
+            #assignee: assignee,
+          },
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<_i10.Issue> createIssue(
+    _i10.RepositorySlug? slug, {
+    String? title,
+    String? body,
+    List<String>? labels,
+    String? assignee,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createIssue,
+          [slug],
+          {
+            #title: title,
+            #body: body,
+            #labels: labels,
+            #assignee: assignee,
+          },
+        ),
+        returnValue: _i17.Future<_i10.Issue>.value(_FakeIssue_13(
+          this,
+          Invocation.method(
+            #createIssue,
+            [slug],
+            {
+              #title: title,
+              #body: body,
+              #labels: labels,
+              #assignee: assignee,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.Issue>);
+  @override
+  _i17.Future<_i10.IssueComment?> createComment(
+    _i10.RepositorySlug? slug, {
+    required int? issueNumber,
+    required String? body,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createComment,
+          [slug],
+          {
+            #issueNumber: issueNumber,
+            #body: body,
+          },
+        ),
+        returnValue: _i17.Future<_i10.IssueComment?>.value(),
+      ) as _i17.Future<_i10.IssueComment?>);
+  @override
+  _i17.Future<List<_i10.IssueLabel>> replaceLabelsForIssue(
+    _i10.RepositorySlug? slug, {
+    required int? issueNumber,
+    required List<String>? labels,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #replaceLabelsForIssue,
+          [slug],
+          {
+            #issueNumber: issueNumber,
+            #labels: labels,
+          },
+        ),
+        returnValue: _i17.Future<List<_i10.IssueLabel>>.value(<_i10.IssueLabel>[]),
+      ) as _i17.Future<List<_i10.IssueLabel>>);
+  @override
+  _i17.Future<List<String>> listFiles(_i10.PullRequest? pullRequest) => (super.noSuchMethod(
+        Invocation.method(
+          #listFiles,
+          [pullRequest],
+        ),
+        returnValue: _i17.Future<List<String>>.value(<String>[]),
+      ) as _i17.Future<List<String>>);
+  @override
+  _i17.Future<String> getFileContent(
+    _i10.RepositorySlug? slug,
+    String? path, {
+    String? ref,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getFileContent,
+          [
+            slug,
+            path,
+          ],
+          {#ref: ref},
+        ),
+        returnValue: _i17.Future<String>.value(''),
+      ) as _i17.Future<String>);
+  @override
+  _i17.Future<_i10.GitReference> getReference(
+    _i10.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReference,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitReference>.value(_FakeGitReference_23(
+          this,
+          Invocation.method(
+            #getReference,
+            [
+              slug,
+              ref,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitReference>);
+  @override
+  _i17.Future<_i10.RateLimit> getRateLimit() => (super.noSuchMethod(
+        Invocation.method(
+          #getRateLimit,
+          [],
+        ),
+        returnValue: _i17.Future<_i10.RateLimit>.value(_FakeRateLimit_24(
+          this,
+          Invocation.method(
+            #getRateLimit,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i10.RateLimit>);
+}
+
+/// A class which mocks [GitService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGitService extends _i1.Mock implements _i10.GitService {
+  MockGitService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Future<_i10.GitBlob> getBlob(
+    _i10.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getBlob,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitBlob>.value(_FakeGitBlob_25(
+          this,
+          Invocation.method(
+            #getBlob,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitBlob>);
+  @override
+  _i17.Future<_i10.GitBlob> createBlob(
+    _i10.RepositorySlug? slug,
+    _i10.CreateGitBlob? blob,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createBlob,
+          [
+            slug,
+            blob,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitBlob>.value(_FakeGitBlob_25(
+          this,
+          Invocation.method(
+            #createBlob,
+            [
+              slug,
+              blob,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitBlob>);
+  @override
+  _i17.Future<_i10.GitCommit> getCommit(
+    _i10.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommit,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitCommit>.value(_FakeGitCommit_26(
+          this,
+          Invocation.method(
+            #getCommit,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitCommit>);
+  @override
+  _i17.Future<_i10.GitCommit> createCommit(
+    _i10.RepositorySlug? slug,
+    _i10.CreateGitCommit? commit,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createCommit,
+          [
+            slug,
+            commit,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitCommit>.value(_FakeGitCommit_26(
+          this,
+          Invocation.method(
+            #createCommit,
+            [
+              slug,
+              commit,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitCommit>);
+  @override
+  _i17.Future<_i10.GitReference> getReference(
+    _i10.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReference,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitReference>.value(_FakeGitReference_23(
+          this,
+          Invocation.method(
+            #getReference,
+            [
+              slug,
+              ref,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitReference>);
+  @override
+  _i17.Stream<_i10.GitReference> listReferences(
+    _i10.RepositorySlug? slug, {
+    String? type,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReferences,
+          [slug],
+          {#type: type},
+        ),
+        returnValue: _i17.Stream<_i10.GitReference>.empty(),
+      ) as _i17.Stream<_i10.GitReference>);
+  @override
+  _i17.Future<_i10.GitReference> createReference(
+    _i10.RepositorySlug? slug,
+    String? ref,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createReference,
+          [
+            slug,
+            ref,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitReference>.value(_FakeGitReference_23(
+          this,
+          Invocation.method(
+            #createReference,
+            [
+              slug,
+              ref,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitReference>);
+  @override
+  _i17.Future<_i10.GitReference> editReference(
+    _i10.RepositorySlug? slug,
+    String? ref,
+    String? sha, {
+    bool? force = false,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editReference,
+          [
+            slug,
+            ref,
+            sha,
+          ],
+          {#force: force},
+        ),
+        returnValue: _i17.Future<_i10.GitReference>.value(_FakeGitReference_23(
+          this,
+          Invocation.method(
+            #editReference,
+            [
+              slug,
+              ref,
+              sha,
+            ],
+            {#force: force},
+          ),
+        )),
+      ) as _i17.Future<_i10.GitReference>);
+  @override
+  _i17.Future<bool> deleteReference(
+    _i10.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteReference,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<_i10.GitTag> getTag(
+    _i10.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getTag,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitTag>.value(_FakeGitTag_27(
+          this,
+          Invocation.method(
+            #getTag,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitTag>);
+  @override
+  _i17.Future<_i10.GitTag> createTag(
+    _i10.RepositorySlug? slug,
+    _i10.CreateGitTag? tag,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createTag,
+          [
+            slug,
+            tag,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitTag>.value(_FakeGitTag_27(
+          this,
+          Invocation.method(
+            #createTag,
+            [
+              slug,
+              tag,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitTag>);
+  @override
+  _i17.Future<_i10.GitTree> getTree(
+    _i10.RepositorySlug? slug,
+    String? sha, {
+    bool? recursive = false,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getTree,
+          [
+            slug,
+            sha,
+          ],
+          {#recursive: recursive},
+        ),
+        returnValue: _i17.Future<_i10.GitTree>.value(_FakeGitTree_28(
+          this,
+          Invocation.method(
+            #getTree,
+            [
+              slug,
+              sha,
+            ],
+            {#recursive: recursive},
+          ),
+        )),
+      ) as _i17.Future<_i10.GitTree>);
+  @override
+  _i17.Future<_i10.GitTree> createTree(
+    _i10.RepositorySlug? slug,
+    _i10.CreateGitTree? tree,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createTree,
+          [
+            slug,
+            tree,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitTree>.value(_FakeGitTree_28(
+          this,
+          Invocation.method(
+            #createTree,
+            [
+              slug,
+              tree,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitTree>);
+}
+
+/// A class which mocks [GraphQLClient].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGraphQLClient extends _i1.Mock implements _i14.GraphQLClient {
+  MockGraphQLClient() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i12.DefaultPolicies get defaultPolicies => (super.noSuchMethod(
+        Invocation.getter(#defaultPolicies),
+        returnValue: _FakeDefaultPolicies_29(
+          this,
+          Invocation.getter(#defaultPolicies),
+        ),
+      ) as _i12.DefaultPolicies);
+  @override
+  set defaultPolicies(_i12.DefaultPolicies? _defaultPolicies) => super.noSuchMethod(
+        Invocation.setter(
+          #defaultPolicies,
+          _defaultPolicies,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i12.Link get link => (super.noSuchMethod(
+        Invocation.getter(#link),
+        returnValue: _FakeLink_30(
+          this,
+          Invocation.getter(#link),
+        ),
+      ) as _i12.Link);
+  @override
+  _i13.GraphQLCache get cache => (super.noSuchMethod(
+        Invocation.getter(#cache),
+        returnValue: _FakeGraphQLCache_31(
+          this,
+          Invocation.getter(#cache),
+        ),
+      ) as _i13.GraphQLCache);
+  @override
+  _i12.QueryManager get queryManager => (super.noSuchMethod(
+        Invocation.getter(#queryManager),
+        returnValue: _FakeQueryManager_32(
+          this,
+          Invocation.getter(#queryManager),
+        ),
+      ) as _i12.QueryManager);
+  @override
+  set queryManager(_i12.QueryManager? _queryManager) => super.noSuchMethod(
+        Invocation.setter(
+          #queryManager,
+          _queryManager,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i14.GraphQLClient copyWith({
+    _i12.Link? link,
+    _i13.GraphQLCache? cache,
+    _i12.DefaultPolicies? defaultPolicies,
+    bool? alwaysRebroadcast,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #copyWith,
+          [],
+          {
+            #link: link,
+            #cache: cache,
+            #defaultPolicies: defaultPolicies,
+            #alwaysRebroadcast: alwaysRebroadcast,
+          },
+        ),
+        returnValue: _FakeGraphQLClient_33(
+          this,
+          Invocation.method(
+            #copyWith,
+            [],
+            {
+              #link: link,
+              #cache: cache,
+              #defaultPolicies: defaultPolicies,
+              #alwaysRebroadcast: alwaysRebroadcast,
+            },
+          ),
+        ),
+      ) as _i14.GraphQLClient);
+  @override
+  _i12.ObservableQuery<TParsed> watchQuery<TParsed>(_i12.WatchQueryOptions<TParsed>? options) => (super.noSuchMethod(
+        Invocation.method(
+          #watchQuery,
+          [options],
+        ),
+        returnValue: _FakeObservableQuery_34<TParsed>(
+          this,
+          Invocation.method(
+            #watchQuery,
+            [options],
+          ),
+        ),
+      ) as _i12.ObservableQuery<TParsed>);
+  @override
+  _i12.ObservableQuery<TParsed> watchMutation<TParsed>(_i12.WatchQueryOptions<TParsed>? options) => (super.noSuchMethod(
+        Invocation.method(
+          #watchMutation,
+          [options],
+        ),
+        returnValue: _FakeObservableQuery_34<TParsed>(
+          this,
+          Invocation.method(
+            #watchMutation,
+            [options],
+          ),
+        ),
+      ) as _i12.ObservableQuery<TParsed>);
+  @override
+  _i17.Future<_i12.QueryResult<TParsed>> query<TParsed>(_i12.QueryOptions<TParsed>? options) => (super.noSuchMethod(
+        Invocation.method(
+          #query,
+          [options],
+        ),
+        returnValue: _i17.Future<_i12.QueryResult<TParsed>>.value(_FakeQueryResult_35<TParsed>(
+          this,
+          Invocation.method(
+            #query,
+            [options],
+          ),
+        )),
+      ) as _i17.Future<_i12.QueryResult<TParsed>>);
+  @override
+  _i17.Future<_i12.QueryResult<TParsed>> mutate<TParsed>(_i12.MutationOptions<TParsed>? options) => (super.noSuchMethod(
+        Invocation.method(
+          #mutate,
+          [options],
+        ),
+        returnValue: _i17.Future<_i12.QueryResult<TParsed>>.value(_FakeQueryResult_35<TParsed>(
+          this,
+          Invocation.method(
+            #mutate,
+            [options],
+          ),
+        )),
+      ) as _i17.Future<_i12.QueryResult<TParsed>>);
+  @override
+  _i17.Stream<_i12.QueryResult<TParsed>> subscribe<TParsed>(_i12.SubscriptionOptions<TParsed>? options) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #subscribe,
+          [options],
+        ),
+        returnValue: _i17.Stream<_i12.QueryResult<TParsed>>.empty(),
+      ) as _i17.Stream<_i12.QueryResult<TParsed>>);
+  @override
+  _i17.Future<_i12.QueryResult<TParsed>> fetchMore<TParsed>(
+    _i12.FetchMoreOptions? fetchMoreOptions, {
+    required _i12.QueryOptions<TParsed>? originalOptions,
+    required _i12.QueryResult<TParsed>? previousResult,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #fetchMore,
+          [fetchMoreOptions],
+          {
+            #originalOptions: originalOptions,
+            #previousResult: previousResult,
+          },
+        ),
+        returnValue: _i17.Future<_i12.QueryResult<TParsed>>.value(_FakeQueryResult_35<TParsed>(
+          this,
+          Invocation.method(
+            #fetchMore,
+            [fetchMoreOptions],
+            {
+              #originalOptions: originalOptions,
+              #previousResult: previousResult,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i12.QueryResult<TParsed>>);
+  @override
+  Map<String, dynamic>? readQuery(
+    _i12.Request? request, {
+    bool? optimistic = true,
+  }) =>
+      (super.noSuchMethod(Invocation.method(
+        #readQuery,
+        [request],
+        {#optimistic: optimistic},
+      )) as Map<String, dynamic>?);
+  @override
+  Map<String, dynamic>? readFragment(
+    _i13.FragmentRequest? fragmentRequest, {
+    bool? optimistic = true,
+  }) =>
+      (super.noSuchMethod(Invocation.method(
+        #readFragment,
+        [fragmentRequest],
+        {#optimistic: optimistic},
+      )) as Map<String, dynamic>?);
+  @override
+  void writeQuery(
+    _i12.Request? request, {
+    required Map<String, dynamic>? data,
+    bool? broadcast = true,
+  }) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #writeQuery,
+          [request],
+          {
+            #data: data,
+            #broadcast: broadcast,
+          },
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void writeFragment(
+    _i13.FragmentRequest? fragmentRequest, {
+    bool? broadcast = true,
+    required Map<String, dynamic>? data,
+  }) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #writeFragment,
+          [fragmentRequest],
+          {
+            #broadcast: broadcast,
+            #data: data,
+          },
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<List<_i12.QueryResult<Object?>?>>? resetStore({bool? refetchQueries = true}) =>
+      (super.noSuchMethod(Invocation.method(
+        #resetStore,
+        [],
+        {#refetchQueries: refetchQueries},
+      )) as _i17.Future<List<_i12.QueryResult<Object?>?>>?);
+}
+
+/// A class which mocks [HttpClient].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockHttpClient extends _i1.Mock implements _i15.HttpClient {
+  MockHttpClient() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  Duration get idleTimeout => (super.noSuchMethod(
+        Invocation.getter(#idleTimeout),
+        returnValue: _FakeDuration_36(
+          this,
+          Invocation.getter(#idleTimeout),
+        ),
+      ) as Duration);
+  @override
+  set idleTimeout(Duration? _idleTimeout) => super.noSuchMethod(
+        Invocation.setter(
+          #idleTimeout,
+          _idleTimeout,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set connectionTimeout(Duration? _connectionTimeout) => super.noSuchMethod(
+        Invocation.setter(
+          #connectionTimeout,
+          _connectionTimeout,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set maxConnectionsPerHost(int? _maxConnectionsPerHost) => super.noSuchMethod(
+        Invocation.setter(
+          #maxConnectionsPerHost,
+          _maxConnectionsPerHost,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  bool get autoUncompress => (super.noSuchMethod(
+        Invocation.getter(#autoUncompress),
+        returnValue: false,
+      ) as bool);
+  @override
+  set autoUncompress(bool? _autoUncompress) => super.noSuchMethod(
+        Invocation.setter(
+          #autoUncompress,
+          _autoUncompress,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set userAgent(String? _userAgent) => super.noSuchMethod(
+        Invocation.setter(
+          #userAgent,
+          _userAgent,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set authenticate(
+          _i17.Future<bool> Function(
+    Uri,
+    String,
+    String?,
+  )?
+              f) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #authenticate,
+          f,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set connectionFactory(
+          _i17.Future<_i15.ConnectionTask<_i15.Socket>> Function(
+    Uri,
+    String?,
+    int?,
+  )?
+              f) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #connectionFactory,
+          f,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set findProxy(String Function(Uri)? f) => super.noSuchMethod(
+        Invocation.setter(
+          #findProxy,
+          f,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set authenticateProxy(
+          _i17.Future<bool> Function(
+    String,
+    int,
+    String,
+    String?,
+  )?
+              f) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #authenticateProxy,
+          f,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set badCertificateCallback(
+          bool Function(
+    _i15.X509Certificate,
+    String,
+    int,
+  )?
+              callback) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #badCertificateCallback,
+          callback,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  set keyLog(dynamic Function(String)? callback) => super.noSuchMethod(
+        Invocation.setter(
+          #keyLog,
+          callback,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<_i15.HttpClientRequest> open(
+    String? method,
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #open,
+          [
+            method,
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #open,
+            [
+              method,
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> openUrl(
+    String? method,
+    Uri? url,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #openUrl,
+          [
+            method,
+            url,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #openUrl,
+            [
+              method,
+              url,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> get(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #get,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> getUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #getUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #getUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> post(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #post,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #post,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> postUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #postUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #postUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> put(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #put,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #put,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> putUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #putUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #putUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> delete(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #delete,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #delete,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> deleteUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #deleteUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #deleteUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> patch(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #patch,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #patch,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> patchUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #patchUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #patchUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> head(
+    String? host,
+    int? port,
+    String? path,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #head,
+          [
+            host,
+            port,
+            path,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #head,
+            [
+              host,
+              port,
+              path,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  _i17.Future<_i15.HttpClientRequest> headUrl(Uri? url) => (super.noSuchMethod(
+        Invocation.method(
+          #headUrl,
+          [url],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientRequest>.value(_FakeHttpClientRequest_37(
+          this,
+          Invocation.method(
+            #headUrl,
+            [url],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientRequest>);
+  @override
+  void addCredentials(
+    Uri? url,
+    String? realm,
+    _i15.HttpClientCredentials? credentials,
+  ) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #addCredentials,
+          [
+            url,
+            realm,
+            credentials,
+          ],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void addProxyCredentials(
+    String? host,
+    int? port,
+    String? realm,
+    _i15.HttpClientCredentials? credentials,
+  ) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #addProxyCredentials,
+          [
+            host,
+            port,
+            realm,
+            credentials,
+          ],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void close({bool? force = false}) => super.noSuchMethod(
+        Invocation.method(
+          #close,
+          [],
+          {#force: force},
+        ),
+        returnValueForMissingStub: null,
+      );
+}
+
+/// A class which mocks [HttpClientRequest].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockHttpClientRequest extends _i1.Mock implements _i15.HttpClientRequest {
+  MockHttpClientRequest() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  bool get persistentConnection => (super.noSuchMethod(
+        Invocation.getter(#persistentConnection),
+        returnValue: false,
+      ) as bool);
+  @override
+  set persistentConnection(bool? _persistentConnection) => super.noSuchMethod(
+        Invocation.setter(
+          #persistentConnection,
+          _persistentConnection,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  bool get followRedirects => (super.noSuchMethod(
+        Invocation.getter(#followRedirects),
+        returnValue: false,
+      ) as bool);
+  @override
+  set followRedirects(bool? _followRedirects) => super.noSuchMethod(
+        Invocation.setter(
+          #followRedirects,
+          _followRedirects,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  int get maxRedirects => (super.noSuchMethod(
+        Invocation.getter(#maxRedirects),
+        returnValue: 0,
+      ) as int);
+  @override
+  set maxRedirects(int? _maxRedirects) => super.noSuchMethod(
+        Invocation.setter(
+          #maxRedirects,
+          _maxRedirects,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  int get contentLength => (super.noSuchMethod(
+        Invocation.getter(#contentLength),
+        returnValue: 0,
+      ) as int);
+  @override
+  set contentLength(int? _contentLength) => super.noSuchMethod(
+        Invocation.setter(
+          #contentLength,
+          _contentLength,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  bool get bufferOutput => (super.noSuchMethod(
+        Invocation.getter(#bufferOutput),
+        returnValue: false,
+      ) as bool);
+  @override
+  set bufferOutput(bool? _bufferOutput) => super.noSuchMethod(
+        Invocation.setter(
+          #bufferOutput,
+          _bufferOutput,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  String get method => (super.noSuchMethod(
+        Invocation.getter(#method),
+        returnValue: '',
+      ) as String);
+  @override
+  Uri get uri => (super.noSuchMethod(
+        Invocation.getter(#uri),
+        returnValue: _FakeUri_38(
+          this,
+          Invocation.getter(#uri),
+        ),
+      ) as Uri);
+  @override
+  _i15.HttpHeaders get headers => (super.noSuchMethod(
+        Invocation.getter(#headers),
+        returnValue: _FakeHttpHeaders_39(
+          this,
+          Invocation.getter(#headers),
+        ),
+      ) as _i15.HttpHeaders);
+  @override
+  List<_i15.Cookie> get cookies => (super.noSuchMethod(
+        Invocation.getter(#cookies),
+        returnValue: <_i15.Cookie>[],
+      ) as List<_i15.Cookie>);
+  @override
+  _i17.Future<_i15.HttpClientResponse> get done => (super.noSuchMethod(
+        Invocation.getter(#done),
+        returnValue: _i17.Future<_i15.HttpClientResponse>.value(_FakeHttpClientResponse_40(
+          this,
+          Invocation.getter(#done),
+        )),
+      ) as _i17.Future<_i15.HttpClientResponse>);
+  @override
+  _i16.Encoding get encoding => (super.noSuchMethod(
+        Invocation.getter(#encoding),
+        returnValue: _FakeEncoding_41(
+          this,
+          Invocation.getter(#encoding),
+        ),
+      ) as _i16.Encoding);
+  @override
+  set encoding(_i16.Encoding? _encoding) => super.noSuchMethod(
+        Invocation.setter(
+          #encoding,
+          _encoding,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<_i15.HttpClientResponse> close() => (super.noSuchMethod(
+        Invocation.method(
+          #close,
+          [],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientResponse>.value(_FakeHttpClientResponse_40(
+          this,
+          Invocation.method(
+            #close,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientResponse>);
+  @override
+  void abort([
+    Object? exception,
+    StackTrace? stackTrace,
+  ]) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #abort,
+          [
+            exception,
+            stackTrace,
+          ],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void add(List<int>? data) => super.noSuchMethod(
+        Invocation.method(
+          #add,
+          [data],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void write(Object? object) => super.noSuchMethod(
+        Invocation.method(
+          #write,
+          [object],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void writeAll(
+    Iterable<dynamic>? objects, [
+    String? separator = r'',
+  ]) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #writeAll,
+          [
+            objects,
+            separator,
+          ],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void writeln([Object? object = r'']) => super.noSuchMethod(
+        Invocation.method(
+          #writeln,
+          [object],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void writeCharCode(int? charCode) => super.noSuchMethod(
+        Invocation.method(
+          #writeCharCode,
+          [charCode],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void addError(
+    Object? error, [
+    StackTrace? stackTrace,
+  ]) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #addError,
+          [
+            error,
+            stackTrace,
+          ],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i17.Future<dynamic> addStream(_i17.Stream<List<int>>? stream) => (super.noSuchMethod(
+        Invocation.method(
+          #addStream,
+          [stream],
+        ),
+        returnValue: _i17.Future<dynamic>.value(),
+      ) as _i17.Future<dynamic>);
+  @override
+  _i17.Future<dynamic> flush() => (super.noSuchMethod(
+        Invocation.method(
+          #flush,
+          [],
+        ),
+        returnValue: _i17.Future<dynamic>.value(),
+      ) as _i17.Future<dynamic>);
+}
+
+/// A class which mocks [HttpClientResponse].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockHttpClientResponse extends _i1.Mock implements _i15.HttpClientResponse {
+  MockHttpClientResponse() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  int get statusCode => (super.noSuchMethod(
+        Invocation.getter(#statusCode),
+        returnValue: 0,
+      ) as int);
+  @override
+  String get reasonPhrase => (super.noSuchMethod(
+        Invocation.getter(#reasonPhrase),
+        returnValue: '',
+      ) as String);
+  @override
+  int get contentLength => (super.noSuchMethod(
+        Invocation.getter(#contentLength),
+        returnValue: 0,
+      ) as int);
+  @override
+  _i15.HttpClientResponseCompressionState get compressionState => (super.noSuchMethod(
+        Invocation.getter(#compressionState),
+        returnValue: _i15.HttpClientResponseCompressionState.notCompressed,
+      ) as _i15.HttpClientResponseCompressionState);
+  @override
+  bool get persistentConnection => (super.noSuchMethod(
+        Invocation.getter(#persistentConnection),
+        returnValue: false,
+      ) as bool);
+  @override
+  bool get isRedirect => (super.noSuchMethod(
+        Invocation.getter(#isRedirect),
+        returnValue: false,
+      ) as bool);
+  @override
+  List<_i15.RedirectInfo> get redirects => (super.noSuchMethod(
+        Invocation.getter(#redirects),
+        returnValue: <_i15.RedirectInfo>[],
+      ) as List<_i15.RedirectInfo>);
+  @override
+  _i15.HttpHeaders get headers => (super.noSuchMethod(
+        Invocation.getter(#headers),
+        returnValue: _FakeHttpHeaders_39(
+          this,
+          Invocation.getter(#headers),
+        ),
+      ) as _i15.HttpHeaders);
+  @override
+  List<_i15.Cookie> get cookies => (super.noSuchMethod(
+        Invocation.getter(#cookies),
+        returnValue: <_i15.Cookie>[],
+      ) as List<_i15.Cookie>);
+  @override
+  bool get isBroadcast => (super.noSuchMethod(
+        Invocation.getter(#isBroadcast),
+        returnValue: false,
+      ) as bool);
+  @override
+  _i17.Future<int> get length => (super.noSuchMethod(
+        Invocation.getter(#length),
+        returnValue: _i17.Future<int>.value(0),
+      ) as _i17.Future<int>);
+  @override
+  _i17.Future<bool> get isEmpty => (super.noSuchMethod(
+        Invocation.getter(#isEmpty),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<List<int>> get first => (super.noSuchMethod(
+        Invocation.getter(#first),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<List<int>> get last => (super.noSuchMethod(
+        Invocation.getter(#last),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<List<int>> get single => (super.noSuchMethod(
+        Invocation.getter(#single),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<_i15.HttpClientResponse> redirect([
+    String? method,
+    Uri? url,
+    bool? followLoops,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #redirect,
+          [
+            method,
+            url,
+            followLoops,
+          ],
+        ),
+        returnValue: _i17.Future<_i15.HttpClientResponse>.value(_FakeHttpClientResponse_40(
+          this,
+          Invocation.method(
+            #redirect,
+            [
+              method,
+              url,
+              followLoops,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i15.HttpClientResponse>);
+  @override
+  _i17.Future<_i15.Socket> detachSocket() => (super.noSuchMethod(
+        Invocation.method(
+          #detachSocket,
+          [],
+        ),
+        returnValue: _i17.Future<_i15.Socket>.value(_FakeSocket_42(
+          this,
+          Invocation.method(
+            #detachSocket,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i15.Socket>);
+  @override
+  _i17.Stream<List<int>> asBroadcastStream({
+    void Function(_i17.StreamSubscription<List<int>>)? onListen,
+    void Function(_i17.StreamSubscription<List<int>>)? onCancel,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #asBroadcastStream,
+          [],
+          {
+            #onListen: onListen,
+            #onCancel: onCancel,
+          },
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.StreamSubscription<List<int>> listen(
+    void Function(List<int>)? onData, {
+    Function? onError,
+    void Function()? onDone,
+    bool? cancelOnError,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listen,
+          [onData],
+          {
+            #onError: onError,
+            #onDone: onDone,
+            #cancelOnError: cancelOnError,
+          },
+        ),
+        returnValue: _FakeStreamSubscription_43<List<int>>(
+          this,
+          Invocation.method(
+            #listen,
+            [onData],
+            {
+              #onError: onError,
+              #onDone: onDone,
+              #cancelOnError: cancelOnError,
+            },
+          ),
+        ),
+      ) as _i17.StreamSubscription<List<int>>);
+  @override
+  _i17.Stream<List<int>> where(bool Function(List<int>)? test) => (super.noSuchMethod(
+        Invocation.method(
+          #where,
+          [test],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<S> map<S>(S Function(List<int>)? convert) => (super.noSuchMethod(
+        Invocation.method(
+          #map,
+          [convert],
+        ),
+        returnValue: _i17.Stream<S>.empty(),
+      ) as _i17.Stream<S>);
+  @override
+  _i17.Stream<E> asyncMap<E>(_i17.FutureOr<E> Function(List<int>)? convert) => (super.noSuchMethod(
+        Invocation.method(
+          #asyncMap,
+          [convert],
+        ),
+        returnValue: _i17.Stream<E>.empty(),
+      ) as _i17.Stream<E>);
+  @override
+  _i17.Stream<E> asyncExpand<E>(_i17.Stream<E>? Function(List<int>)? convert) => (super.noSuchMethod(
+        Invocation.method(
+          #asyncExpand,
+          [convert],
+        ),
+        returnValue: _i17.Stream<E>.empty(),
+      ) as _i17.Stream<E>);
+  @override
+  _i17.Stream<List<int>> handleError(
+    Function? onError, {
+    bool Function(dynamic)? test,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #handleError,
+          [onError],
+          {#test: test},
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<S> expand<S>(Iterable<S> Function(List<int>)? convert) => (super.noSuchMethod(
+        Invocation.method(
+          #expand,
+          [convert],
+        ),
+        returnValue: _i17.Stream<S>.empty(),
+      ) as _i17.Stream<S>);
+  @override
+  _i17.Future<dynamic> pipe(_i17.StreamConsumer<List<int>>? streamConsumer) => (super.noSuchMethod(
+        Invocation.method(
+          #pipe,
+          [streamConsumer],
+        ),
+        returnValue: _i17.Future<dynamic>.value(),
+      ) as _i17.Future<dynamic>);
+  @override
+  _i17.Stream<S> transform<S>(_i17.StreamTransformer<List<int>, S>? streamTransformer) => (super.noSuchMethod(
+        Invocation.method(
+          #transform,
+          [streamTransformer],
+        ),
+        returnValue: _i17.Stream<S>.empty(),
+      ) as _i17.Stream<S>);
+  @override
+  _i17.Future<List<int>> reduce(
+          List<int> Function(
+    List<int>,
+    List<int>,
+  )?
+              combine) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #reduce,
+          [combine],
+        ),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<S> fold<S>(
+    S? initialValue,
+    S Function(
+      S,
+      List<int>,
+    )?
+        combine,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #fold,
+          [
+            initialValue,
+            combine,
+          ],
+        ),
+        returnValue: _i17.Future<S>.value(null),
+      ) as _i17.Future<S>);
+  @override
+  _i17.Future<String> join([String? separator = r'']) => (super.noSuchMethod(
+        Invocation.method(
+          #join,
+          [separator],
+        ),
+        returnValue: _i17.Future<String>.value(''),
+      ) as _i17.Future<String>);
+  @override
+  _i17.Future<bool> contains(Object? needle) => (super.noSuchMethod(
+        Invocation.method(
+          #contains,
+          [needle],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<dynamic> forEach(void Function(List<int>)? action) => (super.noSuchMethod(
+        Invocation.method(
+          #forEach,
+          [action],
+        ),
+        returnValue: _i17.Future<dynamic>.value(),
+      ) as _i17.Future<dynamic>);
+  @override
+  _i17.Future<bool> every(bool Function(List<int>)? test) => (super.noSuchMethod(
+        Invocation.method(
+          #every,
+          [test],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> any(bool Function(List<int>)? test) => (super.noSuchMethod(
+        Invocation.method(
+          #any,
+          [test],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<R> cast<R>() => (super.noSuchMethod(
+        Invocation.method(
+          #cast,
+          [],
+        ),
+        returnValue: _i17.Stream<R>.empty(),
+      ) as _i17.Stream<R>);
+  @override
+  _i17.Future<List<List<int>>> toList() => (super.noSuchMethod(
+        Invocation.method(
+          #toList,
+          [],
+        ),
+        returnValue: _i17.Future<List<List<int>>>.value(<List<int>>[]),
+      ) as _i17.Future<List<List<int>>>);
+  @override
+  _i17.Future<Set<List<int>>> toSet() => (super.noSuchMethod(
+        Invocation.method(
+          #toSet,
+          [],
+        ),
+        returnValue: _i17.Future<Set<List<int>>>.value(<List<int>>{}),
+      ) as _i17.Future<Set<List<int>>>);
+  @override
+  _i17.Future<E> drain<E>([E? futureValue]) => (super.noSuchMethod(
+        Invocation.method(
+          #drain,
+          [futureValue],
+        ),
+        returnValue: _i17.Future<E>.value(null),
+      ) as _i17.Future<E>);
+  @override
+  _i17.Stream<List<int>> take(int? count) => (super.noSuchMethod(
+        Invocation.method(
+          #take,
+          [count],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<List<int>> takeWhile(bool Function(List<int>)? test) => (super.noSuchMethod(
+        Invocation.method(
+          #takeWhile,
+          [test],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<List<int>> skip(int? count) => (super.noSuchMethod(
+        Invocation.method(
+          #skip,
+          [count],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<List<int>> skipWhile(bool Function(List<int>)? test) => (super.noSuchMethod(
+        Invocation.method(
+          #skipWhile,
+          [test],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Stream<List<int>> distinct(
+          [bool Function(
+            List<int>,
+            List<int>,
+          )?
+              equals]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #distinct,
+          [equals],
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+  @override
+  _i17.Future<List<int>> firstWhere(
+    bool Function(List<int>)? test, {
+    List<int> Function()? orElse,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #firstWhere,
+          [test],
+          {#orElse: orElse},
+        ),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<List<int>> lastWhere(
+    bool Function(List<int>)? test, {
+    List<int> Function()? orElse,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #lastWhere,
+          [test],
+          {#orElse: orElse},
+        ),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<List<int>> singleWhere(
+    bool Function(List<int>)? test, {
+    List<int> Function()? orElse,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #singleWhere,
+          [test],
+          {#orElse: orElse},
+        ),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Future<List<int>> elementAt(int? index) => (super.noSuchMethod(
+        Invocation.method(
+          #elementAt,
+          [index],
+        ),
+        returnValue: _i17.Future<List<int>>.value(<int>[]),
+      ) as _i17.Future<List<int>>);
+  @override
+  _i17.Stream<List<int>> timeout(
+    Duration? timeLimit, {
+    void Function(_i17.EventSink<List<int>>)? onTimeout,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #timeout,
+          [timeLimit],
+          {#onTimeout: onTimeout},
+        ),
+        returnValue: _i17.Stream<List<int>>.empty(),
+      ) as _i17.Stream<List<int>>);
+}
+
+/// A class which mocks [JobsResource].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockJobsResource extends _i1.Mock implements _i6.JobsResource {
+  MockJobsResource() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i17.Future<_i6.JobCancelResponse> cancel(
+    String? projectId,
+    String? jobId, {
+    String? location,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #cancel,
+          [
+            projectId,
+            jobId,
+          ],
+          {
+            #location: location,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<_i6.JobCancelResponse>.value(_FakeJobCancelResponse_44(
+          this,
+          Invocation.method(
+            #cancel,
+            [
+              projectId,
+              jobId,
+            ],
+            {
+              #location: location,
+              #$fields: $fields,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.JobCancelResponse>);
+  @override
+  _i17.Future<void> delete(
+    String? projectId,
+    String? jobId, {
+    String? location,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #delete,
+          [
+            projectId,
+            jobId,
+          ],
+          {
+            #location: location,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<_i6.Job> get(
+    String? projectId,
+    String? jobId, {
+    String? location,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [
+            projectId,
+            jobId,
+          ],
+          {
+            #location: location,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<_i6.Job>.value(_FakeJob_45(
+          this,
+          Invocation.method(
+            #get,
+            [
+              projectId,
+              jobId,
+            ],
+            {
+              #location: location,
+              #$fields: $fields,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.Job>);
+  @override
+  _i17.Future<_i6.GetQueryResultsResponse> getQueryResults(
+    String? projectId,
+    String? jobId, {
+    String? location,
+    int? maxResults,
+    String? pageToken,
+    String? startIndex,
+    int? timeoutMs,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getQueryResults,
+          [
+            projectId,
+            jobId,
+          ],
+          {
+            #location: location,
+            #maxResults: maxResults,
+            #pageToken: pageToken,
+            #startIndex: startIndex,
+            #timeoutMs: timeoutMs,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<_i6.GetQueryResultsResponse>.value(_FakeGetQueryResultsResponse_46(
+          this,
+          Invocation.method(
+            #getQueryResults,
+            [
+              projectId,
+              jobId,
+            ],
+            {
+              #location: location,
+              #maxResults: maxResults,
+              #pageToken: pageToken,
+              #startIndex: startIndex,
+              #timeoutMs: timeoutMs,
+              #$fields: $fields,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.GetQueryResultsResponse>);
+  @override
+  _i17.Future<_i6.Job> insert(
+    _i6.Job? request,
+    String? projectId, {
+    String? $fields,
+    _i6.UploadOptions? uploadOptions = _i6.UploadOptions.defaultOptions,
+    _i6.Media? uploadMedia,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #insert,
+          [
+            request,
+            projectId,
+          ],
+          {
+            #$fields: $fields,
+            #uploadOptions: uploadOptions,
+            #uploadMedia: uploadMedia,
+          },
+        ),
+        returnValue: _i17.Future<_i6.Job>.value(_FakeJob_45(
+          this,
+          Invocation.method(
+            #insert,
+            [
+              request,
+              projectId,
+            ],
+            {
+              #$fields: $fields,
+              #uploadOptions: uploadOptions,
+              #uploadMedia: uploadMedia,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.Job>);
+  @override
+  _i17.Future<_i6.JobList> list(
+    String? projectId, {
+    bool? allUsers,
+    String? maxCreationTime,
+    int? maxResults,
+    String? minCreationTime,
+    String? pageToken,
+    String? parentJobId,
+    String? projection,
+    List<String>? stateFilter,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #list,
+          [projectId],
+          {
+            #allUsers: allUsers,
+            #maxCreationTime: maxCreationTime,
+            #maxResults: maxResults,
+            #minCreationTime: minCreationTime,
+            #pageToken: pageToken,
+            #parentJobId: parentJobId,
+            #projection: projection,
+            #stateFilter: stateFilter,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<_i6.JobList>.value(_FakeJobList_47(
+          this,
+          Invocation.method(
+            #list,
+            [projectId],
+            {
+              #allUsers: allUsers,
+              #maxCreationTime: maxCreationTime,
+              #maxResults: maxResults,
+              #minCreationTime: minCreationTime,
+              #pageToken: pageToken,
+              #parentJobId: parentJobId,
+              #projection: projection,
+              #stateFilter: stateFilter,
+              #$fields: $fields,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.JobList>);
+  @override
+  _i17.Future<_i6.QueryResponse> query(
+    _i6.QueryRequest? request,
+    String? projectId, {
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #query,
+          [
+            request,
+            projectId,
+          ],
+          {#$fields: $fields},
+        ),
+        returnValue: _i17.Future<_i6.QueryResponse>.value(_FakeQueryResponse_48(
+          this,
+          Invocation.method(
+            #query,
+            [
+              request,
+              projectId,
+            ],
+            {#$fields: $fields},
+          ),
+        )),
+      ) as _i17.Future<_i6.QueryResponse>);
+}
+
+/// A class which mocks [LuciBuildService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockLuciBuildService extends _i1.Mock implements _i31.LuciBuildService {
+  MockLuciBuildService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i18.BuildBucketClient get buildBucketClient => (super.noSuchMethod(
+        Invocation.getter(#buildBucketClient),
+        returnValue: _FakeBuildBucketClient_49(
+          this,
+          Invocation.getter(#buildBucketClient),
+        ),
+      ) as _i18.BuildBucketClient);
+  @override
+  set buildBucketClient(_i18.BuildBucketClient? _buildBucketClient) => super.noSuchMethod(
+        Invocation.setter(
+          #buildBucketClient,
+          _buildBucketClient,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i3.Config get config => (super.noSuchMethod(
+        Invocation.getter(#config),
+        returnValue: _FakeConfig_1(
+          this,
+          Invocation.getter(#config),
+        ),
+      ) as _i3.Config);
+  @override
+  set config(_i3.Config? _config) => super.noSuchMethod(
+        Invocation.setter(
+          #config,
+          _config,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i11.GithubChecksUtil get githubChecksUtil => (super.noSuchMethod(
+        Invocation.getter(#githubChecksUtil),
+        returnValue: _FakeGithubChecksUtil_17(
+          this,
+          Invocation.getter(#githubChecksUtil),
+        ),
+      ) as _i11.GithubChecksUtil);
+  @override
+  set githubChecksUtil(_i11.GithubChecksUtil? _githubChecksUtil) => super.noSuchMethod(
+        Invocation.setter(
+          #githubChecksUtil,
+          _githubChecksUtil,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i7.GerritService get gerritService => (super.noSuchMethod(
+        Invocation.getter(#gerritService),
+        returnValue: _FakeGerritService_6(
+          this,
+          Invocation.getter(#gerritService),
+        ),
+      ) as _i7.GerritService);
+  @override
+  set gerritService(_i7.GerritService? _gerritService) => super.noSuchMethod(
+        Invocation.setter(
+          #gerritService,
+          _gerritService,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i19.PubSub get pubsub => (super.noSuchMethod(
+        Invocation.getter(#pubsub),
+        returnValue: _FakePubSub_50(
+          this,
+          Invocation.getter(#pubsub),
+        ),
+      ) as _i19.PubSub);
+  @override
+  _i17.Future<List<List<_i9.Request>>> shard(
+    List<_i9.Request>? requests,
+    int? max,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #shard,
+          [
+            requests,
+            max,
+          ],
+        ),
+        returnValue: _i17.Future<List<List<_i9.Request>>>.value(<List<_i9.Request>>[]),
+      ) as _i17.Future<List<List<_i9.Request>>>);
+  @override
+  _i17.Future<Iterable<_i9.Build>> getTryBuilds(
+    _i10.RepositorySlug? slug,
+    String? sha,
+    String? builderName,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getTryBuilds,
+          [
+            slug,
+            sha,
+            builderName,
+          ],
+        ),
+        returnValue: _i17.Future<Iterable<_i9.Build>>.value(<_i9.Build>[]),
+      ) as _i17.Future<Iterable<_i9.Build>>);
+  @override
+  _i17.Future<Iterable<_i9.Build>> getProdBuilds(
+    _i10.RepositorySlug? slug,
+    String? commitSha,
+    String? builderName,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getProdBuilds,
+          [
+            slug,
+            commitSha,
+            builderName,
+          ],
+        ),
+        returnValue: _i17.Future<Iterable<_i9.Build>>.value(<_i9.Build>[]),
+      ) as _i17.Future<Iterable<_i9.Build>>);
+  @override
+  _i17.Future<Iterable<_i9.Build>> getBuilds(
+    _i10.RepositorySlug? slug,
+    String? commitSha,
+    String? builderName,
+    String? bucket,
+    Map<String, List<String>>? tags,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getBuilds,
+          [
+            slug,
+            commitSha,
+            builderName,
+            bucket,
+            tags,
+          ],
+        ),
+        returnValue: _i17.Future<Iterable<_i9.Build>>.value(<_i9.Build>[]),
+      ) as _i17.Future<Iterable<_i9.Build>>);
+  @override
+  _i17.Future<Map<String?, _i9.Build?>> tryBuildsForPullRequest(_i10.PullRequest? pullRequest) => (super.noSuchMethod(
+        Invocation.method(
+          #tryBuildsForPullRequest,
+          [pullRequest],
+        ),
+        returnValue: _i17.Future<Map<String?, _i9.Build?>>.value(<String?, _i9.Build?>{}),
+      ) as _i17.Future<Map<String?, _i9.Build?>>);
+  @override
+  _i17.Future<List<_i32.Target>> scheduleTryBuilds({
+    required List<_i32.Target>? targets,
+    required _i10.PullRequest? pullRequest,
+    _i24.CheckSuiteEvent? checkSuiteEvent,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #scheduleTryBuilds,
+          [],
+          {
+            #targets: targets,
+            #pullRequest: pullRequest,
+            #checkSuiteEvent: checkSuiteEvent,
+          },
+        ),
+        returnValue: _i17.Future<List<_i32.Target>>.value(<_i32.Target>[]),
+      ) as _i17.Future<List<_i32.Target>>);
+  @override
+  _i17.Future<void> cancelBuilds(
+    _i10.PullRequest? pullRequest,
+    String? reason,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #cancelBuilds,
+          [
+            pullRequest,
+            reason,
+          ],
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<List<_i9.Build?>> failedBuilds(
+    _i10.PullRequest? pullRequest,
+    List<_i32.Target>? targets,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #failedBuilds,
+          [
+            pullRequest,
+            targets,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i9.Build?>>.value(<_i9.Build?>[]),
+      ) as _i17.Future<List<_i9.Build?>>);
+  @override
+  _i17.Future<bool> rescheduleBuild({
+    required String? commitSha,
+    required String? builderName,
+    required _i30.BuildPushMessage? buildPushMessage,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #rescheduleBuild,
+          [],
+          {
+            #commitSha: commitSha,
+            #builderName: builderName,
+            #buildPushMessage: buildPushMessage,
+          },
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> rescheduleUsingCheckRunEvent(_i33.CheckRunEvent? checkRunEvent) => (super.noSuchMethod(
+        Invocation.method(
+          #rescheduleUsingCheckRunEvent,
+          [checkRunEvent],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<_i9.Build> getTryBuildById(
+    String? id, {
+    String? fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getTryBuildById,
+          [id],
+          {#fields: fields},
+        ),
+        returnValue: _i17.Future<_i9.Build>.value(_FakeBuild_8(
+          this,
+          Invocation.method(
+            #getTryBuildById,
+            [id],
+            {#fields: fields},
+          ),
+        )),
+      ) as _i17.Future<_i9.Build>);
+  @override
+  _i17.Future<Set<String>> getAvailableBuilderSet({
+    String? project = r'flutter',
+    String? bucket = r'prod',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getAvailableBuilderSet,
+          [],
+          {
+            #project: project,
+            #bucket: bucket,
+          },
+        ),
+        returnValue: _i17.Future<Set<String>>.value(<String>{}),
+      ) as _i17.Future<Set<String>>);
+  @override
+  _i17.Future<void> schedulePostsubmitBuilds({
+    required _i34.Commit? commit,
+    required List<_i35.Tuple<_i32.Target, _i36.Task, int>>? toBeScheduled,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #schedulePostsubmitBuilds,
+          [],
+          {
+            #commit: commit,
+            #toBeScheduled: toBeScheduled,
+          },
+        ),
+        returnValue: _i17.Future<void>.value(),
+        returnValueForMissingStub: _i17.Future<void>.value(),
+      ) as _i17.Future<void>);
+  @override
+  _i17.Future<bool> checkRerunBuilder({
+    required _i34.Commit? commit,
+    required _i32.Target? target,
+    required _i36.Task? task,
+    required _i37.DatastoreService? datastore,
+    Map<String, List<String>>? tags,
+    bool? ignoreChecks = false,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #checkRerunBuilder,
+          [],
+          {
+            #commit: commit,
+            #target: target,
+            #task: task,
+            #datastore: datastore,
+            #tags: tags,
+            #ignoreChecks: ignoreChecks,
+          },
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+}
+
+/// A class which mocks [ProcessManager].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockProcessManager extends _i1.Mock implements _i38.ProcessManager {
+  MockProcessManager() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i17.Future<_i15.Process> start(
+    List<Object>? command, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    bool? includeParentEnvironment = true,
+    bool? runInShell = false,
+    _i15.ProcessStartMode? mode = _i15.ProcessStartMode.normal,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #start,
+          [command],
+          {
+            #workingDirectory: workingDirectory,
+            #environment: environment,
+            #includeParentEnvironment: includeParentEnvironment,
+            #runInShell: runInShell,
+            #mode: mode,
+          },
+        ),
+        returnValue: _i17.Future<_i15.Process>.value(_FakeProcess_51(
+          this,
+          Invocation.method(
+            #start,
+            [command],
+            {
+              #workingDirectory: workingDirectory,
+              #environment: environment,
+              #includeParentEnvironment: includeParentEnvironment,
+              #runInShell: runInShell,
+              #mode: mode,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i15.Process>);
+  @override
+  _i17.Future<_i15.ProcessResult> run(
+    List<Object>? command, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    bool? includeParentEnvironment = true,
+    bool? runInShell = false,
+    _i16.Encoding? stdoutEncoding = const _i15.SystemEncoding(),
+    _i16.Encoding? stderrEncoding = const _i15.SystemEncoding(),
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #run,
+          [command],
+          {
+            #workingDirectory: workingDirectory,
+            #environment: environment,
+            #includeParentEnvironment: includeParentEnvironment,
+            #runInShell: runInShell,
+            #stdoutEncoding: stdoutEncoding,
+            #stderrEncoding: stderrEncoding,
+          },
+        ),
+        returnValue: _i17.Future<_i15.ProcessResult>.value(_FakeProcessResult_52(
+          this,
+          Invocation.method(
+            #run,
+            [command],
+            {
+              #workingDirectory: workingDirectory,
+              #environment: environment,
+              #includeParentEnvironment: includeParentEnvironment,
+              #runInShell: runInShell,
+              #stdoutEncoding: stdoutEncoding,
+              #stderrEncoding: stderrEncoding,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i15.ProcessResult>);
+  @override
+  _i15.ProcessResult runSync(
+    List<Object>? command, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    bool? includeParentEnvironment = true,
+    bool? runInShell = false,
+    _i16.Encoding? stdoutEncoding = const _i15.SystemEncoding(),
+    _i16.Encoding? stderrEncoding = const _i15.SystemEncoding(),
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #runSync,
+          [command],
+          {
+            #workingDirectory: workingDirectory,
+            #environment: environment,
+            #includeParentEnvironment: includeParentEnvironment,
+            #runInShell: runInShell,
+            #stdoutEncoding: stdoutEncoding,
+            #stderrEncoding: stderrEncoding,
+          },
+        ),
+        returnValue: _FakeProcessResult_52(
+          this,
+          Invocation.method(
+            #runSync,
+            [command],
+            {
+              #workingDirectory: workingDirectory,
+              #environment: environment,
+              #includeParentEnvironment: includeParentEnvironment,
+              #runInShell: runInShell,
+              #stdoutEncoding: stdoutEncoding,
+              #stderrEncoding: stderrEncoding,
+            },
+          ),
+        ),
+      ) as _i15.ProcessResult);
+  @override
+  bool canRun(
+    dynamic executable, {
+    String? workingDirectory,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #canRun,
+          [executable],
+          {#workingDirectory: workingDirectory},
+        ),
+        returnValue: false,
+      ) as bool);
+  @override
+  bool killPid(
+    int? pid, [
+    _i15.ProcessSignal? signal = _i15.ProcessSignal.sigterm,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #killPid,
+          [
+            pid,
+            signal,
+          ],
+        ),
+        returnValue: false,
+      ) as bool);
+}
+
+/// A class which mocks [PullRequestsService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockPullRequestsService extends _i1.Mock implements _i10.PullRequestsService {
+  MockPullRequestsService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Stream<_i10.PullRequest> list(
+    _i10.RepositorySlug? slug, {
+    int? pages,
+    String? base,
+    String? direction = r'desc',
+    String? head,
+    String? sort = r'created',
+    String? state = r'open',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #list,
+          [slug],
+          {
+            #pages: pages,
+            #base: base,
+            #direction: direction,
+            #head: head,
+            #sort: sort,
+            #state: state,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.PullRequest>.empty(),
+      ) as _i17.Stream<_i10.PullRequest>);
+  @override
+  _i17.Future<_i10.PullRequest> get(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.PullRequest>.value(_FakePullRequest_22(
+          this,
+          Invocation.method(
+            #get,
+            [
+              slug,
+              number,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequest>);
+  @override
+  _i17.Future<_i10.PullRequest> create(
+    _i10.RepositorySlug? slug,
+    _i10.CreatePullRequest? request,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #create,
+          [
+            slug,
+            request,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.PullRequest>.value(_FakePullRequest_22(
+          this,
+          Invocation.method(
+            #create,
+            [
+              slug,
+              request,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequest>);
+  @override
+  _i17.Future<_i10.PullRequest> edit(
+    _i10.RepositorySlug? slug,
+    int? number, {
+    String? title,
+    String? body,
+    String? state,
+    String? base,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #edit,
+          [
+            slug,
+            number,
+          ],
+          {
+            #title: title,
+            #body: body,
+            #state: state,
+            #base: base,
+          },
+        ),
+        returnValue: _i17.Future<_i10.PullRequest>.value(_FakePullRequest_22(
+          this,
+          Invocation.method(
+            #edit,
+            [
+              slug,
+              number,
+            ],
+            {
+              #title: title,
+              #body: body,
+              #state: state,
+              #base: base,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequest>);
+  @override
+  _i17.Stream<_i10.RepositoryCommit> listCommits(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommits,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.RepositoryCommit>.empty(),
+      ) as _i17.Stream<_i10.RepositoryCommit>);
+  @override
+  _i17.Stream<_i10.PullRequestFile> listFiles(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listFiles,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.PullRequestFile>.empty(),
+      ) as _i17.Stream<_i10.PullRequestFile>);
+  @override
+  _i17.Stream<_i10.PullRequestReview> listReviews(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReviews,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.PullRequestReview>.empty(),
+      ) as _i17.Stream<_i10.PullRequestReview>);
+  @override
+  _i17.Future<bool> isMerged(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #isMerged,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<_i10.PullRequestMerge> merge(
+    _i10.RepositorySlug? slug,
+    int? number, {
+    String? message,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #merge,
+          [
+            slug,
+            number,
+          ],
+          {#message: message},
+        ),
+        returnValue: _i17.Future<_i10.PullRequestMerge>.value(_FakePullRequestMerge_53(
+          this,
+          Invocation.method(
+            #merge,
+            [
+              slug,
+              number,
+            ],
+            {#message: message},
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequestMerge>);
+  @override
+  _i17.Stream<_i10.PullRequestComment> listCommentsByPullRequest(
+    _i10.RepositorySlug? slug,
+    int? number,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommentsByPullRequest,
+          [
+            slug,
+            number,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.PullRequestComment>.empty(),
+      ) as _i17.Stream<_i10.PullRequestComment>);
+  @override
+  _i17.Stream<_i10.PullRequestComment> listComments(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listComments,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.PullRequestComment>.empty(),
+      ) as _i17.Stream<_i10.PullRequestComment>);
+  @override
+  _i17.Future<_i10.PullRequestComment> createComment(
+    _i10.RepositorySlug? slug,
+    int? number,
+    _i10.CreatePullRequestComment? comment,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createComment,
+          [
+            slug,
+            number,
+            comment,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.PullRequestComment>.value(_FakePullRequestComment_54(
+          this,
+          Invocation.method(
+            #createComment,
+            [
+              slug,
+              number,
+              comment,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequestComment>);
+  @override
+  _i17.Future<_i10.PullRequestReview> createReview(
+    _i10.RepositorySlug? slug,
+    _i10.CreatePullRequestReview? review,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createReview,
+          [
+            slug,
+            review,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.PullRequestReview>.value(_FakePullRequestReview_55(
+          this,
+          Invocation.method(
+            #createReview,
+            [
+              slug,
+              review,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.PullRequestReview>);
+}
+
+/// A class which mocks [RepositoriesService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockRepositoriesService extends _i1.Mock implements _i10.RepositoriesService {
+  MockRepositoriesService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Stream<_i10.Repository> listRepositories({
+    String? type = r'owner',
+    String? sort = r'full_name',
+    String? direction = r'asc',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listRepositories,
+          [],
+          {
+            #type: type,
+            #sort: sort,
+            #direction: direction,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Stream<_i10.Repository> listUserRepositories(
+    String? user, {
+    String? type = r'owner',
+    String? sort = r'full_name',
+    String? direction = r'asc',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listUserRepositories,
+          [user],
+          {
+            #type: type,
+            #sort: sort,
+            #direction: direction,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Stream<_i10.Repository> listOrganizationRepositories(
+    String? org, {
+    String? type = r'all',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listOrganizationRepositories,
+          [org],
+          {#type: type},
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Stream<_i10.Repository> listPublicRepositories({
+    int? limit = 50,
+    DateTime? since,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listPublicRepositories,
+          [],
+          {
+            #limit: limit,
+            #since: since,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Future<_i10.Repository> createRepository(
+    _i10.CreateRepository? repository, {
+    String? org,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createRepository,
+          [repository],
+          {#org: org},
+        ),
+        returnValue: _i17.Future<_i10.Repository>.value(_FakeRepository_56(
+          this,
+          Invocation.method(
+            #createRepository,
+            [repository],
+            {#org: org},
+          ),
+        )),
+      ) as _i17.Future<_i10.Repository>);
+  @override
+  _i17.Future<_i10.LicenseDetails> getLicense(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getLicense,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.LicenseDetails>.value(_FakeLicenseDetails_57(
+          this,
+          Invocation.method(
+            #getLicense,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.LicenseDetails>);
+  @override
+  _i17.Future<_i10.Repository> getRepository(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getRepository,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.Repository>.value(_FakeRepository_56(
+          this,
+          Invocation.method(
+            #getRepository,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.Repository>);
+  @override
+  _i17.Stream<_i10.Repository> getRepositories(List<_i10.RepositorySlug>? slugs) => (super.noSuchMethod(
+        Invocation.method(
+          #getRepositories,
+          [slugs],
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Future<_i10.Repository> editRepository(
+    _i10.RepositorySlug? slug, {
+    String? name,
+    String? description,
+    String? homepage,
+    bool? private,
+    bool? hasIssues,
+    bool? hasWiki,
+    bool? hasDownloads,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editRepository,
+          [slug],
+          {
+            #name: name,
+            #description: description,
+            #homepage: homepage,
+            #private: private,
+            #hasIssues: hasIssues,
+            #hasWiki: hasWiki,
+            #hasDownloads: hasDownloads,
+          },
+        ),
+        returnValue: _i17.Future<_i10.Repository>.value(_FakeRepository_56(
+          this,
+          Invocation.method(
+            #editRepository,
+            [slug],
+            {
+              #name: name,
+              #description: description,
+              #homepage: homepage,
+              #private: private,
+              #hasIssues: hasIssues,
+              #hasWiki: hasWiki,
+              #hasDownloads: hasDownloads,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.Repository>);
+  @override
+  _i17.Future<bool> deleteRepository(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #deleteRepository,
+          [slug],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.Contributor> listContributors(
+    _i10.RepositorySlug? slug, {
+    bool? anon = false,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listContributors,
+          [slug],
+          {#anon: anon},
+        ),
+        returnValue: _i17.Stream<_i10.Contributor>.empty(),
+      ) as _i17.Stream<_i10.Contributor>);
+  @override
+  _i17.Stream<_i10.Team> listTeams(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listTeams,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Team>.empty(),
+      ) as _i17.Stream<_i10.Team>);
+  @override
+  _i17.Future<_i10.LanguageBreakdown> listLanguages(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listLanguages,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.LanguageBreakdown>.value(_FakeLanguageBreakdown_58(
+          this,
+          Invocation.method(
+            #listLanguages,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.LanguageBreakdown>);
+  @override
+  _i17.Stream<_i10.Tag> listTags(
+    _i10.RepositorySlug? slug, {
+    int? page = 1,
+    int? pages,
+    int? perPage = 30,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listTags,
+          [slug],
+          {
+            #page: page,
+            #pages: pages,
+            #perPage: perPage,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.Tag>.empty(),
+      ) as _i17.Stream<_i10.Tag>);
+  @override
+  _i17.Stream<_i10.Branch> listBranches(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listBranches,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Branch>.empty(),
+      ) as _i17.Stream<_i10.Branch>);
+  @override
+  _i17.Future<_i10.Branch> getBranch(
+    _i10.RepositorySlug? slug,
+    String? branch,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getBranch,
+          [
+            slug,
+            branch,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Branch>.value(_FakeBranch_59(
+          this,
+          Invocation.method(
+            #getBranch,
+            [
+              slug,
+              branch,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Branch>);
+  @override
+  _i17.Stream<_i10.Collaborator> listCollaborators(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCollaborators,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Collaborator>.empty(),
+      ) as _i17.Stream<_i10.Collaborator>);
+  @override
+  _i17.Future<bool> isCollaborator(
+    _i10.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #isCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> addCollaborator(
+    _i10.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #addCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> removeCollaborator(
+    _i10.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #removeCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.CommitComment> listSingleCommitComments(
+    _i10.RepositorySlug? slug,
+    _i10.RepositoryCommit? commit,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listSingleCommitComments,
+          [
+            slug,
+            commit,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.CommitComment>.empty(),
+      ) as _i17.Stream<_i10.CommitComment>);
+  @override
+  _i17.Stream<_i10.CommitComment> listCommitComments(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCommitComments,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.CommitComment>.empty(),
+      ) as _i17.Stream<_i10.CommitComment>);
+  @override
+  _i17.Future<_i10.CommitComment> createCommitComment(
+    _i10.RepositorySlug? slug,
+    _i10.RepositoryCommit? commit, {
+    required String? body,
+    String? path,
+    int? position,
+    int? line,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createCommitComment,
+          [
+            slug,
+            commit,
+          ],
+          {
+            #body: body,
+            #path: path,
+            #position: position,
+            #line: line,
+          },
+        ),
+        returnValue: _i17.Future<_i10.CommitComment>.value(_FakeCommitComment_60(
+          this,
+          Invocation.method(
+            #createCommitComment,
+            [
+              slug,
+              commit,
+            ],
+            {
+              #body: body,
+              #path: path,
+              #position: position,
+              #line: line,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.CommitComment>);
+  @override
+  _i17.Future<_i10.CommitComment> getCommitComment(
+    _i10.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommitComment,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i17.Future<_i10.CommitComment>.value(_FakeCommitComment_60(
+          this,
+          Invocation.method(
+            #getCommitComment,
+            [slug],
+            {#id: id},
+          ),
+        )),
+      ) as _i17.Future<_i10.CommitComment>);
+  @override
+  _i17.Future<_i10.CommitComment> updateCommitComment(
+    _i10.RepositorySlug? slug, {
+    required int? id,
+    required String? body,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateCommitComment,
+          [slug],
+          {
+            #id: id,
+            #body: body,
+          },
+        ),
+        returnValue: _i17.Future<_i10.CommitComment>.value(_FakeCommitComment_60(
+          this,
+          Invocation.method(
+            #updateCommitComment,
+            [slug],
+            {
+              #id: id,
+              #body: body,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.CommitComment>);
+  @override
+  _i17.Future<bool> deleteCommitComment(
+    _i10.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteCommitComment,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.RepositoryCommit> listCommits(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCommits,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.RepositoryCommit>.empty(),
+      ) as _i17.Stream<_i10.RepositoryCommit>);
+  @override
+  _i17.Future<_i10.RepositoryCommit> getCommit(
+    _i10.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommit,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.RepositoryCommit>.value(_FakeRepositoryCommit_61(
+          this,
+          Invocation.method(
+            #getCommit,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.RepositoryCommit>);
+  @override
+  _i17.Future<String> getCommitDiff(
+    _i10.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommitDiff,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i17.Future<String>.value(''),
+      ) as _i17.Future<String>);
+  @override
+  _i17.Future<_i10.GitHubComparison> compareCommits(
+    _i10.RepositorySlug? slug,
+    String? refBase,
+    String? refHead,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #compareCommits,
+          [
+            slug,
+            refBase,
+            refHead,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.GitHubComparison>.value(_FakeGitHubComparison_62(
+          this,
+          Invocation.method(
+            #compareCommits,
+            [
+              slug,
+              refBase,
+              refHead,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.GitHubComparison>);
+  @override
+  _i17.Future<_i10.GitHubFile> getReadme(
+    _i10.RepositorySlug? slug, {
+    String? ref,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReadme,
+          [slug],
+          {#ref: ref},
+        ),
+        returnValue: _i17.Future<_i10.GitHubFile>.value(_FakeGitHubFile_63(
+          this,
+          Invocation.method(
+            #getReadme,
+            [slug],
+            {#ref: ref},
+          ),
+        )),
+      ) as _i17.Future<_i10.GitHubFile>);
+  @override
+  _i17.Future<_i10.RepositoryContents> getContents(
+    _i10.RepositorySlug? slug,
+    String? path, {
+    String? ref,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getContents,
+          [
+            slug,
+            path,
+          ],
+          {#ref: ref},
+        ),
+        returnValue: _i17.Future<_i10.RepositoryContents>.value(_FakeRepositoryContents_64(
+          this,
+          Invocation.method(
+            #getContents,
+            [
+              slug,
+              path,
+            ],
+            {#ref: ref},
+          ),
+        )),
+      ) as _i17.Future<_i10.RepositoryContents>);
+  @override
+  _i17.Future<_i10.ContentCreation> createFile(
+    _i10.RepositorySlug? slug,
+    _i10.CreateFile? file,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createFile,
+          [
+            slug,
+            file,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.ContentCreation>.value(_FakeContentCreation_65(
+          this,
+          Invocation.method(
+            #createFile,
+            [
+              slug,
+              file,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.ContentCreation>);
+  @override
+  _i17.Future<_i10.ContentCreation> updateFile(
+    _i10.RepositorySlug? slug,
+    String? path,
+    String? message,
+    String? content,
+    String? sha, {
+    String? branch,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateFile,
+          [
+            slug,
+            path,
+            message,
+            content,
+            sha,
+          ],
+          {#branch: branch},
+        ),
+        returnValue: _i17.Future<_i10.ContentCreation>.value(_FakeContentCreation_65(
+          this,
+          Invocation.method(
+            #updateFile,
+            [
+              slug,
+              path,
+              message,
+              content,
+              sha,
+            ],
+            {#branch: branch},
+          ),
+        )),
+      ) as _i17.Future<_i10.ContentCreation>);
+  @override
+  _i17.Future<_i10.ContentCreation> deleteFile(
+    _i10.RepositorySlug? slug,
+    String? path,
+    String? message,
+    String? sha,
+    String? branch,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteFile,
+          [
+            slug,
+            path,
+            message,
+            sha,
+            branch,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.ContentCreation>.value(_FakeContentCreation_65(
+          this,
+          Invocation.method(
+            #deleteFile,
+            [
+              slug,
+              path,
+              message,
+              sha,
+              branch,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.ContentCreation>);
+  @override
+  _i17.Future<String?> getArchiveLink(
+    _i10.RepositorySlug? slug,
+    String? ref, {
+    String? format = r'tarball',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getArchiveLink,
+          [
+            slug,
+            ref,
+          ],
+          {#format: format},
+        ),
+        returnValue: _i17.Future<String?>.value(),
+      ) as _i17.Future<String?>);
+  @override
+  _i17.Stream<_i10.Repository> listForks(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listForks,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Repository>.empty(),
+      ) as _i17.Stream<_i10.Repository>);
+  @override
+  _i17.Future<_i10.Repository> createFork(
+    _i10.RepositorySlug? slug, [
+    _i10.CreateFork? fork,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createFork,
+          [
+            slug,
+            fork,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Repository>.value(_FakeRepository_56(
+          this,
+          Invocation.method(
+            #createFork,
+            [
+              slug,
+              fork,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Repository>);
+  @override
+  _i17.Stream<_i10.Hook> listHooks(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listHooks,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Hook>.empty(),
+      ) as _i17.Stream<_i10.Hook>);
+  @override
+  _i17.Future<_i10.Hook> getHook(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Hook>.value(_FakeHook_66(
+          this,
+          Invocation.method(
+            #getHook,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Hook>);
+  @override
+  _i17.Future<_i10.Hook> createHook(
+    _i10.RepositorySlug? slug,
+    _i10.CreateHook? hook,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createHook,
+          [
+            slug,
+            hook,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Hook>.value(_FakeHook_66(
+          this,
+          Invocation.method(
+            #createHook,
+            [
+              slug,
+              hook,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Hook>);
+  @override
+  _i17.Future<_i10.Hook> editHook(
+    _i10.RepositorySlug? slug,
+    _i10.Hook? hookToEdit, {
+    String? configUrl,
+    String? configContentType,
+    String? configSecret,
+    bool? configInsecureSsl,
+    List<String>? events,
+    List<String>? addEvents,
+    List<String>? removeEvents,
+    bool? active,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editHook,
+          [
+            slug,
+            hookToEdit,
+          ],
+          {
+            #configUrl: configUrl,
+            #configContentType: configContentType,
+            #configSecret: configSecret,
+            #configInsecureSsl: configInsecureSsl,
+            #events: events,
+            #addEvents: addEvents,
+            #removeEvents: removeEvents,
+            #active: active,
+          },
+        ),
+        returnValue: _i17.Future<_i10.Hook>.value(_FakeHook_66(
+          this,
+          Invocation.method(
+            #editHook,
+            [
+              slug,
+              hookToEdit,
+            ],
+            {
+              #configUrl: configUrl,
+              #configContentType: configContentType,
+              #configSecret: configSecret,
+              #configInsecureSsl: configInsecureSsl,
+              #events: events,
+              #addEvents: addEvents,
+              #removeEvents: removeEvents,
+              #active: active,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.Hook>);
+  @override
+  _i17.Future<bool> testPushHook(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #testPushHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> pingHook(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #pingHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> deleteHook(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.PublicKey> listDeployKeys(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listDeployKeys,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.PublicKey>.empty(),
+      ) as _i17.Stream<_i10.PublicKey>);
+  @override
+  _i17.Future<_i10.PublicKey> getDeployKey(
+    _i10.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getDeployKey,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i17.Future<_i10.PublicKey>.value(_FakePublicKey_67(
+          this,
+          Invocation.method(
+            #getDeployKey,
+            [slug],
+            {#id: id},
+          ),
+        )),
+      ) as _i17.Future<_i10.PublicKey>);
+  @override
+  _i17.Future<_i10.PublicKey> createDeployKey(
+    _i10.RepositorySlug? slug,
+    _i10.CreatePublicKey? key,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createDeployKey,
+          [
+            slug,
+            key,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.PublicKey>.value(_FakePublicKey_67(
+          this,
+          Invocation.method(
+            #createDeployKey,
+            [
+              slug,
+              key,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.PublicKey>);
+  @override
+  _i17.Future<bool> deleteDeployKey({
+    required _i10.RepositorySlug? slug,
+    required _i10.PublicKey? key,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteDeployKey,
+          [],
+          {
+            #slug: slug,
+            #key: key,
+          },
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<_i10.RepositoryCommit> merge(
+    _i10.RepositorySlug? slug,
+    _i10.CreateMerge? merge,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #merge,
+          [
+            slug,
+            merge,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.RepositoryCommit>.value(_FakeRepositoryCommit_61(
+          this,
+          Invocation.method(
+            #merge,
+            [
+              slug,
+              merge,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.RepositoryCommit>);
+  @override
+  _i17.Future<_i10.RepositoryPages> getPagesInfo(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getPagesInfo,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.RepositoryPages>.value(_FakeRepositoryPages_68(
+          this,
+          Invocation.method(
+            #getPagesInfo,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.RepositoryPages>);
+  @override
+  _i17.Stream<_i10.PageBuild> listPagesBuilds(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listPagesBuilds,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.PageBuild>.empty(),
+      ) as _i17.Stream<_i10.PageBuild>);
+  @override
+  _i17.Future<_i10.PageBuild> getLatestPagesBuild(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getLatestPagesBuild,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.PageBuild>.value(_FakePageBuild_69(
+          this,
+          Invocation.method(
+            #getLatestPagesBuild,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.PageBuild>);
+  @override
+  _i17.Stream<_i10.Release> listReleases(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listReleases,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.Release>.empty(),
+      ) as _i17.Stream<_i10.Release>);
+  @override
+  _i17.Future<_i10.Release> getLatestRelease(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getLatestRelease,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.Release>.value(_FakeRelease_70(
+          this,
+          Invocation.method(
+            #getLatestRelease,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.Release>);
+  @override
+  _i17.Future<_i10.Release> getReleaseById(
+    _i10.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseById,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Release>.value(_FakeRelease_70(
+          this,
+          Invocation.method(
+            #getReleaseById,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Release>);
+  @override
+  _i17.Future<_i10.Release> getReleaseByTagName(
+    _i10.RepositorySlug? slug,
+    String? tagName,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseByTagName,
+          [
+            slug,
+            tagName,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.Release>.value(_FakeRelease_70(
+          this,
+          Invocation.method(
+            #getReleaseByTagName,
+            [
+              slug,
+              tagName,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.Release>);
+  @override
+  _i17.Future<_i10.Release> createRelease(
+    _i10.RepositorySlug? slug,
+    _i10.CreateRelease? createRelease, {
+    bool? getIfExists = true,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createRelease,
+          [
+            slug,
+            createRelease,
+          ],
+          {#getIfExists: getIfExists},
+        ),
+        returnValue: _i17.Future<_i10.Release>.value(_FakeRelease_70(
+          this,
+          Invocation.method(
+            #createRelease,
+            [
+              slug,
+              createRelease,
+            ],
+            {#getIfExists: getIfExists},
+          ),
+        )),
+      ) as _i17.Future<_i10.Release>);
+  @override
+  _i17.Future<_i10.Release> editRelease(
+    _i10.RepositorySlug? slug,
+    _i10.Release? releaseToEdit, {
+    String? tagName,
+    String? targetCommitish,
+    String? name,
+    String? body,
+    bool? draft,
+    bool? preRelease,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editRelease,
+          [
+            slug,
+            releaseToEdit,
+          ],
+          {
+            #tagName: tagName,
+            #targetCommitish: targetCommitish,
+            #name: name,
+            #body: body,
+            #draft: draft,
+            #preRelease: preRelease,
+          },
+        ),
+        returnValue: _i17.Future<_i10.Release>.value(_FakeRelease_70(
+          this,
+          Invocation.method(
+            #editRelease,
+            [
+              slug,
+              releaseToEdit,
+            ],
+            {
+              #tagName: tagName,
+              #targetCommitish: targetCommitish,
+              #name: name,
+              #body: body,
+              #draft: draft,
+              #preRelease: preRelease,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.Release>);
+  @override
+  _i17.Future<bool> deleteRelease(
+    _i10.RepositorySlug? slug,
+    _i10.Release? release,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteRelease,
+          [
+            slug,
+            release,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.ReleaseAsset> listReleaseAssets(
+    _i10.RepositorySlug? slug,
+    _i10.Release? release,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReleaseAssets,
+          [
+            slug,
+            release,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.ReleaseAsset>.empty(),
+      ) as _i17.Stream<_i10.ReleaseAsset>);
+  @override
+  _i17.Future<_i10.ReleaseAsset> getReleaseAsset(
+    _i10.RepositorySlug? slug,
+    _i10.Release? release, {
+    required int? assetId,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseAsset,
+          [
+            slug,
+            release,
+          ],
+          {#assetId: assetId},
+        ),
+        returnValue: _i17.Future<_i10.ReleaseAsset>.value(_FakeReleaseAsset_71(
+          this,
+          Invocation.method(
+            #getReleaseAsset,
+            [
+              slug,
+              release,
+            ],
+            {#assetId: assetId},
+          ),
+        )),
+      ) as _i17.Future<_i10.ReleaseAsset>);
+  @override
+  _i17.Future<_i10.ReleaseAsset> editReleaseAsset(
+    _i10.RepositorySlug? slug,
+    _i10.ReleaseAsset? assetToEdit, {
+    String? name,
+    String? label,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editReleaseAsset,
+          [
+            slug,
+            assetToEdit,
+          ],
+          {
+            #name: name,
+            #label: label,
+          },
+        ),
+        returnValue: _i17.Future<_i10.ReleaseAsset>.value(_FakeReleaseAsset_71(
+          this,
+          Invocation.method(
+            #editReleaseAsset,
+            [
+              slug,
+              assetToEdit,
+            ],
+            {
+              #name: name,
+              #label: label,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.ReleaseAsset>);
+  @override
+  _i17.Future<bool> deleteReleaseAsset(
+    _i10.RepositorySlug? slug,
+    _i10.ReleaseAsset? asset,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteReleaseAsset,
+          [
+            slug,
+            asset,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<List<_i10.ReleaseAsset>> uploadReleaseAssets(
+    _i10.Release? release,
+    Iterable<_i10.CreateReleaseAsset>? createReleaseAssets,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #uploadReleaseAssets,
+          [
+            release,
+            createReleaseAssets,
+          ],
+        ),
+        returnValue: _i17.Future<List<_i10.ReleaseAsset>>.value(<_i10.ReleaseAsset>[]),
+      ) as _i17.Future<List<_i10.ReleaseAsset>>);
+  @override
+  _i17.Future<List<_i10.ContributorStatistics>> listContributorStats(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listContributorStats,
+          [slug],
+        ),
+        returnValue: _i17.Future<List<_i10.ContributorStatistics>>.value(<_i10.ContributorStatistics>[]),
+      ) as _i17.Future<List<_i10.ContributorStatistics>>);
+  @override
+  _i17.Stream<_i10.YearCommitCountWeek> listCommitActivity(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCommitActivity,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.YearCommitCountWeek>.empty(),
+      ) as _i17.Stream<_i10.YearCommitCountWeek>);
+  @override
+  _i17.Stream<_i10.WeeklyChangesCount> listCodeFrequency(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listCodeFrequency,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.WeeklyChangesCount>.empty(),
+      ) as _i17.Stream<_i10.WeeklyChangesCount>);
+  @override
+  _i17.Future<_i10.ContributorParticipation> getParticipation(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #getParticipation,
+          [slug],
+        ),
+        returnValue: _i17.Future<_i10.ContributorParticipation>.value(_FakeContributorParticipation_72(
+          this,
+          Invocation.method(
+            #getParticipation,
+            [slug],
+          ),
+        )),
+      ) as _i17.Future<_i10.ContributorParticipation>);
+  @override
+  _i17.Stream<_i10.PunchcardEntry> listPunchcard(_i10.RepositorySlug? slug) => (super.noSuchMethod(
+        Invocation.method(
+          #listPunchcard,
+          [slug],
+        ),
+        returnValue: _i17.Stream<_i10.PunchcardEntry>.empty(),
+      ) as _i17.Stream<_i10.PunchcardEntry>);
+  @override
+  _i17.Stream<_i10.RepositoryStatus> listStatuses(
+    _i10.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listStatuses,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i17.Stream<_i10.RepositoryStatus>.empty(),
+      ) as _i17.Stream<_i10.RepositoryStatus>);
+  @override
+  _i17.Future<_i10.RepositoryStatus> createStatus(
+    _i10.RepositorySlug? slug,
+    String? ref,
+    _i10.CreateStatus? request,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createStatus,
+          [
+            slug,
+            ref,
+            request,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.RepositoryStatus>.value(_FakeRepositoryStatus_73(
+          this,
+          Invocation.method(
+            #createStatus,
+            [
+              slug,
+              ref,
+              request,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.RepositoryStatus>);
+  @override
+  _i17.Future<_i10.CombinedRepositoryStatus> getCombinedStatus(
+    _i10.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCombinedStatus,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i17.Future<_i10.CombinedRepositoryStatus>.value(_FakeCombinedRepositoryStatus_74(
+          this,
+          Invocation.method(
+            #getCombinedStatus,
+            [
+              slug,
+              ref,
+            ],
+          ),
+        )),
+      ) as _i17.Future<_i10.CombinedRepositoryStatus>);
+  @override
+  _i17.Future<_i10.ReleaseNotes> generateReleaseNotes(_i10.CreateReleaseNotes? crn) => (super.noSuchMethod(
+        Invocation.method(
+          #generateReleaseNotes,
+          [crn],
+        ),
+        returnValue: _i17.Future<_i10.ReleaseNotes>.value(_FakeReleaseNotes_75(
+          this,
+          Invocation.method(
+            #generateReleaseNotes,
+            [crn],
+          ),
+        )),
+      ) as _i17.Future<_i10.ReleaseNotes>);
+}
+
+/// A class which mocks [TabledataResource].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockTabledataResource extends _i1.Mock implements _i6.TabledataResource {
+  MockTabledataResource() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i17.Future<_i6.TableDataInsertAllResponse> insertAll(
+    _i6.TableDataInsertAllRequest? request,
+    String? projectId,
+    String? datasetId,
+    String? tableId, {
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #insertAll,
+          [
+            request,
+            projectId,
+            datasetId,
+            tableId,
+          ],
+          {#$fields: $fields},
+        ),
+        returnValue: _i17.Future<_i6.TableDataInsertAllResponse>.value(_FakeTableDataInsertAllResponse_76(
+          this,
+          Invocation.method(
+            #insertAll,
+            [
+              request,
+              projectId,
+              datasetId,
+              tableId,
+            ],
+            {#$fields: $fields},
+          ),
+        )),
+      ) as _i17.Future<_i6.TableDataInsertAllResponse>);
+  @override
+  _i17.Future<_i6.TableDataList> list(
+    String? projectId,
+    String? datasetId,
+    String? tableId, {
+    int? maxResults,
+    String? pageToken,
+    String? selectedFields,
+    String? startIndex,
+    String? $fields,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #list,
+          [
+            projectId,
+            datasetId,
+            tableId,
+          ],
+          {
+            #maxResults: maxResults,
+            #pageToken: pageToken,
+            #selectedFields: selectedFields,
+            #startIndex: startIndex,
+            #$fields: $fields,
+          },
+        ),
+        returnValue: _i17.Future<_i6.TableDataList>.value(_FakeTableDataList_77(
+          this,
+          Invocation.method(
+            #list,
+            [
+              projectId,
+              datasetId,
+              tableId,
+            ],
+            {
+              #maxResults: maxResults,
+              #pageToken: pageToken,
+              #selectedFields: selectedFields,
+              #startIndex: startIndex,
+              #$fields: $fields,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i6.TableDataList>);
+}
+
+/// A class which mocks [UsersService].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockUsersService extends _i1.Mock implements _i10.UsersService {
+  MockUsersService() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i10.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_12(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i10.GitHub);
+  @override
+  _i17.Future<_i10.User> getUser(String? name) => (super.noSuchMethod(
+        Invocation.method(
+          #getUser,
+          [name],
+        ),
+        returnValue: _i17.Future<_i10.User>.value(_FakeUser_78(
+          this,
+          Invocation.method(
+            #getUser,
+            [name],
+          ),
+        )),
+      ) as _i17.Future<_i10.User>);
+  @override
+  _i17.Future<_i10.CurrentUser> editCurrentUser({
+    String? name,
+    String? email,
+    String? blog,
+    String? company,
+    String? location,
+    bool? hireable,
+    String? bio,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editCurrentUser,
+          [],
+          {
+            #name: name,
+            #email: email,
+            #blog: blog,
+            #company: company,
+            #location: location,
+            #hireable: hireable,
+            #bio: bio,
+          },
+        ),
+        returnValue: _i17.Future<_i10.CurrentUser>.value(_FakeCurrentUser_79(
+          this,
+          Invocation.method(
+            #editCurrentUser,
+            [],
+            {
+              #name: name,
+              #email: email,
+              #blog: blog,
+              #company: company,
+              #location: location,
+              #hireable: hireable,
+              #bio: bio,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i10.CurrentUser>);
+  @override
+  _i17.Stream<_i10.User> getUsers(
+    List<String>? names, {
+    int? pages,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getUsers,
+          [names],
+          {#pages: pages},
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Future<_i10.CurrentUser> getCurrentUser() => (super.noSuchMethod(
+        Invocation.method(
+          #getCurrentUser,
+          [],
+        ),
+        returnValue: _i17.Future<_i10.CurrentUser>.value(_FakeCurrentUser_79(
+          this,
+          Invocation.method(
+            #getCurrentUser,
+            [],
+          ),
+        )),
+      ) as _i17.Future<_i10.CurrentUser>);
+  @override
+  _i17.Future<bool> isUser(String? name) => (super.noSuchMethod(
+        Invocation.method(
+          #isUser,
+          [name],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.User> listUsers({
+    int? pages,
+    int? since,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listUsers,
+          [],
+          {
+            #pages: pages,
+            #since: since,
+          },
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Stream<_i10.UserEmail> listEmails() => (super.noSuchMethod(
+        Invocation.method(
+          #listEmails,
+          [],
+        ),
+        returnValue: _i17.Stream<_i10.UserEmail>.empty(),
+      ) as _i17.Stream<_i10.UserEmail>);
+  @override
+  _i17.Stream<_i10.UserEmail> addEmails(List<String>? emails) => (super.noSuchMethod(
+        Invocation.method(
+          #addEmails,
+          [emails],
+        ),
+        returnValue: _i17.Stream<_i10.UserEmail>.empty(),
+      ) as _i17.Stream<_i10.UserEmail>);
+  @override
+  _i17.Future<bool> deleteEmails(List<String>? emails) => (super.noSuchMethod(
+        Invocation.method(
+          #deleteEmails,
+          [emails],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.User> listUserFollowers(String? user) => (super.noSuchMethod(
+        Invocation.method(
+          #listUserFollowers,
+          [user],
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Future<bool> isFollowingUser(String? user) => (super.noSuchMethod(
+        Invocation.method(
+          #isFollowingUser,
+          [user],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> isUserFollowing(
+    String? user,
+    String? target,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #isUserFollowing,
+          [
+            user,
+            target,
+          ],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> followUser(String? user) => (super.noSuchMethod(
+        Invocation.method(
+          #followUser,
+          [user],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Future<bool> unfollowUser(String? user) => (super.noSuchMethod(
+        Invocation.method(
+          #unfollowUser,
+          [user],
+        ),
+        returnValue: _i17.Future<bool>.value(false),
+      ) as _i17.Future<bool>);
+  @override
+  _i17.Stream<_i10.User> listCurrentUserFollowers() => (super.noSuchMethod(
+        Invocation.method(
+          #listCurrentUserFollowers,
+          [],
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Stream<_i10.User> listCurrentUserFollowing() => (super.noSuchMethod(
+        Invocation.method(
+          #listCurrentUserFollowing,
+          [],
+        ),
+        returnValue: _i17.Stream<_i10.User>.empty(),
+      ) as _i17.Stream<_i10.User>);
+  @override
+  _i17.Stream<_i10.PublicKey> listPublicKeys([String? userLogin]) => (super.noSuchMethod(
+        Invocation.method(
+          #listPublicKeys,
+          [userLogin],
+        ),
+        returnValue: _i17.Stream<_i10.PublicKey>.empty(),
+      ) as _i17.Stream<_i10.PublicKey>);
+  @override
+  _i17.Future<_i10.PublicKey> createPublicKey(_i10.CreatePublicKey? key) => (super.noSuchMethod(
+        Invocation.method(
+          #createPublicKey,
+          [key],
+        ),
+        returnValue: _i17.Future<_i10.PublicKey>.value(_FakePublicKey_67(
+          this,
+          Invocation.method(
+            #createPublicKey,
+            [key],
+          ),
+        )),
+      ) as _i17.Future<_i10.PublicKey>);
+}
+
+/// A class which mocks [Cache].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockCache extends _i1.Mock implements _i20.Cache<_i27.Uint8List> {
+  MockCache() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i20.Entry<_i27.Uint8List> operator [](String? key) => (super.noSuchMethod(
+        Invocation.method(
+          #[],
+          [key],
+        ),
+        returnValue: _FakeEntry_80<_i27.Uint8List>(
+          this,
+          Invocation.method(
+            #[],
+            [key],
+          ),
+        ),
+      ) as _i20.Entry<_i27.Uint8List>);
+  @override
+  _i20.Cache<_i27.Uint8List> withPrefix(String? prefix) => (super.noSuchMethod(
+        Invocation.method(
+          #withPrefix,
+          [prefix],
+        ),
+        returnValue: _FakeCache_81<_i27.Uint8List>(
+          this,
+          Invocation.method(
+            #withPrefix,
+            [prefix],
+          ),
+        ),
+      ) as _i20.Cache<_i27.Uint8List>);
+  @override
+  _i20.Cache<S> withCodec<S>(_i16.Codec<S, _i27.Uint8List>? codec) => (super.noSuchMethod(
+        Invocation.method(
+          #withCodec,
+          [codec],
+        ),
+        returnValue: _FakeCache_81<S>(
+          this,
+          Invocation.method(
+            #withCodec,
+            [codec],
+          ),
+        ),
+      ) as _i20.Cache<S>);
+  @override
+  _i20.Cache<_i27.Uint8List> withTTL(Duration? ttl) => (super.noSuchMethod(
+        Invocation.method(
+          #withTTL,
+          [ttl],
+        ),
+        returnValue: _FakeCache_81<_i27.Uint8List>(
+          this,
+          Invocation.method(
+            #withTTL,
+            [ttl],
+          ),
+        ),
+      ) as _i20.Cache<_i27.Uint8List>);
+}
+
+/// A class which mocks [GitHub].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockGitHub extends _i1.Mock implements _i10.GitHub {
+  MockGitHub() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  set auth(_i10.Authentication? _auth) => super.noSuchMethod(
+        Invocation.setter(
+          #auth,
+          _auth,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  String get endpoint => (super.noSuchMethod(
+        Invocation.getter(#endpoint),
+        returnValue: '',
+      ) as String);
+  @override
+  _i2.Client get client => (super.noSuchMethod(
+        Invocation.getter(#client),
+        returnValue: _FakeClient_0(
+          this,
+          Invocation.getter(#client),
+        ),
+      ) as _i2.Client);
+  @override
+  _i10.ActivityService get activity => (super.noSuchMethod(
+        Invocation.getter(#activity),
+        returnValue: _FakeActivityService_82(
+          this,
+          Invocation.getter(#activity),
+        ),
+      ) as _i10.ActivityService);
+  @override
+  _i10.AuthorizationsService get authorizations => (super.noSuchMethod(
+        Invocation.getter(#authorizations),
+        returnValue: _FakeAuthorizationsService_83(
+          this,
+          Invocation.getter(#authorizations),
+        ),
+      ) as _i10.AuthorizationsService);
+  @override
+  _i10.GistsService get gists => (super.noSuchMethod(
+        Invocation.getter(#gists),
+        returnValue: _FakeGistsService_84(
+          this,
+          Invocation.getter(#gists),
+        ),
+      ) as _i10.GistsService);
+  @override
+  _i10.GitService get git => (super.noSuchMethod(
+        Invocation.getter(#git),
+        returnValue: _FakeGitService_85(
+          this,
+          Invocation.getter(#git),
+        ),
+      ) as _i10.GitService);
+  @override
+  _i10.IssuesService get issues => (super.noSuchMethod(
+        Invocation.getter(#issues),
+        returnValue: _FakeIssuesService_86(
+          this,
+          Invocation.getter(#issues),
+        ),
+      ) as _i10.IssuesService);
+  @override
+  _i10.MiscService get misc => (super.noSuchMethod(
+        Invocation.getter(#misc),
+        returnValue: _FakeMiscService_87(
+          this,
+          Invocation.getter(#misc),
+        ),
+      ) as _i10.MiscService);
+  @override
+  _i10.OrganizationsService get organizations => (super.noSuchMethod(
+        Invocation.getter(#organizations),
+        returnValue: _FakeOrganizationsService_88(
+          this,
+          Invocation.getter(#organizations),
+        ),
+      ) as _i10.OrganizationsService);
+  @override
+  _i10.PullRequestsService get pullRequests => (super.noSuchMethod(
+        Invocation.getter(#pullRequests),
+        returnValue: _FakePullRequestsService_89(
+          this,
+          Invocation.getter(#pullRequests),
+        ),
+      ) as _i10.PullRequestsService);
+  @override
+  _i10.RepositoriesService get repositories => (super.noSuchMethod(
+        Invocation.getter(#repositories),
+        returnValue: _FakeRepositoriesService_90(
+          this,
+          Invocation.getter(#repositories),
+        ),
+      ) as _i10.RepositoriesService);
+  @override
+  _i10.SearchService get search => (super.noSuchMethod(
+        Invocation.getter(#search),
+        returnValue: _FakeSearchService_91(
+          this,
+          Invocation.getter(#search),
+        ),
+      ) as _i10.SearchService);
+  @override
+  _i10.UrlShortenerService get urlShortener => (super.noSuchMethod(
+        Invocation.getter(#urlShortener),
+        returnValue: _FakeUrlShortenerService_92(
+          this,
+          Invocation.getter(#urlShortener),
+        ),
+      ) as _i10.UrlShortenerService);
+  @override
+  _i10.UsersService get users => (super.noSuchMethod(
+        Invocation.getter(#users),
+        returnValue: _FakeUsersService_93(
+          this,
+          Invocation.getter(#users),
+        ),
+      ) as _i10.UsersService);
+  @override
+  _i10.ChecksService get checks => (super.noSuchMethod(
+        Invocation.getter(#checks),
+        returnValue: _FakeChecksService_94(
+          this,
+          Invocation.getter(#checks),
+        ),
+      ) as _i10.ChecksService);
+  @override
+  _i17.Future<T> getJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, String>? params,
+    _i10.JSONConverter<S, T>? convert,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i17.Future<T>.value(null),
+      ) as _i17.Future<T>);
+  @override
+  _i17.Future<T> postJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i10.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #postJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i39.postJsonShim<S, T>(
+          path,
+          statusCode: statusCode,
+          fail: fail,
+          headers: headers,
+          params: params,
+          convert: convert,
+          body: body,
+          preview: preview,
+        ),
+      ) as _i17.Future<T>);
+  @override
+  _i17.Future<T> putJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i10.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #putJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i17.Future<T>.value(null),
+      ) as _i17.Future<T>);
+  @override
+  _i17.Future<T> patchJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i10.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #patchJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i17.Future<T>.value(null),
+      ) as _i17.Future<T>);
+  @override
+  _i17.Future<T> requestJson<S, T>(
+    String? method,
+    String? path, {
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i10.JSONConverter<S, T?>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #requestJson,
+          [
+            method,
+            path,
+          ],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i17.Future<T>.value(null),
+      ) as _i17.Future<T>);
+  @override
+  _i17.Future<_i2.Response> request(
+    String? method,
+    String? path, {
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    dynamic body,
+    int? statusCode,
+    void Function(_i2.Response)? fail,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #request,
+          [
+            method,
+            path,
+          ],
+          {
+            #headers: headers,
+            #params: params,
+            #body: body,
+            #statusCode: statusCode,
+            #fail: fail,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i17.Future<_i2.Response>.value(_FakeResponse_95(
+          this,
+          Invocation.method(
+            #request,
+            [
+              method,
+              path,
+            ],
+            {
+              #headers: headers,
+              #params: params,
+              #body: body,
+              #statusCode: statusCode,
+              #fail: fail,
+              #preview: preview,
+            },
+          ),
+        )),
+      ) as _i17.Future<_i2.Response>);
+  @override
+  void handleStatusCode(_i2.Response? response) => super.noSuchMethod(
+        Invocation.method(
+          #handleStatusCode,
+          [response],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void dispose() => super.noSuchMethod(
+        Invocation.method(
+          #dispose,
+          [],
+        ),
+        returnValueForMissingStub: null,
+      );
+}
diff --git a/auto_submit/pubspec.lock b/auto_submit/pubspec.lock
index b43a22c..4a0d4ec 100644
--- a/auto_submit/pubspec.lock
+++ b/auto_submit/pubspec.lock
@@ -5,694 +5,793 @@
     dependency: transitive
     description:
       name: _discoveryapis_commons
-      url: "https://pub.dartlang.org"
+      sha256: "50d83f715747fd9f41bcdc87eec93fa300c63dd9ca16bb884bbe7864a2a547bd"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.3"
   _fe_analyzer_shared:
     dependency: transitive
     description:
       name: _fe_analyzer_shared
-      url: "https://pub.dartlang.org"
+      sha256: d976d24314f193899a3079b14fe336215a63a3b1e1c3743eabba8f83e049e9a9
+      url: "https://pub.dev"
     source: hosted
-    version: "47.0.0"
+    version: "49.0.0"
   analyzer:
     dependency: transitive
     description:
       name: analyzer
-      url: "https://pub.dartlang.org"
+      sha256: "40ba2c6d2ab41a66476f8f1f099da6be0795c1b47221f5e2c5f8ad6048cdffae"
+      url: "https://pub.dev"
     source: hosted
-    version: "4.7.0"
+    version: "5.1.0"
   appengine:
     dependency: "direct main"
     description:
       name: appengine
-      url: "https://pub.dartlang.org"
+      sha256: "3e2a0fbfa16d9312f5a8bcb3f984851ada01b99d1bcea951a90f7ab957fcbb25"
+      url: "https://pub.dev"
     source: hosted
     version: "0.13.2"
   archive:
     dependency: transitive
     description:
       name: archive
-      url: "https://pub.dartlang.org"
+      sha256: "80e5141fafcb3361653ce308776cfd7d45e6e9fbb429e14eec571382c0c5fecb"
+      url: "https://pub.dev"
     source: hosted
-    version: "3.3.1"
+    version: "3.3.2"
   args:
     dependency: transitive
     description:
       name: args
-      url: "https://pub.dartlang.org"
+      sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515
+      url: "https://pub.dev"
     source: hosted
     version: "2.3.1"
   asn1lib:
     dependency: transitive
     description:
       name: asn1lib
-      url: "https://pub.dartlang.org"
+      sha256: "6f331278f2dd6d317539cb875e3ea937a5b8a225afbd7d726846f34bc8b6e75c"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.1.0"
+    version: "1.2.1"
   async:
     dependency: transitive
     description:
       name: async
-      url: "https://pub.dartlang.org"
+      sha256: "271b8899fc99f9df4f4ed419fa14e2fff392c7b2c162fbb87b222e2e963ddc73"
+      url: "https://pub.dev"
     source: hosted
     version: "2.9.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      url: "https://pub.dartlang.org"
+      sha256: "5bbf32bc9e518d41ec49718e2931cd4527292c9b0c6d2dffcf7fe6b9a8a8cf72"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   build:
     dependency: transitive
     description:
       name: build
-      url: "https://pub.dartlang.org"
+      sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.3.0"
+    version: "2.3.1"
   build_config:
     dependency: transitive
     description:
       name: build_config
-      url: "https://pub.dartlang.org"
+      sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
+      url: "https://pub.dev"
     source: hosted
-    version: "1.1.0"
+    version: "1.1.1"
   build_daemon:
     dependency: transitive
     description:
       name: build_daemon
-      url: "https://pub.dartlang.org"
+      sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   build_resolvers:
     dependency: transitive
     description:
       name: build_resolvers
-      url: "https://pub.dartlang.org"
+      sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.9"
+    version: "2.0.10"
   build_runner:
     dependency: "direct dev"
     description:
       name: build_runner
-      url: "https://pub.dartlang.org"
+      sha256: "6f48c61a9dcd2c3a9e62d3dcdab1ba382790e2f31026288cbabe55d6003c9c23"
+      url: "https://pub.dev"
     source: hosted
     version: "2.3.2"
   build_runner_core:
     dependency: transitive
     description:
       name: build_runner_core
-      url: "https://pub.dartlang.org"
+      sha256: "597a55d780766b10e02595b57b933a597cfbfa08c1bb0f5edfe826d34af1d818"
+      url: "https://pub.dev"
     source: hosted
-    version: "7.2.3"
+    version: "7.2.6"
   built_collection:
     dependency: transitive
     description:
       name: built_collection
-      url: "https://pub.dartlang.org"
+      sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+      url: "https://pub.dev"
     source: hosted
     version: "5.1.1"
   built_value:
     dependency: transitive
     description:
       name: built_value
-      url: "https://pub.dartlang.org"
+      sha256: d7a9cd57c215bdf8d502772447aa6b52a8ab3f956d25d5fdea6ef1df2d2dad60
+      url: "https://pub.dev"
     source: hosted
     version: "8.4.1"
   checked_yaml:
     dependency: transitive
     description:
       name: checked_yaml
-      url: "https://pub.dartlang.org"
+      sha256: dd007e4fb8270916820a0d66e24f619266b60773cddd082c6439341645af2659
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   code_builder:
     dependency: transitive
     description:
       name: code_builder
-      url: "https://pub.dartlang.org"
+      sha256: "02ce3596b459c666530f045ad6f96209474e8fee6e4855940a3cee65fb872ec5"
+      url: "https://pub.dev"
     source: hosted
     version: "4.3.0"
   collection:
     dependency: transitive
     description:
       name: collection
-      url: "https://pub.dartlang.org"
+      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      url: "https://pub.dev"
     source: hosted
-    version: "1.16.0"
+    version: "1.17.0"
   convert:
     dependency: transitive
     description:
       name: convert
-      url: "https://pub.dartlang.org"
+      sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+      url: "https://pub.dev"
     source: hosted
-    version: "3.0.2"
+    version: "3.1.1"
   corsac_jwt:
     dependency: "direct main"
     description:
       name: corsac_jwt
-      url: "https://pub.dartlang.org"
+      sha256: f86d1a1ad7d4db5727ae5d68dfd4437cbcf62daabe920190fcd5425457f5f377
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.0-nullsafety.1"
   coverage:
     dependency: transitive
     description:
       name: coverage
-      url: "https://pub.dartlang.org"
+      sha256: d2494157c32b303f47dedee955b1479f2979c4ff66934eb7c0def44fd9e0267a
+      url: "https://pub.dev"
     source: hosted
-    version: "1.5.0"
+    version: "1.6.1"
   crypto:
     dependency: "direct main"
     description:
       name: crypto
-      url: "https://pub.dartlang.org"
+      sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.2"
   dart_style:
     dependency: transitive
     description:
       name: dart_style
-      url: "https://pub.dartlang.org"
+      sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.2.3"
+    version: "2.2.4"
   file:
     dependency: transitive
     description:
       name: file
-      url: "https://pub.dartlang.org"
+      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
+      url: "https://pub.dev"
     source: hosted
     version: "6.1.4"
   fixnum:
     dependency: transitive
     description:
       name: fixnum
-      url: "https://pub.dartlang.org"
+      sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.1"
   flutter_lints:
     dependency: "direct dev"
     description:
       name: flutter_lints
-      url: "https://pub.dartlang.org"
+      sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   frontend_server_client:
     dependency: transitive
     description:
       name: frontend_server_client
-      url: "https://pub.dartlang.org"
+      sha256: "82715f8041a85a534a7bf64400b2ee0bb3d594ccf695d97c0bb017259657ff5d"
+      url: "https://pub.dev"
     source: hosted
-    version: "3.0.0"
+    version: "3.1.0"
   gcloud:
     dependency: transitive
     description:
       name: gcloud
-      url: "https://pub.dartlang.org"
+      sha256: a8ba019d4be7d2a4347eeff5baeee7dacb4d6b4f9b27dc747d3b51831ba1a54d
+      url: "https://pub.dev"
     source: hosted
     version: "0.8.6"
   github:
     dependency: "direct main"
     description:
       name: github
-      url: "https://pub.dartlang.org"
+      sha256: "51b66773ac2c4276c4ecc2657a9997a5cb91da33adb20b6107b2ba76b3a829ba"
+      url: "https://pub.dev"
     source: hosted
     version: "9.4.0"
   glob:
     dependency: transitive
     description:
       name: glob
-      url: "https://pub.dartlang.org"
+      sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   googleapis:
     dependency: "direct main"
     description:
       name: googleapis
-      url: "https://pub.dartlang.org"
+      sha256: dfea9984f0785ed445ba78e2aa8c55dadd86d6a60ea9e0ffbadad51edb5e7e36
+      url: "https://pub.dev"
     source: hosted
     version: "9.2.0"
   googleapis_auth:
     dependency: "direct main"
     description:
       name: googleapis_auth
-      url: "https://pub.dartlang.org"
+      sha256: "127b1bbd32170ab8312f503bd57f1d654d8e4039ddfbc63c027d3f7ade0eff74"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   gql:
     dependency: "direct main"
     description:
       name: gql
-      url: "https://pub.dartlang.org"
+      sha256: "11fa39353e8a69ec9d3c32bd133054593129c99564be18461c1b3ce212966373"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.13.1"
+    version: "0.14.1-alpha+1661890990239"
   gql_dedupe_link:
     dependency: transitive
     description:
       name: gql_dedupe_link
-      url: "https://pub.dartlang.org"
+      sha256: "024aa836258fdc67a25ae4547c3bafbea10c4948f925c6d6d6fd77c8e8dcbfb1"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.2"
+    version: "2.0.3"
   gql_error_link:
     dependency: transitive
     description:
       name: gql_error_link
-      url: "https://pub.dartlang.org"
+      sha256: a80b1f5f858798bc3ede38910e4c262d99755bffccb55d146c364bfeb8fa8350
+      url: "https://pub.dev"
     source: hosted
-    version: "0.2.2"
+    version: "0.2.3"
   gql_exec:
     dependency: transitive
     description:
       name: gql_exec
-      url: "https://pub.dartlang.org"
+      sha256: "983b702593eba382a5c518d30678b86798bf20fbf1b03affb8b10a418439160e"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.0"
+    version: "0.4.1"
   gql_http_link:
     dependency: transitive
     description:
       name: gql_http_link
-      url: "https://pub.dartlang.org"
+      sha256: "101232d7fd5a3524974c05d26bb3c247a3d35c5b4a8806a361accf841a8e942e"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.2"
+    version: "0.4.4+1"
   gql_link:
     dependency: transitive
     description:
       name: gql_link
-      url: "https://pub.dartlang.org"
+      sha256: "50c36e7462530361859e6a34bb84885b3091a1906846494295c5ea947019d854"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.2"
+    version: "0.5.1-alpha+1660256327632"
   gql_transform_link:
     dependency: transitive
     description:
       name: gql_transform_link
-      url: "https://pub.dartlang.org"
+      sha256: b532c777b5d1d7147d4ae5cc27fcd57bfcddb47a09e102c7b4a2e98fcc162737
+      url: "https://pub.dev"
     source: hosted
-    version: "0.2.2"
+    version: "0.2.3-alpha+1660256327655"
   graphql:
     dependency: "direct main"
     description:
       name: graphql
-      url: "https://pub.dartlang.org"
+      sha256: f4a91622de5f77e8df785e48286de57fed2efd8e8898d035409de07e530efc0d
+      url: "https://pub.dev"
     source: hosted
-    version: "5.1.1"
+    version: "5.1.2-beta.5"
   graphs:
     dependency: transitive
     description:
       name: graphs
-      url: "https://pub.dartlang.org"
+      sha256: ae0b3d956ff324c6f8671f08dcb2dbd71c99cdbf2aa3ca63a14190c47aa6679c
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   grpc:
     dependency: transitive
     description:
       name: grpc
-      url: "https://pub.dartlang.org"
+      sha256: "3e8e04c6277059b66d67951143842097e52bbf3f2c6fca2e67d3607b48d5c3ab"
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.2"
   hive:
     dependency: transitive
     description:
       name: hive
-      url: "https://pub.dartlang.org"
+      sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
+      url: "https://pub.dev"
     source: hosted
     version: "2.2.3"
   http:
     dependency: "direct main"
     description:
       name: http
-      url: "https://pub.dartlang.org"
+      sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
+      url: "https://pub.dev"
     source: hosted
     version: "0.13.5"
   http2:
     dependency: transitive
     description:
       name: http2
-      url: "https://pub.dartlang.org"
+      sha256: "58805ebc6513eed3b98ee0a455a8357e61d187bf2e0fdc1e53120770f78de258"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.0"
+    version: "2.0.1"
   http_methods:
     dependency: transitive
     description:
       name: http_methods
-      url: "https://pub.dartlang.org"
+      sha256: c192bb6fb4ae99d06053f67a2c1c65350a29bc778a39d9a12b96bd2ec820e9dc
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
   http_multi_server:
     dependency: transitive
     description:
       name: http_multi_server
-      url: "https://pub.dartlang.org"
+      sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
+      url: "https://pub.dev"
     source: hosted
     version: "3.2.1"
   http_parser:
     dependency: transitive
     description:
       name: http_parser
-      url: "https://pub.dartlang.org"
+      sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+      url: "https://pub.dev"
     source: hosted
-    version: "4.0.1"
+    version: "4.0.2"
   io:
     dependency: transitive
     description:
       name: io
-      url: "https://pub.dartlang.org"
+      sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.3"
   js:
     dependency: transitive
     description:
       name: js
-      url: "https://pub.dartlang.org"
+      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.6.4"
+    version: "0.6.5"
   json_annotation:
     dependency: "direct main"
     description:
       name: json_annotation
-      url: "https://pub.dartlang.org"
+      sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c"
+      url: "https://pub.dev"
     source: hosted
     version: "4.7.0"
   json_serializable:
     dependency: "direct dev"
     description:
       name: json_serializable
-      url: "https://pub.dartlang.org"
+      sha256: "87ce738d360e9f97861a06a7ed99bad56c60cdb76adc37b870c2667001c2bfb0"
+      url: "https://pub.dev"
     source: hosted
     version: "6.5.3"
   lints:
     dependency: transitive
     description:
       name: lints
-      url: "https://pub.dartlang.org"
+      sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.0"
+    version: "2.0.1"
   logging:
     dependency: "direct main"
     description:
       name: logging
-      url: "https://pub.dartlang.org"
+      sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
   matcher:
     dependency: transitive
     description:
       name: matcher
-      url: "https://pub.dartlang.org"
+      sha256: "80c2989398773fa06e2457e9ff08580f24e9858b28462a722241cb53e5613478"
+      url: "https://pub.dev"
     source: hosted
     version: "0.12.12"
   meta:
     dependency: "direct main"
     description:
       name: meta
-      url: "https://pub.dartlang.org"
+      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.0"
   mime:
     dependency: transitive
     description:
       name: mime
-      url: "https://pub.dartlang.org"
+      sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.2"
   mockito:
     dependency: "direct dev"
     description:
       name: mockito
-      url: "https://pub.dartlang.org"
+      sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe"
+      url: "https://pub.dev"
     source: hosted
     version: "5.3.2"
   neat_cache:
     dependency: "direct main"
     description:
       name: neat_cache
-      url: "https://pub.dartlang.org"
+      sha256: "98f528e6787988b85dc1384cfe9ed0b472a7277a1c7ea5a40cbed51e22f71163"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.2"
   node_preamble:
     dependency: transitive
     description:
       name: node_preamble
-      url: "https://pub.dartlang.org"
+      sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   normalize:
     dependency: transitive
     description:
       name: normalize
-      url: "https://pub.dartlang.org"
+      sha256: baf8caf2d8b745af5737cca6c24f7fe3cf3158897fdbcde9a909b9c8d3e2e5af
+      url: "https://pub.dev"
     source: hosted
-    version: "0.6.0+1"
+    version: "0.7.2"
   package_config:
     dependency: transitive
     description:
       name: package_config
-      url: "https://pub.dartlang.org"
+      sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   path:
     dependency: transitive
     description:
       name: path
-      url: "https://pub.dartlang.org"
+      sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.2"
   pointycastle:
     dependency: transitive
     description:
       name: pointycastle
-      url: "https://pub.dartlang.org"
+      sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346
+      url: "https://pub.dev"
     source: hosted
-    version: "3.6.1"
+    version: "3.6.2"
   pool:
     dependency: transitive
     description:
       name: pool
-      url: "https://pub.dartlang.org"
+      sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+      url: "https://pub.dev"
     source: hosted
     version: "1.5.1"
   protobuf:
     dependency: transitive
     description:
       name: protobuf
-      url: "https://pub.dartlang.org"
+      sha256: "01dd9bd0fa02548bf2ceee13545d4a0ec6046459d847b6b061d8a27237108a08"
+      url: "https://pub.dev"
     source: hosted
     version: "2.1.0"
   pub_semver:
     dependency: transitive
     description:
       name: pub_semver
-      url: "https://pub.dartlang.org"
+      sha256: b959af0a045c3484c4a8f4997731f5bfe4cac60d732fd8ce35b351f2d6a459fe
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   pubspec_parse:
     dependency: transitive
     description:
       name: pubspec_parse
-      url: "https://pub.dartlang.org"
+      sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   retry:
     dependency: "direct main"
     description:
       name: retry
-      url: "https://pub.dartlang.org"
+      sha256: "45dfeebaf095b606fdb9dbfb4c114cc204449bc274783b452658365e03afdbab"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.0"
   rsa_pkcs:
     dependency: transitive
     description:
       name: rsa_pkcs
-      url: "https://pub.dartlang.org"
+      sha256: "17a52b0c010319f0d4c7bcc635eb89e2efeaec44975b3fb45f850b350a2b0513"
+      url: "https://pub.dev"
     source: hosted
     version: "2.0.1"
   rxdart:
     dependency: transitive
     description:
       name: rxdart
-      url: "https://pub.dartlang.org"
+      sha256: "5d22055fd443806c03ef24a02000637cf51eae49c2a0168d38a43fc166b0209c"
+      url: "https://pub.dev"
     source: hosted
     version: "0.27.5"
   shelf:
     dependency: "direct main"
     description:
       name: shelf
-      url: "https://pub.dartlang.org"
+      sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c
+      url: "https://pub.dev"
     source: hosted
     version: "1.4.0"
   shelf_packages_handler:
     dependency: transitive
     description:
       name: shelf_packages_handler
-      url: "https://pub.dartlang.org"
+      sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.1"
   shelf_router:
     dependency: "direct main"
     description:
       name: shelf_router
-      url: "https://pub.dartlang.org"
+      sha256: "0b0bfb835e8b2bb43c5341ee689f0d2851e9cea377a4f2db4ec06a1a99beace4"
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.3"
   shelf_static:
     dependency: transitive
     description:
       name: shelf_static
-      url: "https://pub.dartlang.org"
+      sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   shelf_web_socket:
     dependency: transitive
     description:
       name: shelf_web_socket
-      url: "https://pub.dartlang.org"
+      sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.2"
   source_gen:
     dependency: transitive
     description:
       name: source_gen
-      url: "https://pub.dartlang.org"
+      sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.2.2"
+    version: "1.2.6"
   source_helper:
     dependency: transitive
     description:
       name: source_helper
-      url: "https://pub.dartlang.org"
+      sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.3.2"
+    version: "1.3.3"
   source_map_stack_trace:
     dependency: transitive
     description:
       name: source_map_stack_trace
-      url: "https://pub.dartlang.org"
+      sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   source_maps:
     dependency: transitive
     description:
       name: source_maps
-      url: "https://pub.dartlang.org"
+      sha256: "490098075234dcedb83c5d949b4c93dad5e6b7702748de000be2b57b8e6b2427"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.10.10"
+    version: "0.10.11"
   source_span:
     dependency: transitive
     description:
       name: source_span
-      url: "https://pub.dartlang.org"
+      sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
+      url: "https://pub.dev"
     source: hosted
     version: "1.9.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      url: "https://pub.dartlang.org"
+      sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+      url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.11.0"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      url: "https://pub.dartlang.org"
+      sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   stream_transform:
     dependency: transitive
     description:
       name: stream_transform
-      url: "https://pub.dartlang.org"
+      sha256: f1d172e22a5432c042b5adfa9aff621372e4292231d9d73ad00f486ad01c2395
+      url: "https://pub.dev"
     source: hosted
-    version: "2.0.0"
+    version: "2.0.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      url: "https://pub.dartlang.org"
+      sha256: "862015c5db1f3f3c4ea3b94dc2490363a84262994b88902315ed74be1155612f"
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      url: "https://pub.dartlang.org"
+      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   test:
     dependency: "direct dev"
     description:
       name: test
-      url: "https://pub.dartlang.org"
+      sha256: "9ffb8dbda445ba2922522423e7c7288967de89129205ce2dadf856abfd2b72ae"
+      url: "https://pub.dev"
     source: hosted
     version: "1.21.6"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      url: "https://pub.dartlang.org"
+      sha256: ceeddf59d613e862e77f4b506cfc2945ac9637ce0b4c00f4f4c1ac639f3e9731
+      url: "https://pub.dev"
     source: hosted
     version: "0.4.14"
   test_core:
     dependency: transitive
     description:
       name: test_core
-      url: "https://pub.dartlang.org"
+      sha256: "2b38b8ecfa37f8d375b4aa2a106a86ade536b577411530c2ea68c83abb1f004b"
+      url: "https://pub.dev"
     source: hosted
     version: "0.4.18"
   timing:
     dependency: transitive
     description:
       name: timing
-      url: "https://pub.dartlang.org"
+      sha256: c386d07d7f5efc613479a7c4d9d64b03710b03cfaa7e8ad5f2bfb295a1f0dfad
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.0"
   typed_data:
     dependency: transitive
     description:
       name: typed_data
-      url: "https://pub.dartlang.org"
+      sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   uuid:
     dependency: transitive
     description:
       name: uuid
-      url: "https://pub.dartlang.org"
+      sha256: "2469694ad079893e3b434a627970c33f2fa5adc46dfe03c9617546969a9a8afc"
+      url: "https://pub.dev"
     source: hosted
     version: "3.0.6"
   vm_service:
     dependency: transitive
     description:
       name: vm_service
-      url: "https://pub.dartlang.org"
+      sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7
+      url: "https://pub.dev"
     source: hosted
-    version: "9.3.0"
+    version: "9.4.0"
   watcher:
     dependency: transitive
     description:
       name: watcher
-      url: "https://pub.dartlang.org"
+      sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.0.1"
+    version: "1.0.2"
   web_socket_channel:
     dependency: transitive
     description:
       name: web_socket_channel
-      url: "https://pub.dartlang.org"
+      sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd"
+      url: "https://pub.dev"
     source: hosted
     version: "2.2.0"
   webkit_inspection_protocol:
     dependency: transitive
     description:
       name: webkit_inspection_protocol
-      url: "https://pub.dartlang.org"
+      sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.1.0"
+    version: "1.2.0"
   yaml:
     dependency: transitive
     description:
       name: yaml
-      url: "https://pub.dartlang.org"
+      sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
+      url: "https://pub.dev"
     source: hosted
     version: "3.1.1"
 sdks:
-  dart: ">=2.18.0 <3.0.0"
+  dart: ">=2.18.0 <4.0.0"
diff --git a/auto_submit/pubspec.yaml b/auto_submit/pubspec.yaml
index e12123a..c949b01 100644
--- a/auto_submit/pubspec.yaml
+++ b/auto_submit/pubspec.yaml
@@ -17,7 +17,7 @@
   googleapis: ^9.2.0
   googleapis_auth: ^1.3.1
   graphql: ^5.1.1
-  gql: ^0.13.1
+  gql: ^0.14.0
   http: ^0.13.5
   json_annotation: ^4.7.0
   meta: ^1.8.0
@@ -31,7 +31,7 @@
 dev_dependencies:
   build_runner: ^2.3.2
   json_serializable: ^6.5.3
-  flutter_lints: ^2.0.0
+  flutter_lints: ^2.0.1
   mockito: ^5.3.2
   test: ^1.21.6
 
