mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-09-16 15:52:50 +00:00
Publishes a parallel observer firmware channel that cannot cross-contaminate production. Manual dispatch only, so the branch is chosen in the Actions UI rather than hardcoded here. Channel separation (each of these is load-bearing, not cosmetic): - OTA_MANIFEST_BASE_URL -> beta nodes only ever read beta manifests. This is the one that actually keeps devices on-channel. - Separate RELEASE_TAG: the publish step prunes all but KEEP_BUILDS hashes WITHIN its tag, so a shared tag would make each channel delete the other's assets. - Separate build counter: shared counters would interleave and make OTA's "N behind" comparison meaningless. - Separate staticPath via a derived config-beta.json. FIRMWARE_VERSION deliberately matches production: the OTA logic treats a different base version as "always an update", so channels must be separated by manifest URL, not base version. OTA_CHANNEL_TAG marks the embedded version instead (v1.16.0.N-observer-beta-<hash>) so `ver` identifies the channel. config-beta.json is derived per build rather than committed - a checked-in copy would be a 56-entry duplicate of config.json that goes stale as devices are added. Deriving keeps the beta device list identical by construction. Two verify steps fail the build rather than publish firmware that would OTA itself onto production: one checks the beta URL is baked into a binary (and the production URL is not), one checks the generated manifests use the beta host. Production's changelog and docs sync steps are omitted - those rewrite site-wide content the production channel owns. The flasher commit is scoped to the beta manifest dir and counter for the same reason. Also adds OTA_CHANNEL_TAG support to build.sh. Safe for OTA version parsing: ota_parseVersion() reads to the first '-' and ota_extractHash() takes the token after the last, so an extra tag between them changes neither. Verified on a real build: v1.16.0.7-observer-beta-36831271.