Add beta/nightly firmware OTA channel - #48
Merged
TheAngryRaven merged 1 commit intoJun 8, 2026
Merged
Conversation
Every push to the BETA branch builds both XIAO nRF52840 variants and publishes them to a latest-only beta/ subtree on gh-pages, alongside the prod channel (keep_files keeps them from clobbering). No GitHub Release is cut - these are debug builds you flash from your phone at the track via DovesDataViewer's beta channel. beta/manifest.json mirrors the prod manifest shape plus channel/commit/ branch markers and beta/ asset URLs. Beta builds self-report their exact commit over BLE: project.h now stringizes an optional -DFIRMWARE_VERSION_OVERRIDE build flag, and the beta workflow stamps <base>-beta.<gitsha>. Normal builds (prod, IDE, compile-sketch CI) are unaffected. Widened the OTA image descriptor's version field 16 -> 32 bytes to hold the longer beta strings.
TheAngryRaven
force-pushed
the
claude/beta-nightly-channel-v8k2qd
branch
from
June 8, 2026 23:05
0ba0a5d to
fca0e34
Compare
TheAngryRaven
changed the base branch from
master
to
claude/ide-variant-autodetect-m3p9qx
June 8, 2026 23:05
Coverage — host-testable units📂 Overall coverage
📄 File coverage
|
TheAngryRaven
merged commit Jun 8, 2026
025be26
into
claude/ide-variant-autodetect-m3p9qx
6 checks passed
TheAngryRaven
added a commit
that referenced
this pull request
Jun 8, 2026
…ster-r7t2wp Land the beta/nightly channel on master (finish #48)
TheAngryRaven
pushed a commit
that referenced
this pull request
Aug 2, 2026
merge) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A second OTA channel for flashing debug builds from your phone at the track, living alongside the existing production channel on
gh-pages.New
betaworkflow (.github/workflows/beta.yml): on every push to theBETAbranch, builds both XIAO nRF52840 variants and publishes them to abeta/subtree ongh-pages. No GitHub Release, no version tag — these are throwaway nightlies.manifest.json,firmware/<version>/…); beta lives underbeta/(beta/manifest.json+ flat assets). The deploy'skeep_files: truemeans the channels never clobber each other.beta/slot with stable filenames, overwritten each push (no per-build history — that was your call).beta/manifest.jsonmirrors the prod manifest shape (samebuilds[model] → {dfuZip, appBin, appCrc32, appSize}) so the web client reuses one parser, pluschannel/commit/branchmarkers andbeta/URLs.Beta builds self-identify over BLE:
project.hnow stringizes an optional-DFIRMWARE_VERSION_OVERRIDE=<token>build flag, and the beta workflow stamps<base>-beta.<gitsha>(e.g.2.2.1-beta.abcdef0). So you can read the version off a device's DIS and know the exact commit on it. Normal builds (prod release, plain IDE,compile-sketchCI) leave the flag undefined → unchanged. The OTA image descriptor'sversionfield was widened 16 → 32 bytes to hold the longer strings.How to turn it on
master.BETAbranch offmaster(it'll carrybeta.yml). Every push/merge toBETAthen publishes a nightly.workflow_dispatch) oncebeta.ymlexists on a branch.The web side (DovesDataViewer) needs a small addition to read
…/beta/manifest.jsonfor its beta channel — that's a separate repo, out of scope here.Verification
-DFIRMWARE_VERSION_OVERRIDEstringizer produces"2.2.1"(prod) and"2.2.1-beta.abcdef0"(beta, 18 chars) with gcc.beta.ymlparses as valid YAML; host unit tests pass (this only touches a build-time#define+ a struct field size, no pure-logic change).Heads-up: build-step duplication
beta.yml's build steps intentionally mirrorrelease.yml's build job. I kept it standalone to avoid touching the working prod pipeline, but that means BSP/library changes must be mirrored in both (noted in a comment at the top ofbeta.yml). Happy to follow up with a reusableworkflow_callbuild to de-dupe if you'd prefer — left out here to keep this low-risk.Note on stacking
Branched off
master(2.2.1). It touches theFIRMWARE_VERSIONblock inproject.h, which open PR #47 also edits (the 2.2.2 bump) — so whichever merges second will have a trivial one-line conflict on that#define(keep the override guard + the higher base version). Flagging so it's not a surprise.https://claude.ai/code/session_01JZbL7ygHQcztBpzz4BiVuU
Generated by Claude Code