Firmware v2.9.0
bmcd 2.15.1, tpi 1.2.0, BMC-UI 3.9.0.
Firmware v2.9.0, 9 September 2026. Every item below is the repository's own changelog entry, taken apart; the whole entry is a click away under each one.
New¶
Contract tests for the promotion gate¶
(tests/gate.sh). The gate decides whether a freshly booted image is kept or rejected, and nothing checked it: a change that promoted everything would have been found by a flash, or not at all.
The whole entry
The harness sources S99postupdate, points its paths at scratch files, stubs curl, and asserts both the verdict and the reason for twelve cases — four of which must be rejections. It runs under dash and under busybox ash, the board's own shell.
A checks workflow that runs those tests and shellcheck on every push, in¶
under a minute, separately from the two-hour image build
It also mutates the gate twice and requires the suite to catch both: a suite that stays green when a rejection is removed is decorative.
Changed¶
- bmcd 2.15.1,
tpi1.2.0, BMC-UI 3.9.0. Between them this release carries: a firmware catalogue that answers from cache and refreshes behind itself instead of blocking the page for sixteen seconds; park mode, so an uploaded image lands on the SD card and installing stays a separate choice; the hostname and the time servers as settings; configuration export and import before board B; the thermal zone's trip points, so the fan's step has a reason attached; a seven-tab interface reorganised around what a person is doing; and a command line that reaches all of it. -
A release candidate no longer outranks its own release. (SQU-169).
The whole entry
is_newerintpi-selfupdateused GNUsort -Valone, which putsv2.8.1-rc1afterv2.8.1— so a board on the finished release was offered its own candidate as an upgrade, and--checkwould have exited 10 for ever. It now compares the numeric part first and only then the suffix, where carrying one loses to carrying none.v2.2.0-unstable-hive.12is likewise work towards v2.2.0 rather than after it. -
tests/version.shcovers that ordering — eighteen cases including the tenth minor release, which a lexical compare gets wrong — and CI mutates the function back to the old behaviour and requires the suite to notice. tpi-selfupdatecan be sourced withTPI_SELFUPDATE_LIB=1to get its functions without running the update. That is what makes the above testable without a network or a board.S99postupdatetakes the path tocurlfromCURL_BINrather than a literal, so the harness can exercise the-xcheck and the argument handling instead of bypassing them.
Every release of the firmware · the roadmap · follow by feed