Skip to content

ci: publish .uf2 test builds (RP2350) alongside .hex in PR releases - #11858

Closed
sensei-hacker wants to merge 293 commits into
iNavFlight:release/9.1from
sensei-hacker:ci/uf2-pr-test-build-assets-9x
Closed

ci: publish .uf2 test builds (RP2350) alongside .hex in PR releases#11858
sensei-hacker wants to merge 293 commits into
iNavFlight:release/9.1from
sensei-hacker:ci/uf2-pr-test-build-assets-9x

Conversation

@sensei-hacker

Copy link
Copy Markdown
Member

Summary

Backport of #11856 (already merged to maintenance-10.x) to maintenance-9.x.

The PR Test Builds workflow is triggered by workflow_run, which executes from the default branch (master). Since master is fed from maintenance-9.x, this change must land on 9.x (and then ride 9.x → master) before PR test-build releases can attach .uf2 images.

RP2350_PICO targets (see #11854) generate a .uf2 for BOOTSEL drag-and-drop flashing in addition to the .hex that pr-test-builds publishes.

Changes

.github/workflows/ci.yml

  • Upload ./build/*.uf2 alongside ./build/*.hex in the firmware matrix and single-target jobs (multiline path; upload-artifact@v4 unions the globs and defaults if-no-files-found: warn, so jobs without a .uf2 are unaffected).

.github/workflows/pr-test-builds.yml

  • Attach hexes/*.uf2 to the PR test-build release when present, guarded so PRs without a .uf2 don't pass a literal unmatched glob to gh release create.
  • Mention .uf2 in the release notes.

The .uf2 is produced by RP2350 targets via the in-tree elf2uf2.py (python3, always on runners) — no picotool / apt dependency (picotool isn't packaged in Ubuntu 24.04).

Notes

  • Byte-identical to the maintenance-10.x version of the change for pr-test-builds.yml; ci.yml carries only the .uf2 upload-glob hunks (9.x lacks the size-report steps that 10.x has).
  • Safe on branches without a .uf2-producing target: upload glob matches nothing (warn-only), release asset list stays .hex-only.

daijoubu and others added 30 commits February 5, 2026 06:39
… the MATEKF765SE. Allocate memory for the bxCan write and read messages.
…dle to the CAN instance to avoid a dangling pointer.
…fer and the task reads from the ring buffer.

Fix missing include for math.h
Expand dronecan_messages_unittest.cc from 5 to 14 tests covering
NodeStatus, Fix v1, Auxiliary, boundary values, and data type
verification. Create canard_unittest.cc with 30 tests for the
libcanard core: init/node ID, memory pool, CRC-16/CCITT, float16
conversion, transfer ID logic, DLC conversion, single/multi-frame
TX, RX frame processing, and pool statistics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The BatteryInfo message already contains current data which was being
stored in dronecanBattSensorGetAmperage(), but this wasn't integrated
with INAV's battery metering system.

Changes:
- Add CURRENT_SENSOR_CAN enum value in battery_config_structs.h
- Add case handler in battery.c to read current from DroneCAN
- Update settings.yaml to expose CAN option for current_meter_type

Users can now select 'CAN' as the current_meter_type in CLI when using
DroneCAN-compatible battery sensors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
daijoubu and others added 23 commits May 29, 2026 20:23
PLL1 VCI input is HSE/M = 2 MHz on all H7 targets, which falls in the
2-4 MHz range (VCIRANGE_1). The previous VCIRANGE_2 (4-8 MHz) was
incorrect and affected PLL charge pump calibration.

Fixes iNavFlight#11602
Remove redundant prose that duplicated the assert, remove board-specific
name from shared init code, and shorten the assert slug to match
codebase conventions.
…mic-m-divider

fix: make PLL2M dynamic to keep VCO=800MHz for any HSE frequency (closes iNavFlight#11594)
Fix: Prioritize Airspeed over GPS for turn acceleration compensation
…2688-devhw

Fix ICM42688 bus device hardware type on GEPRC targets
…x_fixed_value

VTOL.md: Rename smix max fixed value
* Add new target: AEDROXH7 (Airbot Systems AEDROX H7)

STM32H743 flight controller with ICM42688P gyro, W25N01G NAND flash,
DPS310 baro, MAX7456 analog OSD, HD OSD via MSP DisplayPort, and
8 motor outputs split across TIM1 and TIM8.

SPI3 MOSI on PB2 requires explicit GPIO_AF7_SPI3 override.
Magnetometer enabled on I2C1 (hardware present, not in BF config).

* AEDROXH7: replace UART4 with DroneCAN on PD0/PD1

PD0/PD1 connect to the CAN transceiver (CANL/CANH pads visible on
board), not to a user-accessible UART4 header. Replace UART4 with
USE_DRONECAN defines. CAN standby pin TBD pending INAV syntax
confirmation.

* AEDROXH7: add CAN1_STANDBY PD3 (not yet tested)

* CI: re-trigger build to pick up fc_msp.c sign-compare fix in maintenance-9.x
…nance-10.x

Removes the DroneCAN DSDLC library (lib/main/Dronecan -- entirely new in 10.x)
and reverts STM32F4/F7/H7 HAL libraries to their maintenance-9.x versions.
932 files. No post-merge commits touched lib/ -- this is a clean mechanical revert.
Reverts 319 STM32CubeF7 SDK extraction files introduced by the accidental
maintenance-10.x merge. No post-merge commits touched this directory --
this is a clean mechanical revert.
This reverts commit 10343b4, reversing
changes made to bb61218.
…-merge

Revert accidental merge of maintenance-10.x into maintenance-9.x
Removed redundant phrases and clarified manufacturer information.
…e-ordering-stdperiph

drivers: fix DMA request disable ordering in timer IRQ handlers and stop functions
Add support for XTX XT25F128F nor flash chip
…WINGMINI

Add FlyingRC F4Wing Mini target updates
Backport of iNavFlight#11856 to maintenance-9.x: the pr-test-builds workflow runs from
master (workflow_run default-branch behavior), and master is fed from
maintenance-9.x, so this needs to land on 9.x to take effect for PR builds.

- ci.yml: upload ./build/*.uf2 alongside *.hex in the firmware matrix and
  single-target jobs (upload-artifact unions the globs and defaults
  if-no-files-found: warn, so jobs without a .uf2 are unaffected).
- pr-test-builds.yml: attach hexes/*.uf2 to the PR test-build release when
  present (guarded so PRs with no .uf2 don't pass a literal unmatched glob),
  and mention it in the release notes.

The .uf2 itself is produced by RP2350 targets via the in-tree elf2uf2.py
(python3, always on runners); no picotool dependency.
@qodo-code-review

Copy link
Copy Markdown
Contributor

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Publish RP2350 UF2 Assets in PR Test Releases

✨ Enhancement ⚙️ Configuration changes 🕐 10-20 Minutes

Grey Divider

AI Description

• Upload optional UF2 firmware alongside HEX artifacts from matrix and single-target CI builds.
• Attach available UF2 images to PR test releases without breaking HEX-only builds.
• Explain BOOTSEL-compatible UF2 downloads in release notes.
Diagram

graph TD
  A["Firmware build"] --> B["HEX and UF2"] --> C["Artifact upload"] --> D["PR publisher"] --> E{"UF2 present?"}
  E -- Yes --> F["Release assets"] --> G["Tester download"]
  E -- No --> F
Loading
High-Level Assessment

The current approach is appropriate: it extends the existing artifact pipeline without new dependencies and explicitly guards optional UF2 assets before invoking GitHub CLI. Shell glob options or separate release-upload commands would be less explicit or add unnecessary release operations.

Files changed (2) +15 / -4

Enhancement (1) +9 / -2
pr-test-builds.ymlPublish optional UF2 files in PR test releases +9/-2

Publish optional UF2 files in PR test releases

• Builds an explicit release asset array and appends UF2 files only when present, preventing unmatched globs in HEX-only builds. Release notes now describe RP2350 BOOTSEL-compatible downloads.

.github/workflows/pr-test-builds.yml

Other (1) +6 / -2
ci.ymlUpload UF2 outputs from firmware build jobs +6/-2

Upload UF2 outputs from firmware build jobs

• Adds UF2 output globs to both matrix and single-target artifact uploads. Targets producing only HEX files remain unaffected because missing optional matches are warn-only.

.github/workflows/ci.yml

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can add REVIEW.md to your repo root and Qodo follows it on every PR

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@sensei-hacker
sensei-hacker changed the base branch from maintenance-9.x to release/9.1 September 3, 2026 22:26
@sensei-hacker

Copy link
Copy Markdown
Member Author

Closing — target should be release/9.1 (master is fed from release/9.1, not maintenance-9.x); reopening against release/9.1.

@sensei-hacker
sensei-hacker deleted the ci/uf2-pr-test-build-assets-9x branch September 3, 2026 22:28
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.