""" Utility script to migrate Twister configuration files from using string-based lists to native YAML lists. Usage:: python $ZEPHYR_BASE/scripts/utils/twister_to_list.py \ -p path/to/zephyr-based-project Copyright (c) 2023 Nordic Semiconductor ASA SPDX-License-Identifier: Apache-2.0 """ import argparse from pathlib import Path from ruamel.yaml import YAML FIELDS = ( "arch_exclude", "arch_allow", "depends_on", "extra_args", "extra_sections", "platform_exclude", "platform_allow", "tags", "toolchain_exclude", "toolchain_allow" ) def process(conf): update = False for field in FIELDS: val = conf.get(field) if not val or not isinstance(val, str): continue s = val.split() if len(s) > 1: conf[field] = s update = True return update def twister_to_list(project, dry_run): yaml = YAML() yaml.indent(offset=2) yaml.preserve_quotes = True for p in project.glob("**/*"): if p.name not in ("testcase.yaml", "sample.yaml"): continue conf = yaml.load(p) update = False common = conf.get("common") if common: update |= process(common) for _, spec in conf["tests"].items(): update |= process(spec) if update: print(f"Updating {p}{' (dry run)' if dry_run else ''}") if not dry_run: with open(p, "w") as f: yaml.dump(conf, f) if __name__ == "__main__": parser = argparse.ArgumentParser(allow_abbrev=False) parser.add_argument( "-p", "--project", type=Path, required=True, help="Zephyr-based project path" ) parser.add_argument("--dry-run", action="store_true", help="Dry run") args = parser.parse_args() twister_to_list(args.project, args.dry_run)