The Windows PR job configures the whole project, and the FULL pattern in tools/select_tests.py already treats core/CMakeLists.txt, cmake/, 3rdparty/, .gitmodules, tools/select_tests.py and tools/configure_seed.py as build-wide. The gate that decides whether the Windows job runs listed none of them, so a pull request that changed only cmake/WindowsTestExit.cpp, cmake/Opus.cmake, a submodule, or the seed script left the job out and stayed green. Only the post-merge push run exercised it.
The report reads RdnaOpcode.hpp, tools/rdna_isa.txt and tools/nid_names.py as well as tools/progress.py, but its pull request filter listed only core/libs/prx/**, tools/progress.py and the workflow itself. A pull request that changed only one of the other three ran no report, so no progress comment was posted for it. pages-progress.yml already names RdnaOpcode.hpp.
The scanner fixture gains VOP2 forms at 0x100, 0x13F and 0x140 so a shifted
bound changes a known answer. The command-line summary calls the old count
what it is (opcode names declared). The PR progress report compares only
library and legacy fields, so it no longer runs for recompiler-only changes.
The shaders badge counted ISA instruction names that have an RdnaOpcode
enumerator and had reached 100%. Measure what the recompiler does instead:
decoded and translated instruction forms (base, VOP3, DPP) from the opcode
tables and emit switches, and the unsupported throws, using AMD's RDNA 2
instruction forms (MIT, vendored as a derived table). Say on the page that
this is source coverage, not game compatibility.
The Pages progress workflow now also runs when the recompiler changes, and
the Pages workflows fail instead of publishing when the scan cannot read the
recompiler.
demo/web/tests/archive-reserved.test.mjs checks that archive.mjs refuses
reserved Windows device names such as COM1 and LPT3, including the
superscript digit forms. Like the Windows path test, it ran only through
tools/test_web.py on tag pushes. Run it in the web-tests job with the same
zip library.
Checked locally on upstream main: the test exits 0 with the variables the
fetch step publishes.
demo/web/tests/archive-windows.test.mjs checks that archive.mjs refuses
Windows-style paths such as backslashes and drive prefixes. It ran only
in tools/test_web.py, which release.yml calls on tag pushes, so a change
that broke that check passed every pull request and surfaced at the next
release. Run it in the web-tests job next to the root selection test,
with the same zip library.
Checked locally on upstream main: the test exits 0 with the variables the
fetch step publishes.
The archive root test downloaded the zip library in its own step and
passed the URL and path inline. Move the download into one step that
publishes both values through GITHUB_ENV, so the archive tests added in
the following commits can share them.
The root test still runs with the same URL and path, and its exit status
is unchanged. Checked locally by running the step's script with a
simulated GITHUB_ENV and then the root test with the exported values.
Version 1 of the run report format: a JSON Schema, eleven example reports
(one generated in the test), a test that validates each against the schema and
checks that malformed or contradictory reports are rejected, and a workflow
that runs the test with a pinned validator.
Pull requests only link the host-only core/libs test executables and
never run a guest test, so the three guest_pad test aborts in
#12308-#12310 reached review with every check green. The windows pull
request job now builds the libs target and runs the guest tests whose
sources changed, mirroring the host-only selection; changes that
cannot reach core/libs keep the job light with an early no-op.
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.
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.
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]>