Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/build-observer-firmwares-beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ env:

jobs:

verify:
uses: ./.github/workflows/run-unit-tests.yml

preset-parity:
uses: ./.github/workflows/check-mqtt-preset-parity.yml

enumerate:
runs-on: ubuntu-latest
outputs:
Expand Down Expand Up @@ -191,7 +197,7 @@ jobs:
if-no-files-found: error

release:
needs: [enumerate, build]
needs: [enumerate, build, verify, preset-parity]
runs-on: ubuntu-latest
steps:
- name: Clone Repo
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/build-observer-firmwares.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ env:

jobs:

verify:
uses: ./.github/workflows/run-unit-tests.yml

preset-parity:
uses: ./.github/workflows/check-mqtt-preset-parity.yml

# Discover the *_observer_mqtt envs and split them into SHARDS groups so the
# build fans out across runners (pio builds envs sequentially within a job).
enumerate:
Expand Down Expand Up @@ -170,7 +176,7 @@ jobs:
# Collect all shard outputs, publish the rolling release, then point the
# flasher at the new build by bumping the hash + notes in its config.json.
release:
needs: [enumerate, build]
needs: [enumerate, build, verify, preset-parity]
runs-on: ubuntu-latest
steps:
- name: Clone Repo
Expand Down
22 changes: 19 additions & 3 deletions .github/workflows/check-mqtt-preset-parity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ permissions:

on:
workflow_dispatch:
workflow_call:
pull_request:
branches:
- observer-firmware
Expand Down Expand Up @@ -47,6 +48,8 @@ jobs:
EVENT_NAME: ${{ github.event_name }}
PR_BASE: ${{ github.event.pull_request.base.ref }}
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
CANDIDATE_SHA: ${{ github.sha }}
CANDIDATE_BRANCH: ${{ github.ref_name }}
run: |
set -euo pipefail
PRESET_PATH=src/helpers/MQTTPresets.h
Expand All @@ -72,9 +75,22 @@ jobs:
;;
esac
else
# push / workflow_dispatch: compare current channel tips.
git show "origin/observer-firmware:${PRESET_PATH}" > /tmp/preset-parity/prod.h
git show "origin/observer-firmware-dev:${PRESET_PATH}" > /tmp/preset-parity/dev.h
# Pin the channel being verified to this run's candidate. Its
# branch may have advanced while the release waited in the queue.
case "$CANDIDATE_BRANCH" in
observer-firmware)
git show "${CANDIDATE_SHA}:${PRESET_PATH}" > /tmp/preset-parity/prod.h
git show "origin/observer-firmware-dev:${PRESET_PATH}" > /tmp/preset-parity/dev.h
;;
observer-firmware-dev)
git show "origin/observer-firmware:${PRESET_PATH}" > /tmp/preset-parity/prod.h
git show "${CANDIDATE_SHA}:${PRESET_PATH}" > /tmp/preset-parity/dev.h
;;
*)
echo "::error::preset parity requires an observer channel branch" >&2
exit 1
;;
esac
fi

echo "=== production (observer-firmware) head preview ==="
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/pr-build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: PR Build Check

on:
pull_request:
branches: [main, dev]
branches: [main, dev, observer-firmware, observer-firmware-dev]
paths:
- 'src/**'
- 'include/**'
Expand All @@ -14,10 +14,12 @@ on:
- 'scripts/**'
- 'ssl_certs/**'
- 'webui/**'
- 'test/**'
- 'default_8MB.csv'
- 'platformio.ini'
- '.github/actions/setup-build-environment/**'
- '.github/workflows/pr-build-check.yml'
- '.github/workflows/run-unit-tests.yml'
push:
branches: [main, dev]
paths:
Expand Down Expand Up @@ -49,6 +51,8 @@ jobs:
- Heltec_v3_room_server
# MQTT observer smoke builds: internal RAM and PSRAM coverage.
- Heltec_v3_repeater_observer_mqtt
- Heltec_v3_room_server_observer_mqtt
- ThinkNode_M7_repeater_observer_mqtt
- T_Beam_S3_Supreme_SX1262_repeater_observer_mqtt
# nRF52
- RAK_4631_companion_radio_ble
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/run-unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- master
pull_request:
workflow_dispatch:
workflow_call:

jobs:
test:
Expand All @@ -24,13 +25,22 @@ jobs:
python3 -B scripts/check_arduinojson_pin.py --self-test
python3 -B scripts/check_arduinojson_pin.py

- name: Verify observer tooling
run: |
python3 -m pip install PyYAML==6.0.2
python3 -B scripts/check_mqtt_preset_parity.py --self-test
python3 -B scripts/check_observer_ci.py

- name: Run Unit Tests
run: pio test -e native -e native_kiss_modem -vv
run: pio test -e native -e native_kiss_modem -e native_sanitized -vv

- name: Upload Test Results
# Upload test results even if the test step failed.
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: .pio/build/native/
path: |
.pio/build/native/
.pio/build/native_kiss_modem/
.pio/build/native_sanitized/
3 changes: 2 additions & 1 deletion MQTT_IMPLEMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,8 @@ These settings apply across all MQTT slots:
- `get mqtt.neighbors` - Get periodic neighbors publishing setting (on/off; neighbors-enabled builds)
- `get mqtt.neighbors.interval` - Get neighbors publish interval in hours (neighbors-enabled builds)
- `get mqtt.ntp` - Get effective NTP server hostname
- `get mqtt.ntp.diag` - Probe every configured NTP server for connectivity (does not change the clock; serial console shows each server's reported time, or why a probe was rejected — `DNS failed`, `unsolicited reply`, `server unsynced`, ... — and LoRa shows a compact `<server> ok|fail` list)
- `get mqtt.runtime` - Read worker sample age, configuration revisions, and SDK event overflow count.
- `get mqtt.ntp.diag` - Queue a probe and return immediately; repeat for its ID/age/result (cached for 30 seconds). Probe every configured NTP server for connectivity (does not change the clock; serial console shows each server's reported time, or why a probe was rejected — `DNS failed`, `unsolicited reply`, `server unsynced`, ... — and LoRa shows a compact `<server> ok|fail` list)
- `get mqtt.owner` - Get owner public key (serial console only)
- `get mqtt.email` - Get owner email address (serial console only)

Expand Down
Loading
Loading