(args: argparse.Namespace)
| 314 | |
| 315 | |
| 316 | def create_concurrent_run_args(args: argparse.Namespace) -> ConcurrentRunArgs: |
| 317 | skip_init = args.skip_init |
| 318 | if args.interactive: |
| 319 | boards = choose_board_interactively(DEFAULT_BOARDS_NAMES + OTHER_BOARDS_NAMES) |
| 320 | else: |
| 321 | boards = args.boards.split(",") if args.boards else DEFAULT_BOARDS_NAMES |
| 322 | projects: list[Board] = [] |
| 323 | for board in boards: |
| 324 | projects.append(create_board(board, no_project_options=args.no_project_options)) |
| 325 | extra_examples: dict[Board, list[Path]] = {} |
| 326 | # Handle both positional and named examples |
| 327 | if args.positional_examples: |
| 328 | # Convert positional examples, handling both "examples/Blink" and "Blink" formats |
| 329 | examples = [] |
| 330 | for example in args.positional_examples: |
| 331 | # Remove "examples/" prefix if present |
| 332 | if example.startswith("examples/"): |
| 333 | example = example[len("examples/") :] |
| 334 | examples.append(example) |
| 335 | elif args.examples: |
| 336 | examples = args.examples.split(",") |
| 337 | else: |
| 338 | examples = DEFAULT_EXAMPLES |
| 339 | # Only add extra examples when using defaults |
| 340 | for b, _examples in EXTRA_EXAMPLES.items(): |
| 341 | resolved_examples = [resolve_example_path(example) for example in _examples] |
| 342 | extra_examples[b] = resolved_examples |
| 343 | examples_paths = [resolve_example_path(example) for example in examples] |
| 344 | # now process example exclusions. |
| 345 | if args.exclude_examples: |
| 346 | exclude_examples = args.exclude_examples.split(",") |
| 347 | examples_paths = [ |
| 348 | example |
| 349 | for example in examples_paths |
| 350 | if example.name not in exclude_examples |
| 351 | ] |
| 352 | for exclude in exclude_examples: |
| 353 | examples.remove(exclude) |
| 354 | customsdk = args.customsdk |
| 355 | defines: list[str] = [] |
| 356 | if args.defines: |
| 357 | defines.extend(args.defines.split(",")) |
| 358 | extra_packages: list[str] = [] |
| 359 | if args.extra_packages: |
| 360 | extra_packages.extend(args.extra_packages.split(",")) |
| 361 | build_dir = args.build_dir |
| 362 | extra_scripts = "pre:lib/ci/util-flags.py" |
| 363 | verbose = args.verbose |
| 364 | |
| 365 | out: ConcurrentRunArgs = ConcurrentRunArgs( |
| 366 | projects=projects, |
| 367 | examples=examples_paths, |
| 368 | skip_init=skip_init, |
| 369 | defines=defines, |
| 370 | customsdk=customsdk, |
| 371 | extra_packages=extra_packages, |
| 372 | libs=LIBS, |
| 373 | build_dir=build_dir, |
no test coverage detected