<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tinyusb.git/.github/workflows/pre-commit.yml, branch hil-report</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/tinyusb.git/atom/.github/workflows/pre-commit.yml?h=hil-report</id>
<link rel='self' href='http://cgit.235523.xyz/tinyusb.git/atom/.github/workflows/pre-commit.yml?h=hil-report'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/'/>
<updated>2026-08-18T05:19:09Z</updated>
<entry>
<title>test/hil, ci: contain a wedged USB stack instead of stranding the runner</title>
<updated>2026-08-18T05:19:09Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-08-13T18:08:40Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=3963a1b70a572132aced1c1a0033e1c8249a0c7e'/>
<id>urn:sha1:3963a1b70a572132aced1c1a0033e1c8249a0c7e</id>
<content type='text'>
A wedged USB device used to take the whole HIL run with it. Every worker that
touched the poisoned node blocked uninterruptibly, the pool could not be joined,
map_async discarded every board's result, and the job ran to the GitHub ceiling
with no report at all -- while the self-hosted runner's single job slot stayed
occupied and every queued job waited behind it.

Bound the calls a worker makes itself. read_sysfs, bounded_open and run_cmd all
answer within a wall clock; read_sysfs distinguishes "absent" from "unknown",
because a blocked read is not evidence of absence, and caps stranded readers at
four (each costs a thread and an fd for the life of the process) after which the
worker declares itself blind. mtype, the gio unmount, the libmtp session and the
arecord/iperf reaps go through those bounds; the MTP session runs in a disposable
subprocess, since libmtp's ctypes calls block unkillably in D state.

Bound the run. A pool guard (HIL_POOL_TIMEOUT, 60 min) fires before any job
ceiling and still writes a report. When the pool will not shut down, the sweep
kills what the workers spawned -- descendants, not just direct children, since
flashers run in their own session -- confirms each kill actually landed, and
exits early so the runner is freed. Whatever survived is named in the report.

Deliberately shallow past that point. We do not re-scan process groups, prove
pid ownership, or escalate through sudo: a root-owned survivor is reported, not
force-killed, because signalling a pid we cannot prove is ours is the worse
failure, and the job ceiling backstops whatever this misses. A D-state holder
was never killable anyway.

Recover instead of reporting a wedge. A HUNG usbtest case reflashes its own DUT
through its roster flasher, but only where the flasher can reach its probe past
a poisoned node -- openocd pinned to a validated vid_pid, or esptool. Where it
cannot, the run says so rather than reserving budget for a path that cannot fire.

Raise the CI ceilings above the pool guard so the guard fires first and still
writes its report, and pin --retry 1 on every HIL leg: the guard is a flat
constant and does not scale with max_retry, so argparse's default of 3 would
triple the serialized usbtest tail against an unchanged guard.

