83 lines
1.8 KiB
Python
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)
|