Commit Graph
162 Commits
Author SHA1 Message Date
Dean 1a3a1b2e0e Merge pull request #3998 from MrMha/feat/controller-timelines
feat(pad): queue timed controller button sequences
2026-10-21 04:08:30 +13:00
Jota 34d3199601 fix(tools): fail when a test_*.py script is never run
check_test_registration.py only audits built test executables, so a Python test that no add_test or workflow names is silently skipped. Add a --scripts mode that lists the tracked test_*.py scripts and fails for any not run by an add_test of a CMakeLists or a python step of a workflow, and register it as a ctest so the relinker builds run it.
2026-10-20 12:39:44 +02:00
Cankiee 609017e51d test(tools): register git error regression tests with ctest 2026-10-20 11:52:58 +02:00
maximaxi01 d96a010710 test(tools): keep configure seed BOM checks registered 2026-10-20 02:00:46 -04:00
maximaxi01 9c919b3aac test(tools): split configure seed test groups 2026-10-20 01:59:10 -04:00
Dean 1ed63f63c2 Merge pull request #8151 from xXPBSXx/fix/pr-overlap-report-git-errors
fix(tools): name the failing command when pr_overlap cannot run git or gh
2026-10-20 18:34:21 +13:00
Dean df6122881d Merge pull request #8067 from harry-z-kang/codex/relinker-static-mingw-tests
fix(build): allow static MinGW runtimes in relinker-only tests
2026-10-20 18:34:06 +13:00
Dean 964093ef36 Merge pull request #5710 from AMRYB/fix/web-release-pairing
fix(web): publish converter and libraries from one release
2026-10-20 17:47:07 +13:00
xXPBSXxandClaude Sonnet 5.5 89b04548c8 fix(tools): name the failing command when pr_overlap cannot run git or gh
pr_overlap.py let a failed git or gh call escape as a bare
CalledProcessError traceback that names the command but drops the
error text, so a mistyped --base such as upstream/main (refs/heads/upstream/main
does not exist) read as an unexplained crash. The script now exits with
"pr_overlap: <command> failed with exit code N: <stderr>".

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-20 02:30:31 +02:00
Kang, Harry Zixuan 995c10ec6b fix(build): allow static MinGW runtimes in relinker-only tests 2026-10-19 16:50:10 -07:00
Adrià 388a6b4618 Merge pull request #7316 from rmarkegard/fix/build-cxx-compiler-links-stdlib
fix(build): reject a C++ compiler that cannot link the standard library
2026-10-19 20:42:15 +02:00
Adrià Franch 628205980c fix(build): run the C++ standard library probe with an executable try-compile 2026-10-19 15:32:48 +02:00
rmarkegardandClaude Opus 5.5 f498469889 fix(build): reject a C++ compiler that cannot link the standard library
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 15:32:07 +02:00
UAQ Taxi 379dca5cac test: raise the slow-host timeouts 2026-10-19 14:49:36 +02:00
Adrià c74aeb2f4c Merge pull request #6757 from LeandroLP23/ci/conventions-debt-entry-length
feat(tools): warn when a pull request adds a technical debt entry over 1000 characters
2026-10-19 12:17:54 +02:00
MrMha c72ccac3e6 feat(pad): queue timed controller button sequences 2026-10-19 07:58:16 +04:00
fdfawef324andCodex f3f453ec9d fix(recompiler): key shader caches on compiled sources
Co-Authored-By: Codex <[email protected]>
2026-10-19 04:27:37 +02:00
Dean 60fb8078c7 Merge pull request #6067 from meh7an/perf/libs-mimalloc-windows
feat(libs): let relinked Windows games opt into mimalloc
2026-10-19 13:09:36 +13:00
LeandroLP23andClaude Opus 5.5 fb1ad2fcf4 feat(tools): warn when a pull request adds a technical debt entry over 1000 characters
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:48:11 +02:00
Adrià 88defdafa1 Merge pull request #6268 from DavidFB-creator/fix/conventions-unknown-nid-collisions
feat(tools): flag Unknown exports whose NID is already a symbol in the tree
2026-10-18 23:27:04 +02:00
Mehran 9824c46fe0 feat(libs): let relinked Windows games opt into mimalloc 2026-10-19 00:08:47 +03:00
Amr Yasser e10616b17b fix(web): publish converter and libraries from one release 2026-10-18 23:26:42 +03:00
Dean a589dc0590 Merge pull request #5976 from fma-rc/ci/pr-labels
ci: label pull requests that unblock a title or change performance
2026-10-19 07:57:27 +13:00
David Fontanet BujaldónandClaude Opus 5.5 c494367836 Merge boykopovar/AnyPS5 main into fix/conventions-unknown-nid-collisions
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:17:36 +02:00
011010 99e295a7ba test(tools): register and extend the environment rule tests 2026-10-18 04:16:05 -06:00
husari.orozco abec10fe2d fix(tools): catch the EnvInt and GetEnvironmentVariableA readers and take the review rows 2026-10-18 01:14:35 -06:00
husari.orozco 5a0fbcd9dd feat(tools): list the APS5_* environment names the code reads 2026-10-18 01:14:34 -06:00
Dean bf3b5d679d Merge pull request #4020 from MrMha/perf/linear-shader-use-rewrites
perf(shader): rewrite high-fan-out IR uses in linear time
2026-10-18 13:22:31 +13:00
Adrià Franch a49b8cce69 fix(main): split conventions comment checks into 12 shards
Failing run 39076267931 (push 55f82fee83): windows conventions_function_bodies_shard_4 hit the 30 s CTest timeout (others 15-26 s on the loaded runner). No culprit merge; shard cost sits near the limit since 541a4e705 (6 shards). Doubling the shard count halves each test's runtime.
2026-10-18 01:01:23 +02:00
milescovielloandClaude Opus 5.5 1c9d9d6bc5 fix(build): run the CPU-side tests in an ANYPS5_ENABLE_ASAN build
Under -DANYPS5_ENABLE_ASAN=ON with ASAN_OPTIONS=detect_leaks=0, 14 of
the 849 tests outside the AGC driver, shader and VideoOut suites failed
on main for reasons that come from the ASan build itself, not from the
code they test:

