From b0dbe27b48e54e0d96b6d8911c96ce9af3dc874d Mon Sep 17 00:00:00 2001 From: MarcZX10 <67475268+MarcZX10@users.noreply.github.com> Date: Sat, 31 Oct 2026 22:38:28 +0000 Subject: [PATCH 1/2] fix(ci): fail the relinker test step when no test is registered 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. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 59ce300740bf..f9e1b9ecd4b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -330,7 +330,7 @@ jobs: run: sudo softwareupdate --install-rosetta --agree-to-license - run: cmake -S . -B build-relinker -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=${{ matrix.compiler }} -DANYPS5_RELINKER_ONLY=ON -DBUILD_TESTING=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.architectures }} - run: cmake --build build-relinker --parallel 3 - - run: ctest --test-dir build-relinker --output-on-failure --timeout 120 --parallel 4 + - run: ctest --test-dir build-relinker --output-on-failure --timeout 120 --parallel 4 --no-tests=error relinker-asan: needs: eligibility From be8ea1e172e145a749f6d63a0dd3935d8f7c8059 Mon Sep 17 00:00:00 2001 From: MarcZX10 <67475268+MarcZX10@users.noreply.github.com> Date: Sat, 31 Oct 2026 22:38:28 +0000 Subject: [PATCH 2/2] test(ci): require the relinker test step to fail on zero tests The test reads the relinker ctest line of build.yml and checks that it passes --no-tests=error. Against the previous line it fails. --- CMakeLists.txt | 2 ++ tools/tests/test_relinker_test_step.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 tools/tests/test_relinker_test_step.py diff --git a/CMakeLists.txt b/CMakeLists.txt index b65c331ce12c..a11fd4fc66fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -299,6 +299,8 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_sanitizer_report.py) add_test(NAME select_tests COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_select_tests.py) + add_test(NAME relinker_test_step COMMAND ${Python3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_relinker_test_step.py) add_test(NAME tools_self_inspect COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/tests/test_inspect_self.py) set_tests_properties(tools_self_inspect PROPERTIES TIMEOUT 20) add_test(NAME check_main_sync COMMAND ${Python3_EXECUTABLE} diff --git a/tools/tests/test_relinker_test_step.py b/tools/tests/test_relinker_test_step.py new file mode 100644 index 000000000000..bbe22f47d143 --- /dev/null +++ b/tools/tests/test_relinker_test_step.py @@ -0,0 +1,16 @@ +import unittest +from pathlib import Path + +WORKFLOW = Path(__file__).resolve().parents[2] / ".github/workflows/build.yml" + + +class RelinkerTestStepTests(unittest.TestCase): + def test_relinker_ctest_fails_when_no_test_is_registered(self): + steps = [line for line in WORKFLOW.read_text(encoding="utf-8").splitlines() + if "ctest --test-dir build-relinker " in line] + self.assertEqual(len(steps), 1) + self.assertIn("--no-tests=error", steps[0]) + + +if __name__ == "__main__": + unittest.main()