tests: run modified tests with full coverage

This addition would catch tests being added or modified and would run
those tests with --all and catch issues with non default board
configurations before they get merged into the tree.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
diff --git a/scripts/ci/get_modified_tests.py b/scripts/ci/get_modified_tests.py
new file mode 100755
index 0000000..23793aa
--- /dev/null
+++ b/scripts/ci/get_modified_tests.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+
+# A script to generate a list of tests that have changed or added and create an
+# arguemnts file for sanitycheck to allow running those tests with --all
+
+import sys
+import re, os
+from email.utils import parseaddr
+import sh
+import logging
+import argparse
+
+if "ZEPHYR_BASE" not in os.environ:
+    logging.error("$ZEPHYR_BASE environment variable undefined.\n")
+    exit(1)
+
+logger = None
+
+repository_path = os.environ['ZEPHYR_BASE']
+sh_special_args = {
+    '_tty_out': False,
+    '_cwd': repository_path
+}
+
+def init_logs():
+    global logger
+    log_lev = os.environ.get('LOG_LEVEL', None)
+    level = logging.INFO
+    if log_lev == "DEBUG":
+        level = logging.DEBUG
+    elif log_lev == "ERROR":
+        level = logging.ERROR
+
+    console = logging.StreamHandler()
+    format = logging.Formatter('%(levelname)-8s: %(message)s')
+    console.setFormatter(format)
+    logger = logging.getLogger('')
+    logger.addHandler(console)
+    logger.setLevel(level)
+
+    logging.debug("Log init completed")
+
+def parse_args():
+    parser = argparse.ArgumentParser(
+                description="Generate a sanitycheck argument for for tests "
+                            " that have changed")
+    parser.add_argument('-c', '--commits', default=None,
+            help="Commit range in the form: a..b")
+    return parser.parse_args()
+
+def main():
+    args = parse_args()
+    if not args.commits:
+        exit(1)
+
+    commit = sh.git("diff","--name-only", args.commits, **sh_special_args)
+    files = commit.split("\n")
+    tests = set()
+    for f in files:
+        d = os.path.dirname(f)
+        while d:
+            if os.path.exists(os.path.join(d, "testcase.yaml")) or os.path.exists(os.path.join(d, "sample.yaml")):
+                tests.add(d)
+                break
+            else:
+                d = os.path.dirname(d)
+
+    if tests:
+        print("-T\n%s\n--all" %("\n-T\n".join(tests)))
+
+if __name__ == "__main__":
+    main()
+