Summary
- publish flash-ready firmware packages under private stackdrift-firmware package namespace
- install protected ESPHome secrets only for publish jobs and reject compile-only placeholder secrets
- add shared firmware update token to ESPHome update URLs while keeping it out of retained MQTT metadata
- mark manifests with flashable/build_profile and authenticate private package list/prune calls
Verification
- python3 -m unittest tests/test_firmware_packaging.py
- python3 -m py_compile scripts/compile_devices.py scripts/fleetlib.py scripts/install_firmware_secrets.py scripts/package_device.py scripts/publish_packages.py
- parsed .forgejo/workflows/firmware.yml with PyYAML
- Docker ESPHome config checks for atlas-hydro-kit, atoms3u-sensor-rig, and m5stack-airq
Summary
- publish flash-ready firmware packages under private stackdrift-firmware package namespace
- install protected ESPHome secrets only for publish jobs and reject compile-only placeholder secrets
- add shared firmware update token to ESPHome update URLs while keeping it out of retained MQTT metadata
- mark manifests with flashable/build_profile and authenticate private package list/prune calls
Verification
- python3 -m unittest tests/test_firmware_packaging.py
- python3 -m py_compile scripts/compile_devices.py scripts/fleetlib.py scripts/install_firmware_secrets.py scripts/package_device.py scripts/publish_packages.py
- parsed .forgejo/workflows/firmware.yml with PyYAML
- Docker ESPHome config checks for atlas-hydro-kit, atoms3u-sensor-rig, and m5stack-airq
HGC-4