1
0
Fork 0
mirror of https://github.com/imjasonh/esp32 synced 2026-07-06 23:52:24 +00:00
No description
Find a file
Jason Hall b501cafdf3
Merge pull request #18 from imjasonh/dependabot/cargo/tools/publisher/host-tools-6abb98af4c
Bump tokio from 1.52.1 to 1.52.2 in /tools/publisher in the host-tools group across 1 directory
2026-05-04 09:03:05 -04:00
.cargo
.github ci: restore caches before cargo install espflash 2026-05-03 00:17:25 -04:00
docs docs: reorganise into docs/, fold logs-plan + monitoring-plan into observability.md 2026-05-03 08:30:43 -04:00
src restore cloud_log.rs review changes; AtomicU64 → AtomicU32 (fixes CI) 2026-05-04 03:37:20 +00:00
tools Bump tokio 2026-05-04 12:57:01 +00:00
trust
.gitignore cloud_log: tolerate missing NVS, trim PEM, demote tick logs 2026-05-02 17:56:32 -04:00
build.rs Provision Wi-Fi creds + trust roots via NVS instead of compile-time embed 2026-05-02 16:14:26 -04:00
Cargo.lock Merge main into cloud-logging 2026-05-02 18:01:58 -04:00
Cargo.toml Merge main into cloud-logging 2026-05-02 18:01:58 -04:00
CLAUDE.md docs: reorganise into docs/, fold logs-plan + monitoring-plan into observability.md 2026-05-03 08:30:43 -04:00
LICENSE
Makefile publish: use bash for the recipe so set -eo pipefail works 2026-05-04 10:25:46 +00:00
partitions.csv Aggressive release-profile flags + grow OTA slots to 1.94 MB 2026-05-02 15:39:33 -04:00
provisioning.toml.example provision OTA repo/tag/poll_secs; tag logs+metrics with fw_version 2026-05-02 23:56:26 -04:00
README.md docs: reorganise into docs/, fold logs-plan + monitoring-plan into observability.md 2026-05-03 08:30:43 -04:00
sdkconfig.defaults.in Serialize short HTTPS calls; tighten mbedtls per-session heap 2026-05-02 20:48:53 -04:00

ESP32 Rust

CI Publish OTA

Std Rust on an Inland ESP-WROOM-32 dev board with end-to-end OTA over GHCR + cosign keyless signing. Optional Cloud Logging + Cloud Monitoring shipped from the device. E-ink display work coming next.

What it does today

  • Polls ghcr.io/imjasonh/esp32:latest every ~60 s for new firmware.
  • For each new digest: fetches the cosign Sigstore Bundle, verifies the signature + cert chain to the Sigstore root + that the signer's identity matches the allowlist provisioned into the device's NVS.
  • On verify-pass, streams the layer to the inactive OTA partition, reboots, marks the new image valid only after Wi-Fi + registry bringup checks pass. Any post-OTA failure auto-rolls back via the bootloader.
  • Optionally ships structured tracing events to Cloud Logging and chip-health metrics (heap, stack, wifi, cpu, …) to Cloud Monitoring. Opt-in per device via the [gcp] block in provisioning.toml.

Push to main → CI builds → publish workflow pushes a signed image to GHCR → device picks it up on its next poll.

Docs

Quick start

cargo install espup espflash ldproxy
brew install cmake ninja dfu-util cosign jq
espup install --targets esp32
curl -LsSf https://astral.sh/uv/install.sh | sh

make provisioning.toml             # creates from template
$EDITOR provisioning.toml          # fill in wifi creds + trust identities
make bootstrap                     # build, flash everything, write NVS
make monitor                       # watch it boot and connect

See docs/setup.md for full details, including optional GCP Logging + Monitoring setup.