Find a directory containing platformio.ini file for the specified board. Handles multiple build directory structures: Modern: .build/pio/uno/Blink/platformio.ini Legacy: .build/fled/examples/uno/Blink/platformio.ini Old: .build/uno/Blink/platformio.ini Returns the directory con
(build_root: Path, board_name: str)
| 39 | |
| 40 | |
| 41 | def find_platformio_project_dir(build_root: Path, board_name: str) -> Path | None: |
| 42 | """Find a directory containing platformio.ini file for the specified board. |
| 43 | |
| 44 | Handles multiple build directory structures: |
| 45 | Modern: .build/pio/uno/Blink/platformio.ini |
| 46 | Legacy: .build/fled/examples/uno/Blink/platformio.ini |
| 47 | Old: .build/uno/Blink/platformio.ini |
| 48 | |
| 49 | Returns the directory containing platformio.ini, or None if not found. |
| 50 | """ |
| 51 | if not build_root.exists(): |
| 52 | return None |
| 53 | |
| 54 | # Search patterns for different build structures |
| 55 | search_patterns = [ |
| 56 | # Modern PlatformIO structure: .build/pio/{board}/**/*.ini |
| 57 | build_root / "pio" / board_name, |
| 58 | # Legacy structure: .build/fled/examples/{board}/**/*.ini |
| 59 | build_root / "fled" / "examples" / board_name, |
| 60 | # Old structure: .build/{board}/**/*.ini |
| 61 | build_root / board_name, |
| 62 | ] |
| 63 | |
| 64 | # Try each search pattern |
| 65 | for base_dir in search_patterns: |
| 66 | if not base_dir.exists(): |
| 67 | continue |
| 68 | |
| 69 | # Look for platformio.ini in this directory and its subdirectories |
| 70 | project_dir = find_platformio_ini_in_tree(base_dir) |
| 71 | if project_dir: |
| 72 | return project_dir |
| 73 | |
| 74 | # Last resort: search the entire build directory for board-related platformio.ini |
| 75 | for platformio_ini in build_root.rglob("platformio.ini"): |
| 76 | # Check if this platformio.ini is for our board by looking at the path |
| 77 | if board_name in str(platformio_ini): |
| 78 | print(f"Found platformio.ini in {platformio_ini.parent}") |
| 79 | return platformio_ini.parent |
| 80 | |
| 81 | return None |
| 82 | |
| 83 | |
| 84 | def find_platformio_ini_in_tree(base_dir: Path) -> Path | None: |
no test coverage detected