Repository navigation
BLE branches cannot build in CI: HCI driver is absent from the pinned zephyr revision #16
Description
Activity
Follow-up on the "#13 has no Build CI run" note — now confirmed, and unexplained.
Querying every run for that commit returns exactly one:
head sha: a49dfc507ef17d88b0a9896c86803f206e115098 runs for sha: 1 34264437693 pre-commit event=push status=completed/successSo no
pull_request-triggered Build CI run was ever created — not queued, not skipped, not cancelled. Closing and reopening the PR did not produce one either.That is not a base-branch rule: #5 is also based on
mainand did get a Build CI run (34253341423, success).Build CItriggers onpushformain/*.xonly, pluspull_requestwith nopathsfilter, so #13 should qualify exactly as #5 did.I have not established why. Candidates not ruled out: an Actions usage/queue limit on the fork silently dropping the run, or something about a branch created by cherry-pick onto
main. Flagging rather than guessing.Practical consequence: #13 is currently unvalidated by CI. It is the most independently mergeable change in this stack (three
.overlayfiles, no Bluetooth, verified on hardware), so it would be good to see it green. A trivial push to the branch should firesynchronizeand create the run; I have not done that to avoid adding noise commits to a review branch.Root cause of the missing Build CI run on #13 — established, and it was neither an Actions limit nor the cherry-pick.
At the time, #13 reported
mergeable=CONFLICTING/mergeStateStatus=DIRTY(checked via the GitHub API). The branch was cut from amainthat still had the flatports/zephyr-cp/boards/rpi_pico*.overlayfiles;mainhad meanwhile moved them toboards/<vendor>/<board>/board.overlay(d0f27bfc97) and edited the very same partition nodes (ffd62e1c59,78b217d250,fdb56f994b). GitHub could not compute therefs/pull/13/mergecommit, and it does not createpull_request-triggered workflow runs for a PR it cannot merge — not queued, not skipped, simply never created. That matches what the run query showed (zero runs for the event), and why close/reopen changed nothing.pre-commitkept appearing because it fires onpush, which needs no merge commit. #5 got its Build CI run becausedebug.confdid not conflict, so its merge ref could be built.Consequence for this issue's body: the "#13 should build clean" note is moot — #13 is closed as redundant (the
ranges;fix is onmain, see #6). The BLE branches have since been rebased ontomain121489fe70; they now inheritmain'swest.ymlpin (adafruit/zephyr @ 52dc937c7crather than62e7a3764), which still predateshci_cyw43_shared_bus.c, so the link failure described above is unchanged and remains blocked on tyeth/zephyr#1.🤖 Generated with Claude Code
The CI path is now verified green for both boards — without merging tyeth/zephyr#1.
ci/pico2w-ble-assetshas been rebased onto the top of the BLE stack (94bfd47b5f, now 0 commits behindmain, was 229). The three stale pre-rebase BLE commits were dropped in favour of the rebased stack, and the single CI-only commit was replayed on top, so the override branch now exercises the currentboards/<vendor>/<board>/board.overlayfiles rather than the deleted flat ones.Pico 2 W Pico W run 34287512362 ✅ 34287514167 ✅ FLASH 1,146,092 B = 73.25% 1,181,368 B = 75.51% RAM 229,144 B = 43.03% 228,044 B = 84.36% artifact raspberrypi_rpi_pico2_w_zephyr-en_US-latest, 8,852,015 Braspberrypi_rpi_pico_w_zephyr-en_US-latest, 8,912,451 BBoth expire 2026-12-07. This is the first CI build of the Pico W BLE firmware at all — previously only the Pico 2 W had an asset. CI matched the local builds to within 4 bytes of flash and exactly on RAM.
The Pico W run also reports
BOOT_FLASH 256 B 100.00%, which is a positive CI check that.boot2is linked — the RP2040 unbootable-image failure mode from #6, now confirmed rather than inferred from a UF2 hexdump.What this changes, and what it does not
The override needs tyeth/zephyr#1 to exist, not to merge: a project declared in
zephyr-config/west.ymloverrides the same-named project imported from Zephyr's own manifest. So CI verification of the driver is fully decoupled from upstream review, and option 2 above stays off the table (#12).Unchanged: #4 and #14 themselves still cannot link, for exactly the reason in the body. Option 1 remains the plan — they stay red, with this issue and the override runs as the evidence they are correct on their own terms.
Corrections to the body
- The pinned revision is no longer
62e7a3764. After the rebase the branches inheritmain's pin,adafruit/zephyr @ 52dc937c7c, which also predateshci_cyw43_shared_bus.c— the cause is unchanged, only the revision named is. - The "Not affected" section is moot: zephyr-cp: restore "ranges" on RP2040 partitions, fixing unbootable images #13 is closed (the
ranges;fix landed upstream asffd62e1c59), and its missing Build CI run was root-caused above to the stale base, not a triggering oddity.
Gotcha for anyone re-running this
gh workflow run build-board-custom.yml --ref ci/pico2w-ble-assetsis not sufficient on a fork.--refonly selects which workflow file runs; the checkout step isgit checkout -b fork-branch "fork/$BRANCH"from thebranchinput, which defaults tomain. Dispatched without it, the job silently buildsmainand produces a plausible-looking artifact with no Bluetooth in it. Always pass both:gh workflow run build-board-custom.yml --ref ci/pico2w-ble-assets \ -f board=raspberrypi_rpi_pico2_w_zephyr -f branch=ci/pico2w-ble-assets🤖 Generated with Claude Code
- The pinned revision is no longer
Binaries from the two runs above, parked on a prerelease so they outlive the artifacts (which expire 2026-12-07) and need no Actions access:
v-zephyr-cp-ble-ci-20260909.Relevant to this issue specifically: these are what the
west.ymloverride produces, i.e. what #4/#14 would build once the manifest names a revision containinghci_cyw43_shared_bus.c. They are not built from #4/#14 as they stand, which still fail to link.Details and caveats in #15 (comment 5593160524) — flashing either board reformats CIRCUITPY.
🤖 Generated with Claude Code
Edit: the release tag was renamed to
v-zephyr-cp-ble-ci-20260909and the links above updated. A tag not starting withvis picked up bypy/version.py(git describe --first-parent --match "[!v]*"), which broke every pristine build and both CI asset builds onci/pico2w-ble-assetswith "Cannot determine version". Thev-prefix makes it invisible to that matcher.
Both board builds fail to link on the BLE branches. Distinct from #11 (which is the
tests / zephyr/ native_sim job) — this isports (zephyr-cp) / board (...).Run 34264719937 on
zephyr-picow-ble, both boards identically:Cause
The devicetree side resolves correctly — CI's own log shows:
So the
zephyr,bt-hcichosen node exists,CONFIG_BTswitches itself on, and Zephyr's BT host links against the HCI device ordinal. But the driver that defines that device does not exist in the Zephyr tree CI checks out:ports/zephyr-cp/zephyr-config/west.ymlon these branches still pinsadafruit/zephyr @ 62e7a3764, which predatesdrivers/bluetooth/hci/hci_cyw43_shared_bus.c. DT node present,DEVICE_DT_INST_DEFINEabsent, hence the undefined ordinal at link time.This is a dependency, not a regression: the affected branches are correct on their own terms and build fine locally against the fork branch that carries the driver.
Blocking relationship
ci/pico2w-ble-assetsis green (34262269542) only because it overrideswest.ymlto the fork branches — see CI-only west.yml override on ci/pico2w-ble-assets must not be merged, and depends on an unreviewed branch #12. That override is deliberately absent from the reviewable PRs.Not affected
#13 (RP2040
rangesboot fix) is offmain, touches only three.overlayfiles, and involves no Bluetooth, so it should build clean. Note it currently has no Build CI run at all, which looks like a separate triggering oddity rather than a failure.Options
CONFIG_BTenablement out of zephyr-cp: enable BLE on the Raspberry Pi Pico 2 W #4/zephyr-cp: enable BLE on the Raspberry Pi Pico W #14 so the rest can be reviewed and merged green ahead of the driver.Tracked under #15.