- libc copies the main executable's file-backed writable pages before
  remapping them anonymously. In an instrumented test executable those
  pages hold ASan's redzones around globals, so the memcpy reported a
  global-buffer-overflow at load (patched_libraries,
  guest_memory_lifetime). The ASan build copies the pages word by word
  without instrumentation.
- Five tests check that a local variable is on the thread's stack.
  With detect_stack_use_after_return, which is on by default on Linux,
  instrumented locals live on ASan's fake stack. These tests now run
  with it off. guest_kernel_is_stack also bounded the worker stack by
  the application area without the ASan build's arena offset.
- The relinker module tests and loadexec_arguments load instrumented
  libraries into a Python process or a relinked guest, so the ASan
  runtime is not first in the initial library list. They now run with
  verify_asan_link_order=0. Preloading libasan instead put its
  __cxa_throw interceptor ahead of libc.prx's and broke the unwind of
  an exception that LoadExec throws and catches.
- guest_allocator_failures limits RLIMIT_DATA to 128 MiB and then
  commits 300 GiB. ASan maps 37.5 GiB of shadow for that commit, which
  the limit refuses, and aborts. The ASan build skips that section.
- fiber checks the address of a local against the fiber's context too,
  so it runs without fake stacks as well. Its CheckActiveContext then
  reads the fiber stack word by word above that local, through the
  redzones of the frames on that stack, and is no longer instrumented.
- agc_multisample_guest_access passed aligned_alloc a size that is not
  a multiple of the alignment, which C11 does not allow and ASan
  rejects. It now rounds the size up.

