Release Guide
This page describes what a good EspWaveRider release contains, how release assets are produced, and what should be true before a release is considered production-ready.
Release goals
A release should give operators enough information to answer four questions quickly:
- What changed?
- Which board binary should I flash?
- What was validated?
- Are there any known limits or compatibility notes?
What the pipeline produces
On every qualifying push to main, semantic-release:
- calculates the next semantic version from conventional commits
- updates
CHANGELOG.md - creates the GitHub release tag
- builds board-specific firmware binaries
- attaches
.binand.sha256assets to the GitHub release
Published board targets:
| PlatformIO environment | Published release target |
|---|---|
esp32-s3-devkitm-1 |
lonely-esp32-s3-devkitm-1 |
esp32dev-uart1 |
esp32-generic-uart1 |
heltec-wifi-lora-32-v3 |
heltec-wifi-lora-32-v3 |
heltec-wifi-lora-32-v4 |
heltec-wifi-lora-32-v4-compatible |
Release note shape
Generated release notes and changelog entries are grouped into product-readable sections:
- Features
- Fixes
- Performance
- Documentation
- Refactoring
- Tests
- Build System
- CI
That keeps the GitHub release page readable even when the underlying commits are fully automated.
Release guardrails
The repository now validates two release-adjacent checks before merge:
docfx docs/docfx.jsonruns in CI so documentation link and build regressions fail early.- the CI workflow uploads the rendered
docs/_siteoutput as a review artifact so docs changes can be inspected before merge. semantic-release --dry-run --no-ciruns in CI so release-note generation and semantic version calculation are exercised before the release workflow runs onmain.
Local equivalents:
npm run docs:build
npm run release:preview
Release readiness checklist
Minimum bar:
- Hosted-safe test lanes are green.
- The primary board firmware builds cleanly.
- Board-specific asset names are correct.
- Docs match the current feature surface and known limits.
Recommended bar when runtime behavior changed:
- Refresh the parity matrix.
- Refresh the benchmark and firmware-size reports.
- Confirm operator docs still match the dashboard and snapshot surfaces.
- Note any cross-board or C++ vs Rust compatibility caveats in commit messages so they flow into release notes.
- If shipping Rust artifacts, state whether they were built with
https-ota,ble-scan, both, or neither.
Operator guidance for GitHub releases
- Match the binary suffix to the actual board target.
- Verify the corresponding
.sha256file before distribution. - Do not treat
lonely-esp32-s3-devkitm-1as a generic ESP32-S3 image. - Treat C++ as the full-feature production baseline today.
- Treat the Rust default build as the stable Wi-Fi/MQTT/UDP/hosted-UI baseline, not as a full-feature replacement for C++.
- Do not imply Rust OTA apply or live BLE observation parity unless the shipped Rust artifact was explicitly built and validated with
https-otaand/orble-scan.