You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.8 KiB
82 lines
1.8 KiB
""" |
|
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)
|
|
|