zephyr/scripts/ci/get_modified_boards.py

84 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
# SPDX-License-Identifier: Apache-2.0
# A script to generate a list of boards that have changed or added and create an
# arguemnts file for sanitycheck to allow running more tests for those boards.
import re, os
import sh
import logging
import argparse
import glob
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():
log_lev = os.environ.get('LOG_LEVEL', None)
level = logging.INFO
global logger
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 boards "
" that have changed")
parser.add_argument('-c', '--commits', default=None,
help="Commit range in the form: a..b")
return parser.parse_args()
def main():
boards = set()
all_boards = set()
args = parse_args()
if not args.commits:
exit(1)
commit = sh.git("diff","--name-only", args.commits, **sh_special_args)
files = commit.split("\n")
for f in files:
if f.endswith(".rst") or f.endswith(".png") or f.endswith(".jpg"):
continue
p = re.match(r"^boards\/[^/]+\/([^/]+)\/", f)
if p and p.groups():
boards.add(p.group(1))
for b in boards:
suboards = glob.glob("boards/*/%s/*.yaml" %(b))
for subboard in suboards:
name = os.path.splitext(os.path.basename(subboard))[0]
if name:
all_boards.add(name)
if all_boards:
print("-p\n%s" %("\n-p\n".join(all_boards)))
if __name__ == "__main__":
main()