From 286641c1fe7a0afa093de6914d93ec83c4804298 Mon Sep 17 00:00:00 2001 From: Dom <168790843+firestar5683@users.noreply.github.com> Date: Sun, 25 Oct 2026 02:06:43 -0500 Subject: [PATCH] Declare logger metadata test build output --- prebuilt.json | 2 +- tools/ci/lifecycle_build_outputs.json | 4 ++ .../ci/tests/test_lifecycle_build_identity.py | 38 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/prebuilt.json b/prebuilt.json index e0ff3ed164..514b4122e6 100644 --- a/prebuilt.json +++ b/prebuilt.json @@ -1 +1 @@ -{"protected_inventory_sha256": "434ce73a81cd90850d90ab823a722d421bdb4c070e8d32beaaef0d7bf48c2d76", "schema_version": 1} +{"protected_inventory_sha256": "cfaabf7b3685cfb3b93666605271972ef753096ae8c1c787a7ae5a42c627fbe2", "schema_version": 1} diff --git a/tools/ci/lifecycle_build_outputs.json b/tools/ci/lifecycle_build_outputs.json index 4136ba8b5d..7823e997de 100644 --- a/tools/ci/lifecycle_build_outputs.json +++ b/tools/ci/lifecycle_build_outputs.json @@ -167,6 +167,10 @@ "recipe": "openpilot/system/loggerd/SConscript", "required_tracked": true }, + "openpilot/system/loggerd/tests/test_model_metadata": { + "recipe": "openpilot/system/loggerd/SConscript", + "required_tracked": false + }, "openpilot/tools/replay/libmedia_mux.so": { "recipe": "openpilot/tools/replay/SConscript", "required_tracked": true diff --git a/tools/ci/tests/test_lifecycle_build_identity.py b/tools/ci/tests/test_lifecycle_build_identity.py index bd5406c07e..7d45e132de 100644 --- a/tools/ci/tests/test_lifecycle_build_identity.py +++ b/tools/ci/tests/test_lifecycle_build_identity.py @@ -59,6 +59,44 @@ class BuildIdentityTests(unittest.TestCase): path.write_bytes(b'unregistered artifact') self.assertFalse(helper.same_build_inputs(first, helper.build_identity(self.root))) + def test_logger_metadata_test_is_an_exact_optional_build_output(self): + name = 'openpilot/system/loggerd/tests/test_model_metadata' + recipe = 'openpilot/system/loggerd/SConscript' + self.assertEqual(self.inventory.get(name), {'recipe': recipe, 'required_tracked': False}) + output = self.root / name + source = self.root / (name + '.cc') + source.write_text('native test source\n') + subprocess.run([*GIT, 'rm', '--cached', name], cwd=self.root, check=True, capture_output=True) + subprocess.run([*GIT, 'add', str(source.relative_to(self.root))], cwd=self.root, check=True) + subprocess.run([*GIT, '-c', 'user.name=Test', '-c', 'user.email=test@example.com', 'commit', '-qm', 'Untracked native test output'], + cwd=self.root, check=True) + output.chmod(0o755) + built = helper.build_identity(self.root) + self.assertNotIn(name, built['inputs']['untracked']) + self.assertEqual(built['declared_outputs'][name], helper.file_record(output)) + self.assertIn(name + '.cc', built['inputs']['tracked_inputs']) + self.assertIn(recipe, built['inputs']['recipes']) + output.unlink() + checkout = helper.build_identity(self.root) + self.assertIsNone(checkout['declared_outputs'][name]) + self.assertTrue(helper.same_build_inputs(built, checkout)) + output.write_bytes(b'independently rebuilt native test') + rebuilt = helper.build_identity(self.root) + self.assertTrue(helper.same_build_inputs(built, rebuilt)) + self.assertNotEqual(built['declared_outputs'][name]['sha256'], rebuilt['declared_outputs'][name]['sha256']) + self.assertNotEqual(built, rebuilt) # Per-job before/after still fails closed. + for path in (source, self.root / recipe): + original = path.read_bytes() + path.write_bytes(b'changed input') + self.assertFalse(helper.same_build_inputs(built, helper.build_identity(self.root))) + path.write_bytes(original) + output.with_name(output.name + '_other').write_bytes(b'undeclared neighboring output') + self.assertFalse(helper.same_build_inputs(built, helper.build_identity(self.root))) + forged = copy.deepcopy(built) + del forged['declared_outputs'][name] + with self.assertRaises(ValueError): + helper.same_build_inputs(built, forged) + def test_missing_declared_artifact_is_denied(self): (self.root / 'msgq_repo/msgq/ipc_pyx.so').unlink() with self.assertRaises(ValueError):