MCPcopy Create free account
hub / github.com/FastLED/FastLED / ESP32ArtifactCopier

Class ESP32ArtifactCopier

ci/compiler/esp32_artifacts.py:205–307  ·  view source on GitHub ↗

Copies ESP32 artifacts to output directory with proper structure.

Source from the content-addressed store, hash-verified

203
204
205class ESP32ArtifactCopier:
206 """Copies ESP32 artifacts to output directory with proper structure."""
207
208 def __init__(self, artifacts: ArtifactSet, flash_config: FlashConfig):
209 self.artifacts = artifacts
210 self.flash_config = flash_config
211
212 def copy_for_qemu(self, output_dir: Path, board_name: str) -> bool:
213 """Copy all artifacts needed for QEMU testing."""
214 output_dir.mkdir(parents=True, exist_ok=True)
215
216 copied: list[str] = []
217
218 # Copy required files
219 if not self._copy_required_files(output_dir, copied):
220 return False
221
222 # Copy optional files
223 self._copy_optional_files(output_dir, copied)
224
225 # Ensure partitions.csv exists (required by tobozo QEMU)
226 self._ensure_partitions_csv(output_dir, copied)
227
228 # Create merged flash image if artifacts are present
229 if self.artifacts.firmware:
230 self._create_flash_image(output_dir, board_name, copied)
231
232 self._print_summary(output_dir, copied)
233 return True
234
235 def _copy_required_files(self, output_dir: Path, copied: list[str]) -> bool:
236 """Copy required files for QEMU."""
237 success = True
238 required = [
239 (self.artifacts.firmware, FILE_NAMES.FIRMWARE),
240 (self.artifacts.bootloader, FILE_NAMES.BOOTLOADER),
241 (self.artifacts.partitions_bin, FILE_NAMES.PARTITIONS_BIN),
242 (self.artifacts.boot_app0, FILE_NAMES.BOOT_APP0),
243 ]
244
245 for source, dest_name in required:
246 if source and source.exists():
247 shutil.copy2(source, output_dir / dest_name)
248 copied.append(dest_name)
249 elif dest_name == FILE_NAMES.FIRMWARE:
250 print(f"❌ Required file missing: {dest_name}")
251 success = False
252 elif dest_name == FILE_NAMES.BOOT_APP0:
253 # Create default boot_app0.bin
254 self._create_default_boot_app0(output_dir)
255 copied.append(dest_name)
256
257 return success
258
259 def _copy_optional_files(self, output_dir: Path, copied: list[str]) -> None:
260 """Copy optional files if present."""
261 if self.artifacts.spiffs:
262 shutil.copy2(self.artifacts.spiffs, output_dir / FILE_NAMES.SPIFFS)

Callers 1

copy_qemu_artifactsMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected