Exempt package test runners from test bot (#2124)

diff --git a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
index 8c05af4..2778e99 100644
--- a/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
+++ b/app_dart/lib/src/request_handlers/github/webhook_subscription.dart
@@ -470,7 +470,13 @@
           !filename.endsWith('.cirrus.yml') &&
           !filename.contains('.ci/') &&
           !filename.contains('.github/') &&
-          !filename.endsWith('.md')) {
+          !filename.endsWith('.md') &&
+          // Custom package-specific test runners. These do not count as tests
+          // for the purposes of testing a change that otherwise needs tests,
+          // but since they are the driver for tests they don't need test
+          // coverage.
+          !filename.endsWith('tool/run_tests.dart') &&
+          !filename.endsWith('run_tests.sh')) {
         needsTests = !_allChangesAreCodeComments(file);
       }
       // See https://github.com/flutter/flutter/wiki/Plugin-Tests for discussion
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 f73853c..50cc2e5 100644
--- a/app_dart/test/request_handlers/github/webhook_subscription_test.dart
+++ b/app_dart/test/request_handlers/github/webhook_subscription_test.dart
@@ -2112,6 +2112,31 @@
       ));
     });
 
+    test('Packages does not comment for custom test driver', () async {
+      const int issueNumber = 123;
+
+      tester.message = generateGithubWebhookMessage(
+        action: 'opened',
+        number: issueNumber,
+        slug: Config.packagesSlug,
+      );
+
+      when(pullRequestsService.listFiles(Config.packagesSlug, issueNumber)).thenAnswer(
+        (_) => Stream<PullRequestFile>.fromIterable(<PullRequestFile>[
+          PullRequestFile()..filename = 'packages/foo/tool/run_tests.dart',
+          PullRequestFile()..filename = 'packages/foo/run_tests.sh',
+        ]),
+      );
+
+      await tester.post(webhook);
+
+      verifyNever(issuesService.createComment(
+        Config.packagesSlug,
+        issueNumber,
+        argThat(contains(config.missingTestsPullRequestMessageValue)),
+      ));
+    });
+
     test('Schedule tasks when pull request is closed and merged', () async {
       const int issueNumber = 123;