add_asan_test_options appends to ASAN_OPTIONS for one test in an ASan
build and does nothing otherwise.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 13:55:21 +00:00
fma-rc 67f13f61c9 ci: label pull requests that unblock a title or change performance 2026-10-17 10:18:05 +02:00
Dean Galvin ea33174d7d fix(tests): end Windows test processes through libc before DLL detach
On Windows a test that returns from main ends through exit and ExitProcess,
which kills every other thread before the prx static destructors run at
DLL_PROCESS_DETACH. Detached host threads (the driver's async log thread,
libkernel's file watch thread, ...) die holding winpthreads and queue locks,
and a destructor that then locks a mutex, waits for the dead logger or
destroys a condition variable never returns: the test prints its last line
and hangs until the CTest timeout (#6791).

Every test executable now wraps main on MinGW. After main returns the
wrapper runs the executable's own exit handlers and static destructors
(_cexit), as exit does today, flushes the streams and ends the process with
LibcTerminate_nid_no_patch, the path the guest exit already takes. That
flushes the driver log while its thread is alive and calls TerminateProcess,
so no DLL_PROCESS_DETACH work runs after the threads are gone. The libc
shutdown callbacks are not run, as on a plain return from main on Linux. A
test that does not load libc.prx returns as before.
2026-10-17 14:45:48 +13:00
Adrià 9158f031ca Merge pull request #5835 from AlexOfTheForest/feat/app0-zarchive
feat: read title files from a read-only app0.zar (ZArchive) layer
2026-10-16 21:23:25 +02:00
Adrià f474fb7768 Merge pull request #6900 from adriadam10/ci/select-tests
ci: build and run only the tests a change reaches on request
2026-10-16 21:06:09 +02:00
Alexej Szpevák aa8c2f65e2 build: add zstd and ZArchive submodules
Build zstd v1.5.7 and ZArchive from source as static, position-independent libraries that are not part of the default target set. Their symbols stay out of the dynamic export table of the library that links them.
2026-10-16 20:03:26 +02:00
Adrià FranchandClaude 262de6ab19 ci: cache the submodules, FFmpeg and configure checks of the Windows job
Co-Authored-By: Claude <[email protected]>
2026-10-16 19:23:16 +02:00
Adrià FranchandClaude 13f6191b75 ci: build and run only the tests a change reaches on request
A new select input of the Build workflow limits the Linux and Windows jobs
to the test executables and tests whose build inputs the merged pull
requests change. Push builds of main always build and run everything and
save the test graph of their tree; dispatched runs with select restore the
latest graph and fall back to a full run without one.

tools/select_tests.py dump walks the ninja graph of every test executable
(order-only dependencies included, so prx libraries loaded at run time are
in it) plus the header dependencies of its objects, the CMake files that
register each test, the source files its command line names, and its
fixtures. select picks the tests whose closure, registration or arguments
contain a changed file, and every test that is not a native executable of
the tree; files no build reads select the tests under their directory;
changes to the root build, cmake/, 3rdparty/, the workflow or the tool run
everything. Tests added since the graph was written always run. ctest gets
the selection as -I indices through the tool, which keeps the cmd shell on
Windows and stays under its command line limit.

Co-Authored-By: Claude <[email protected]>
2026-10-16 19:10:16 +02:00
Adrià 646c6a2485 Merge pull request #5678 from MarcZX100/codex/split-conventions-tests-5672
test(tools): shard conventions comment checks under CTest timeout
2026-10-15 14:56:52 +02:00
Adrià 16af28e90a Merge pull request #5585 from nikowolf123/ci/build-relinker-gate-merged-prs
ci(build): accept merged pull requests in the relinker author check
2026-10-15 14:51:31 +02:00
Adrià 71bd2876e5 Merge pull request #5706 from AlexOfTheForest/test/conventions-pr-template
test(tools): cover the pull request template checks
2026-10-15 14:17:08 +02:00
NikoandClaude Opus 5.5 b9c91c89ba ci(build): accept merged pull requests in the relinker author check
The eligibility job enabled the relinker matrix for a pull request only
when repos.listCommits on main with the author's login returned a
commit. That filter misses authors whose commits in main are not
matched to their login. On 2026-10-13 it found no commit for 26 authors
of open pull requests who have 1 to 44 pull requests merged into main,
so their pull requests skip the relinker, against CONTRIBUTING.md ("if
its author already has a commit in main").

When listCommits finds nothing, the job now also searches for the
author's merged pull requests into main, with the query pr-intake.yml
uses. Incomplete search results count as none. A failed search, such as
the search API's own rate limit, skips the relinker with a warning
instead of failing the job. Both requests now run only when the pull
request changes a relinker file, so other pull requests make neither.

test_build_eligibility.py runs the step's script in node with a mocked
github object and skips when node is missing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 13:18:25 +02:00
David Fontanet BujaldónandClaude Opus 5.5 02b376a1d4 feat(tools): flag Unknown exports whose NID is already a symbol in the tree
An APS5_EXPORT whose name says the NID is unknown can carry the NID of a
symbol nid_patcher already produces from core/libs/prx: a _nid_postfix
helper, an APS5_VABI export or an assembly function. The NID is then not
unknown, and the stub can take the place of that symbol. #5608 exported
YNw9Xk5iNWo from libSceVideoOut as a throwing stub; it is the NID of
MouseIsOpen_nid_postfix, which libSceVideoOut imports from libSceMouse,
so presentation failed with "YNw9Xk5iNWo not implemented" (#5738, #6245).

The unknown-nid rule reports an added Unknown export with the NID of a
symbol in core/libs/prx, and an added symbol with the NID of an Unknown
export. Named aliases, such as the libc and libSceAmpr exports that share
NIDs on purpose, are not checked.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 10:29:03 +02:00
Adrià c26982f631 Merge pull request #5392 from Ondra97/codex/fix-web-library-archive-collisions
fix(tools): reject colliding web library archive paths
2026-10-14 21:41:13 +02:00
Adrià 101c23a813 Merge pull request #5378 from MiniRML/fix/conventions-bom-shebang
fix(conventions): accept first-line BOM shebangs
2026-10-14 21:25:39 +02:00
Adrià e7784a03ee Merge pull request #4961 from Dripl1x/codex/shader-cache-utf8
fix(build): preserve UTF-8 shader cache source paths
2026-10-14 19:38:26 +02:00
Adrià 3864da5959 Merge pull request #3909 from GalaxyGamingFR/fix/conventions-doc-link-code-blocks
fix(conventions): ignore code blocks when checking doc links
2026-10-14 19:13:06 +02:00
Adrià 32421519a3 Merge pull request #5857 from Lorkydey/feat/oracle-result-comparison
feat(hw-oracle): compare captured results bit for bit
2026-10-14 16:29:24 +02:00
Alexej Szpevák 18d8ab35a0 test(tools): cover the pull request template checks
Add tests for check_conventions.py's pull request checks: a filled-in
copy of the real template passes, the untouched template reports every
gap, unchecked items are named for any list marker, AI-assisted and
Depends on accept only their documented answers, template comments do
not count as answers, sections need content, and titles must follow
Conventional Commits.
2026-10-14 16:23:21 +02:00
Adrià 6e4669fe19 Merge pull request #5748 from AlexOfTheForest/perf/conventions
perf(tools): read checker file contents through one git cat-file process
2026-10-14 16:15:34 +02:00
lorkydey af66601f41 feat(hw-oracle): compare captured results bit for bit 2026-10-14 15:53:11 +02:00