Find build info for a specific board or detect available boards Args: board_name: Board name to search for (optional) example: Example name for finding example-specific build_info_{example}.json (default: "Blink") Returns: Tuple of (build_info_path, board_name)
(
board_name: Optional[str] = None, example: str = "Blink"
)
| 741 | |
| 742 | |
| 743 | def find_board_build_info( |
| 744 | board_name: Optional[str] = None, example: str = "Blink" |
| 745 | ) -> tuple[Path, str]: |
| 746 | """Find build info for a specific board or detect available boards |
| 747 | |
| 748 | Args: |
| 749 | board_name: Board name to search for (optional) |
| 750 | example: Example name for finding example-specific build_info_{example}.json (default: "Blink") |
| 751 | |
| 752 | Returns: |
| 753 | Tuple of (build_info_path, board_name) |
| 754 | """ |
| 755 | # Detect build directory |
| 756 | current = Path.cwd() |
| 757 | build_dir: Optional[Path] = None |
| 758 | while current != current.parent: |
| 759 | candidate = current / ".build" |
| 760 | if candidate.exists(): |
| 761 | build_dir = candidate |
| 762 | break |
| 763 | current = current.parent |
| 764 | |
| 765 | if not build_dir: |
| 766 | print("Error: Could not find build directory (.build)") |
| 767 | sys.exit(1) |
| 768 | |
| 769 | assert build_dir is not None |
| 770 | |
| 771 | # If specific board requested, look for it |
| 772 | if board_name: |
| 773 | # Try example-specific build_info_{example}.json first |
| 774 | build_info_filename = f"build_info_{example}.json" |
| 775 | |
| 776 | # 1) Direct board directory: .build/<board>/build_info_{example}.json |
| 777 | board_dir = build_dir / board_name |
| 778 | if board_dir.exists() and (board_dir / build_info_filename).exists(): |
| 779 | return board_dir / build_info_filename, board_name |
| 780 | |
| 781 | # 2) PlatformIO nested directory: .build/pio/<board>/build_info_{example}.json |
| 782 | pio_board_dir = build_dir / "pio" / board_name |
| 783 | if pio_board_dir.exists() and (pio_board_dir / build_info_filename).exists(): |
| 784 | return pio_board_dir / build_info_filename, board_name |
| 785 | |
| 786 | # Fallback to legacy build_info.json (for backward compatibility) |
| 787 | if board_dir.exists() and (board_dir / "build_info.json").exists(): |
| 788 | print( |
| 789 | f"Warning: Using legacy build_info.json (consider migrating to {build_info_filename})" |
| 790 | ) |
| 791 | return board_dir / "build_info.json", board_name |
| 792 | |
| 793 | if pio_board_dir.exists() and (pio_board_dir / "build_info.json").exists(): |
| 794 | print( |
| 795 | f"Warning: Using legacy build_info.json (consider migrating to {build_info_filename})" |
| 796 | ) |
| 797 | return pio_board_dir / "build_info.json", board_name |
| 798 | |
| 799 | print( |
| 800 | f"Error: Board '{board_name}' not found or missing {build_info_filename} (or build_info.json)" |