From 0dc0813bcd45424a76f64efc2e98977a0b21c58d Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 6 Oct 2026 12:29:40 +0200 Subject: [PATCH] fix: check targeted packs the way --all builds --- scripts/generate_pack.py | 7 +++++-- tests/test_target_verify.py | 39 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/test_target_verify.py diff --git a/scripts/generate_pack.py b/scripts/generate_pack.py index a789f9db..71c56852 100644 --- a/scripts/generate_pack.py +++ b/scripts/generate_pack.py @@ -3413,12 +3413,15 @@ def _target_cores_for( ) -> set[str] | None: """Cores a target leaves available, or None when no target was asked for. - None means no narrowing, which is what an unfiltered pack expects. + None means no narrowing, which is what an unfiltered pack expects. Read + the way --all builds: a platform without a target file was packed + unnarrowed under the target's name, and checking that pack must not + raise where building it did not. """ if not target_name: return None cache, _kept = build_target_cores_cache( - [platform_name], target_name, platforms_dir + [platform_name], target_name, platforms_dir, is_all=True ) return cache.get(platform_name) diff --git a/tests/test_target_verify.py b/tests/test_target_verify.py new file mode 100644 index 00000000..b53080cb --- /dev/null +++ b/tests/test_target_verify.py @@ -0,0 +1,39 @@ +"""A targeted pack is checked under the target reading it was built with. + +`--all --target x86_64` packs a platform that has no target file unnarrowed +under the target's name (Recalbox, Lakka, BizHawk, MiSTer, ROCKNIX). The +conformance check read the same target without the --all tolerance, raised +FileNotFoundError on the first of those packs and stopped the run in a +traceback after every pack had been written. +""" + +from __future__ import annotations + +import sys +import tempfile +import unittest +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(REPO_ROOT / "scripts")) + +from common import build_target_cores_cache +from generate_pack import _target_cores_for + + +class CheckReadsTheTargetLikeTheBuild(unittest.TestCase): + def test_a_platform_without_a_target_file(self): + with tempfile.TemporaryDirectory() as platforms: + built, kept = build_target_cores_cache( + ["recalbox"], "x86_64", platforms, is_all=True + ) + self.assertEqual((built, kept), ({"recalbox": None}, ["recalbox"])) + self.assertIsNone(_target_cores_for("recalbox", "x86_64", platforms)) + + def test_a_platform_with_a_target_file_is_narrowed(self): + cores = _target_cores_for("retroarch", "switch", str(REPO_ROOT / "platforms")) + self.assertTrue(cores) + + +if __name__ == "__main__": + unittest.main()