Split the module: execution in hil_test/hil_flash/usbtest, infrastructure in
helper/ (locking, health, selection, shared bounded IO), and the two matrix
generators into .github/scripts/ -- ci_set_matrix.py sat in workflows/, where
GitHub treats every file as a workflow definition. 193 tests cover the bounded
paths, the kill ladder, the guard and the selector against synthetic /proc trees
and PATH-injected fakes; a real wedge cannot be manufactured on demand.
</content>
</entry>
<entry>
<title>ci: pin ceedling to 1.0.1</title>
<updated>2026-07-17T05:34:35Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-17T05:34:35Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=9a32c0a5073aff649b1b3e7fa07a89e495b3b40a'/>
<id>urn:sha1:9a32c0a5073aff649b1b3e7fa07a89e495b3b40a</id>
<content type='text'>
ceedling 1.1.0 (released 2026-07-17) fails this project's mock
preprocessing ('Failed to read _build/test/preprocess/.../raw/*.h for
comment stripping'); reproduced locally with an isolated 1.1.0 install
while 1.0.1 passes all 61 tests on the same tree. Unpin once fixed
upstream.
</content>
</entry>
<entry>
<title>upload metrics.json and metrics compare to release page (#3409)</title>
<updated>2025-12-13T08:13:02Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2025-12-13T08:13:02Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=20b03bbc081353295f7a491038bd3efbc9c3a75a'/>
<id>urn:sha1:20b03bbc081353295f7a491038bd3efbc9c3a75a</id>
<content type='text'>
* upload metrics.json and metrics compare to release page
* Adjust workflow comment handling for forks</content>
</entry>
<entry>
<title>install libc++ for clang build fuzzer</title>
<updated>2024-12-16T17:35:05Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-12-16T17:32:58Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=73ec14d926ea9418a4ed467e61a25782c3011752'/>
<id>urn:sha1:73ec14d926ea9418a4ed467e61a25782c3011752</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix warning due to bsp_rom_registers.c</title>
<updated>2024-12-16T16:48:44Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-12-16T16:48:44Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7e207e4f4a098fddb13efc329e57e6095aa13873'/>
<id>urn:sha1:7e207e4f4a098fddb13efc329e57e6095aa13873</id>
<content type='text'>
</content>
</entry>
<entry>
<title>change the tusb_rhport_init_t struct, exclude the rhport to make API more consistent</title>
<updated>2024-10-14T11:27:52Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-10-14T11:27:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=1f18be93db39dbc57bbf34f982dbe07e209a2ae3'/>
<id>urn:sha1:1f18be93db39dbc57bbf34f982dbe07e209a2ae3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Ci tweak3 (#2643)</title>
<updated>2024-05-13T13:27:49Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-05-13T13:27:49Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7cf1bdd2848d6c36e9659acaf77c83a1fa99d04f'/>
<id>urn:sha1:7cf1bdd2848d6c36e9659acaf77c83a1fa99d04f</id>
<content type='text'>
- enable --one-per-family to build 1 board per family, also skip family if board specified in -b also present
- minimize ci run for push event
  - only build one board per family
  - skip hil test on both pi4 and hfp
- full build will be runn for PR event
- IAR always build 1 board per family regardless of event 
- update build.py to optimize make
- remove all setup python since we don't really need it</content>
</entry>
<entry>
<title>More ci tweak (#2636)</title>
<updated>2024-05-10T11:55:43Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-05-10T11:55:43Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=3e2ea7750681b27238043c7158ff5508f01914a3'/>
<id>urn:sha1:3e2ea7750681b27238043c7158ff5508f01914a3</id>
<content type='text'>
* change concurrency group to ${{ github.workflow }}-${{ github.ref }}
* use argparse for build.py hil_test.py, remove the need to install click
* move ci win/mac to build_cmake.yml
* rename build_family.yml to build_util.yml
* build_util.yml support esp32
* integrate build-espressif into build.yml
* build.py support make with --board option
* add get_deps action
* update hil test to reuse action</content>
</entry>
<entry>
<title>Rework ci (#2631)</title>
<updated>2024-05-09T13:43:46Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-05-09T13:43:46Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=ba6babf570752a28379aab51d9c27e7b9efe872d'/>
<id>urn:sha1:ba6babf570752a28379aab51d9c27e7b9efe872d</id>
<content type='text'>
* add name field to usbd_class_driver_t
* ci: use set matrix py script
* add riscv32 and cmake support for ch32v307, fomu,  gd32vf103
* update build_cmake.py to take --family --board --toolchain
* separate hil test to its own workflow
* move esp32 board into separated hil json
* add make build to ci
* remov build_make.py
* build.py support esp32 board
* setup toolchain support esp-idf
* fix missing click
* merge family in matrix build to reduce jobs
* skip cifuzz since it still has issue with get_deps and click</content>
</entry>
<entry>
<title>bump up to actions/setup-python@v5</title>
<updated>2024-01-25T12:13:11Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2024-01-25T12:13:11Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=14d44171b59fc273adcccc1464da6e6cfb2c1864'/>
<id>urn:sha1:14d44171b59fc273adcccc1464da6e6cfb2c1864</id>
<content type='text'>
</content>
</entry>
</feed>
