zephyr/scripts/utils/twister_to_list.py

83 lines
1.8 KiB
Python

"""
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)