A failed inspect or conversion hid the progress panel that held the
conversion log, cleared the selected archives and showed a single line,
so the only evidence of the failure was gone and a multi-GB input had to
be picked again. Compose the message with the phase, the current input,
the target, the libraries tag and the last 150 log lines, and show it in
the error box under "Failure details" so it can be copied into a report.
The report is a pure function in failure-report.mjs and is covered by
node tests.
The workflow and BUILD.md said ASAN_OPTIONS must end with ':' because tests append their own options with string_append. That is wrong: add_asan_test_options appends ':<options>', so ASAN_OPTIONS=detect_leaks=0 already gives detect_leaks=0:detect_stack_use_after_return=0 for the fiber test. Use detect_leaks=0 and remove the claim.
Point the known failures of agc_driver_pm4, agc_driver_graphics, agc_driver_graphics_maps_fallback and guest_convert_keycode at the pull requests that fix them, #10973 and #10968. With the misaligned loads fixed, agc_driver_graphics and agc_driver_graphics_maps_fallback stop on a second report, a TextureDetiler reference bound to a null pointer in Graphics/src/DepthSurface.cpp:730, so their reason names both.
When configuration failed, the test and summary steps still ran on the half-configured build directory, found no tests and reported success, so the failed run looked partly green. Gate the build, test and summary steps on the configure step; the job then fails at configuration alone. The build steps keep continue-on-error, so a target that fails to build still shows up as not-run tests.
The bundled SDL configuration stops without XRandR ('SDL has no XRandR support, so X11 display refresh rates cannot be queried'), as docs/dev/BUILD.md notes, and ubuntu-latest does not ship libxrandr-dev. Found by a run of the workflow on ubuntu-latest.
Add the Sanitizers workflow. Every night at 03:41 UTC, and on workflow_dispatch, it builds the full runtime on ubuntu-latest with -DANYPS5_ENABLE_ASAN=ON and -fsanitize=undefined -fno-sanitize=vptr, building only the F16ToF32Unpack, F64FmaSubnormals and RegistrationPrepareShutdown AGC execution tests like the Windows MSYS2 workflow, and runs every registered test with ASAN_OPTIONS=detect_leaks=0: and UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1. ASAN_OPTIONS ends with ':' because tests append their own options with string_append. The build keeps going after a failing target, so its tests report as not run instead of hiding the rest. tools/sanitizer_report.py then writes the job summary from ctest's JUnit file and fails the job only for failures missing from .github/sanitizer-known-failures.txt. It reuses the submodule, ccache and FFmpeg caching of the Windows MSYS2 workflow, frees preinstalled toolchains the build does not use to make room for the instrumented objects, and uploads ctest.log and ctest.xml.
Add .github/sanitizer-known-failures.txt, one test per line with the sanitizers it fails under and the reason, for the tests that fail in an ASan and UBSan build of main: stack switches that ASan is not told about (fiber, guest_user_context), tests whose setup conflicts with ASan (guest_getrlimit, guest_pthread_stack, guest_backtrace), undefined behavior in third-party code (LibAtrac9, libvorbis), and bugs whose fixes are open pull requests (#9548, #9710, #9711, #10829, #10921) or still to be sent. Each reason quotes what the sanitizer or the test reports on a local run.
Forks inherit three jobs that cannot succeed there. Pages progress fails
on `gh api repos/<fork>/pages` (HTTP 404) after every push to main that
touches core/libs/prx, Pages fails at the release download or the
deployment, and the Build linux job waits for the self-hosted
`anyps5` runner, which forks don't have, until GitHub drops it. These
jobs now run only when the repository is not a fork.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The relinker eligibility list was written on 10-12 and missed inputs added to the relinker-only build since then: the nid sources that relinker_core and two relinker tests compile, the libkernel headers that ParamJsonParser.cpp includes, the pad command file test, the recompiler test targets and cache source tests, and the PR template and pr-overlap.yml that tools tests read. A pull request that changed only these got no automatic build, and a push to main skipped the macOS relinker hosts for them.
The recompiler is listed as a directory because shader_cache_runtime_sources copies all of core/shader/recompiler and hashes every file its CMakeLists globs, so an edit to any of them can change that test.
An edit to the relinker-asan job alone also skipped both relinker jobs, because only edits to the relinker job counted.
This reverts commit da6c581a02, reversing changes made to 10a41a0d50.
On D:, the runner does not create 8.3 short names, so guest_named_shm_windows_short_temp and guest_named_shm_windows_long_short_temp skip and check_skips fails the Windows job.
On windows-latest, TEMP is on C:, which writes 256 MiB in 1.9 s against
0.2 s on D:, where RUNNER_TEMP and the workspace live. The ctest step now
points TEMP and TMP at runner.temp. On a probe runner the optional byte-cap
capture test drops from a 6.4 s median to 1.3 s with four copies running,
and the git-heavy tool tests from 26-35 s to 24-26 s.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
CMake stores a check_type_size result as two cache entries: HAVE_<VAR>, documented as Result of TRY_COMPILE, and <VAR>, documented as CHECK_TYPE_SIZE. The exporter only recognized the first, so a seeded configure restored HAVE_<VAR>=TRUE, skipped the probe and had no size. Seed the size entry too, and hash tools/configure_seed.py into the seed cache key so a seed written by the old exporter is not restored.
The workflow checked out pull_request.base.sha, the base recorded when the
pull request was opened, and ran that revision's check_conventions.py. A rule
merged after a pull request was opened never ran on it: #7005 added
APS5_NO_WGI without an ENVIRONMENT.md row and passed with the checker of
07e741481, which had no env-reference rule.
Check out the current tip of the base branch and pass it as --base; the
checker already diffs from the merge base, so only the pull request's own
changes are checked. A name documented on the base branch after the branch
point now counts as documented unless the pull request removes its row.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This reverts the merge of #6932 (fce1fefe3b). Its "Install Xvfb" step fails on the self-hosted Linux runner, which has no xvfb-run and no passwordless sudo, so every Linux build stops before configuring.