The MSYS2 job builds ffmpeg with MSYS2's GCC, which installs the floating package set. Its ffmpeg cache key now has an msys2 segment, so it no longer restores a build made with the winlibs GCC of build.yml. The cache is rebuilt once after this change.
The Windows test job in build.yml and the MSYS2 job in windows-msys2.yml used the same ffmpeg cache key, so each could restore an ffmpeg build made with the other's GCC. The winlibs job's key now carries its archive name, and the next commit gives the MSYS2 job its own prefix.
The Windows job runs its "Report tests slower than 30 s" step on pull
requests, but only the push path wrote ctest.log. On pull requests the
tests run through build_changed_guest_tests.py, whose ctest call had no
--output-log, so the step found no log and exited 0 without a warning.
build_changed_guest_tests.py takes an optional --output-log PATH and
passes it to its single ctest run; the Windows pull request step passes
--output-log ctest.log, as the push path and the Linux job already do.
The macOS x86_64 relinker job ran sudo softwareupdate --install-rosetta unconditionally. On pull request #14315's run (41290340866), that step failed with 'Rosetta 2 update is not available' and exit 1, and every later step was skipped, so the job reported a failure before it built or tested anything. The step now runs the install only when 'arch -x86_64 /usr/bin/true' fails, so an image that already has Rosetta skips it.
ctest runs with --no-tests=ignore unless asked, so a configuration that registers no test passes with 'No tests were found'. The emscripten native and portable builds and the Windows build each register at least one test today, so the flag changes nothing on a healthy configuration; it closes the gap for a future change that drops every registration.
The cleanup step pipes gh pr list into a while loop. The run step had no shell set, so the default on Linux runs bash -e without pipefail, and the step's status was the loop's status. A failed or rate-limited listing ran the loop zero times and the step stayed green, with no stale label removed and nothing reported. shell: bash gives the step pipefail.
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 relinker-only test step runs ctest without --no-tests=error, so a configuration that registers no test passes with 'No tests were found'. The sibling steps for the register-context, write-watch and relinker-asan tests already pass that flag. ctest 3.25.1 exits 0 without it and 8 with it when no test is found.
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.
The push group was build-push-<ref> with cancel-in-progress off. GitHub
keeps one waiting run per group, so each push that arrived while a build
ran replaced the waiting one. Between 2026-10-30 01:04 and 2026-10-31
13:17, 549 pushes to main started and 512 of those commits never got a
completed build, although CONTRIBUTING.md promises a full Linux and
Windows build for every push.
Group pushes by commit, as #13954 does for emscripten-libraries.yml and
input-mapper.yml, so every push runs. Pull requests and manual runs keep their
groups.
Reads every open pull request through paged GraphQL, ignores bot jobs, treats a change request as answered only once the reviewer is asked again, and labels and lists the oldest 30.