Skip to content

Add beta/nightly firmware OTA channel - #48

Merged
TheAngryRaven merged 1 commit into
claude/ide-variant-autodetect-m3p9qxfrom
claude/beta-nightly-channel-v8k2qd
Jun 8, 2026
Merged

Add beta/nightly firmware OTA channel#48
TheAngryRaven merged 1 commit into
claude/ide-variant-autodetect-m3p9qxfrom
claude/beta-nightly-channel-v8k2qd

Conversation

@TheAngryRaven

Copy link
Copy Markdown
Owner

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 beta workflow (.github/workflows/beta.yml): on every push to the BETA branch, builds both XIAO nRF52840 variants and publishes them to a beta/ subtree on gh-pages. No GitHub Release, no version tag — these are throwaway nightlies.

  • Two manifests, two channels: prod stays at the Pages root (manifest.json, firmware/<version>/…); beta lives under beta/ (beta/manifest.json + flat assets). The deploy's keep_files: true means the channels never clobber each other.
  • Latest-only retention: a single flat beta/ slot with stable filenames, overwritten each push (no per-build history — that was your call).
  • beta/manifest.json mirrors the prod manifest shape (same builds[model] → {dfuZip, appBin, appCrc32, appSize}) so the web client reuses one parser, plus channel/commit/branch markers and beta/ URLs.

Beta builds self-identify over BLE: project.h now 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-sketch CI) leave the flag undefined → unchanged. The OTA image descriptor's version field was widened 16 → 32 bytes to hold the longer strings.

How to turn it on

  1. Merge this PR to master.
  2. Create the BETA branch off master (it'll carry beta.yml). Every push/merge to BETA then publishes a nightly.
  3. You can also trigger it manually from the Actions tab (workflow_dispatch) once beta.yml exists on a branch.

The web side (DovesDataViewer) needs a small addition to read …/beta/manifest.json for its beta channel — that's a separate repo, out of scope here.

Verification

  • Confirmed the -DFIRMWARE_VERSION_OVERRIDE stringizer produces "2.2.1" (prod) and "2.2.1-beta.abcdef0" (beta, 18 chars) with gcc.
  • beta.yml parses 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 mirror release.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 of beta.yml). Happy to follow up with a reusable workflow_call build 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 the FIRMWARE_VERSION block in project.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

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
TheAngryRaven force-pushed the claude/beta-nightly-channel-v8k2qd branch from 0ba0a5d to fca0e34 Compare June 8, 2026 23:05
@TheAngryRaven
TheAngryRaven changed the base branch from master to claude/ide-variant-autodetect-m3p9qx June 8, 2026 23:05
@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown

Coverage — host-testable units

📂 Overall coverage

Metric Coverage
Lines 🟢 217/218 (99.5%)
Functions 🟢 20/20 (100.0%)
Branches 🟡 207/240 (86.2%)

📄 File coverage

File Lines Functions Branches
BirdsEye/crc32.cpp 🟢 30/30 (100.0%) 🟢 4/4 (100.0%) 🟢 24/24 (100.0%)
BirdsEye/dovex_header.cpp 🟢 96/97 (99.0%) 🟢 6/6 (100.0%) 🔴 57/88 (64.8%)
BirdsEye/filename_validator.cpp 🟢 14/14 (100.0%) 🟢 1/1 (100.0%) 🟢 30/30 (100.0%)
BirdsEye/gps_time.cpp 🟢 45/45 (100.0%) 🟢 6/6 (100.0%) 🟢 30/32 (93.8%)
BirdsEye/gps_validation.cpp 🟢 24/24 (100.0%) 🟢 2/2 (100.0%) 🟢 66/66 (100.0%)
BirdsEye/haversine.cpp 🟢 8/8 (100.0%) 🟢 1/1 (100.0%) ⚫ 0/0 (0.0%)

@TheAngryRaven
TheAngryRaven merged commit 025be26 into claude/ide-variant-autodetect-m3p9qx Jun 8, 2026
6 checks passed
@TheAngryRaven
TheAngryRaven deleted the claude/beta-nightly-channel-v8k2qd branch June 8, 2026 23:07
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants