| Age | Commit message (Collapse) | Author |
|
On 23 Oct 2026 the Ubuntu mirror served package files at 50 to 250 KB/s while still
serving indexes at 12 MB/s. The ThreadX and RISC-V install steps timed out on all three
attempts, inside the 11 MB cmake package and the 58 MB qemu-system-misc package. Every
run downloads the same packages again, and the cmake one was never used: install.sh
installs CMake with pip, and the runner image's own CMake comes first on PATH.
regression_template.yml now restores the .deb files from the Actions cache before the
install step, points apt's archive directory at them through an apt.conf.d entry, and
saves them straight after the install. Every caller's install script gets this
unchanged, and the new apt_cache input turns it off. The key is the runner image and a
hash of the install script, falling back to the closest older cache. apt checks each
cached .deb against the signed index, so a cache cannot change what is installed.
install.sh no longer installs CMake from apt, and install_riscv.sh does so only when no
CMake is on PATH.
Run twice on a fork: the first run saved 19 MB for install.sh and 58 MB for
install_riscv.sh; the second restored both and fetched 0 B of 20.4 MB and 0 B of
61.3 MB of archives. In both runs the cache, install and build steps passed on all four
jobs, which then stopped at Configure GitHub Pages, not enabled on the fork.
Assisted-by: Claude Code (Opus 5.5) <[email protected]>
|
|
The RISC-V job installs qemu-system-misc, ninja-build and cmake under a
two-minute per-attempt budget. With recommends enabled that install fetches 67
packages and 87 MB of archives, 388 MB unpacked, because qemu-system-misc
recommends gstreamer, pulseaudio, v4l and a set of codec libraries. Twenty-six
of the 67 are that media stack, and the job runs qemu-system-riscv64 headless.
On a slow mirror the download does not finish inside the budget, and all three
attempts time out.
The install now passes --no-install-recommends. Raising the budget was the
alternative and is not available: TIMEOUT_LONG is already sized so that three
attempts fit inside the ten-minute install step, as its own comment records.
Observed on the run for #783, where all three attempts timed out while a second
RISC-V run at the same minute succeeded, which is the mirror-speed dependence
this removes.
Assisted-by: Claude Code (Opus 5) <[email protected]>
|
|
shared it between them (#721)
install.sh grew a retry loop, per-command timeouts and a deliberately
non-gating apt-get update after this runner pool cost several whole runs: a
mirror going silent for two hours, and a Hash Sum mismatch from a third-party
repository the project does not even use turning builds red. Those lessons were
local to that one file.
install_riscv.sh had none of them, and #717 puts it on every pull request's
critical path. Under set -e its bare apt-get update was a single point of
failure for the whole suite -- the precise case install.sh downgrades to a
warning on purpose -- and its two wget calls, each fetching about 500 MB, had
no retry and no timeout.
Rather than copy the helpers and let them drift again, they move to
tx_ci_common.sh and both scripts source it, following the arrangement
scripts/tx_windows_common.ps1 already uses on the Windows side. install.sh
keeps its behaviour exactly: same APT_OPTIONS, same 120-second TIMEOUT, same
three-attempt retry, and the comments explaining each of them travel with the
code they explain.
Two things are new:
- TIMEOUT_LONG, 180 seconds, for a single large download. Sized against the
39 seconds each tarball took on 10 Sep 2026 and deliberately not larger:
the install step is capped at ten minutes, and a per-attempt timeout able
to swallow that cap would leave the retry loop no turn to take, which is
the failure mode the apt comment already records.
- fetch(), which verifies a SHA-256 before anything is unpacked. Both digests
were taken from the releases API and then checked against the bytes the CDN
actually serves. This is not an independent trust root -- expected value and
file come from the same host -- but it pins the bytes, so a deleted and
re-pushed tag or a replaced asset stops the build instead of being picked up
silently.
Also verifies qemu-system-riscv32 alongside riscv64. run.sh selects one per
architecture, so both are worth failing on here rather than at the first test.
Verified locally: retry returns 0 on success and 1 after three attempts;
fetch accepts a correct digest and, on a wrong one, fails and removes the
partial file; the source line resolves from the repository root, from an
absolute path and through a symlink; and both recorded digests match the
bytes served for the pinned tag.
Assisted-by: Claude Code (Opus 5) <[email protected]>
|
|
Applied the standard MIT license header to all project-owned C, header,
assembly, shell, and Python files that were missing a copyright notice.
Third-party, toolchain startup, and auto-generated files were excluded.
Co-authored-by: Copilot <[email protected]>
|
|
Added a QEMU virt-machine BSP and CTest infrastructure to run the
ThreadX regression suite on both RISC-V 32-bit and 64-bit targets
in CI.
New components:
- BSP (entry, trap, PLIC, CLINT timer, UART, linker script) targeting
QEMU virt machine for RV32 and RV64
- CMake build system with Ninja, supporting multiple build configs
- CI scripts: install_riscv.sh (toolchain + QEMU), build_tx_riscv.sh,
test_tx_riscv.sh
- GitHub Actions workflow job for RISC-V regression gating
Port fixes:
- RV32 tx_thread_context_restore.S: set MPIE alongside MPP (0x1800 →
0x1880) so mret re-enables interrupts
- RV32/RV64 tx_port.h: add TX_REGRESSION_TEST extension macros needed
by the test harness
- RV32/RV64 example_build scripts: add compile and QEMU launch steps
Regression test portability fixes:
- Block memory tests: increase pool sizes (320 → 340) to accommodate
larger RISC-V block-header alignment
- Byte memory test: replace hardcoded offsets with BYTE_POOL_OVERHEAD
macro for portable pool-size computation
- Event flag timeout test: make counter tolerance unconditional,
removing linux-only guard
Signed-off-by: Akif Ejaz <[email protected]>
|