scripts: check_maintainers: add scripts for checking GitHub accounts

Add script for checking if maintainer and collaborator GitHub accounts
exist.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
diff --git a/scripts/check_maintainers.py b/scripts/check_maintainers.py
new file mode 100755
index 0000000..8b393b0
--- /dev/null
+++ b/scripts/check_maintainers.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+
+# Copyright (c) 2024 Vestas Wind Systems A/S
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import sys
+
+from github_helpers import get_github_object
+from get_maintainer import Maintainers
+from github.GithubException import UnknownObjectException
+
+def parse_args():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__, allow_abbrev=False)
+
+    parser.add_argument(
+        "-m", "--maintainers",
+        metavar="MAINTAINERS_FILE",
+        help="Maintainers file to load. If not specified, MAINTAINERS.yml in "
+             "the top-level repository directory is used, and must exist. "
+             "Paths in the maintainers file will always be taken as relative "
+             "to the top-level directory.")
+
+    return parser.parse_args()
+
+def main() -> None:
+    args = parse_args()
+    zephyr_repo = get_github_object().get_repo('zephyrproject-rtos/zephyr')
+    maintainers = Maintainers(args.maintainers)
+    gh = get_github_object()
+    gh_users = []
+    notfound = []
+    noncollabs = []
+
+    for area in maintainers.areas.values():
+        gh_users = list(set(gh_users + area.maintainers + area.collaborators))
+
+    gh_users.sort()
+
+    print('Checking maintainer and collaborator user accounts on GitHub:')
+    for gh_user in gh_users:
+        try:
+            print('.', end='', flush=True)
+            gh.get_user(gh_user)
+
+            if not zephyr_repo.has_in_collaborators(gh_user):
+                noncollabs.append(gh_user)
+        except UnknownObjectException:
+            notfound.append(gh_user)
+    print('\n')
+
+    if notfound:
+        print('The following GitHub user accounts do not exist:')
+        print('\n'.join(notfound))
+    else:
+        print('No non-existing user accounts found')
+
+    if noncollabs:
+        print('The following GitHub user accounts are not collaborators:')
+        print('\n'.join(noncollabs))
+    else:
+        print('No non-collaborator user accounts found')
+
+    if notfound or noncollabs:
+        sys.exit(1)
+
+if __name__ == '__main__':
+    main()