mirror of
https://github.com/prompt-security/clawsec.git
synced 2026-06-16 15:01:22 +03:00
19c5113511
* fix(attestation): include runtime libs in release sbom * ci: verify staged skill release import closure * fix(release): include missing skill runtime sbom files * fix(release): require files for import closure --------- Co-authored-by: David Abutbul <David.a@prompt.security>
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
def _load_module():
|
|
module_path = Path(__file__).with_name("verify_skill_release_import_closure.py")
|
|
spec = importlib.util.spec_from_file_location("verify_skill_release_import_closure", module_path)
|
|
if spec is None or spec.loader is None:
|
|
raise RuntimeError(f"Unable to load {module_path}")
|
|
module = importlib.util.module_from_spec(spec)
|
|
sys.modules[spec.name] = module
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
class VerifySkillReleaseImportClosureTests(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls) -> None:
|
|
cls.module = _load_module()
|
|
|
|
def test_empty_directory_does_not_satisfy_relative_import(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
root = Path(tmpdir)
|
|
(root / "runtime-lib").mkdir()
|
|
(root / "main.mjs").write_text("import './runtime-lib';\n", encoding="utf-8")
|
|
|
|
failures = self.module.verify_import_closure(root)
|
|
|
|
self.assertEqual(len(failures), 1)
|
|
self.assertIn("main.mjs imports ./runtime-lib", failures[0])
|
|
|
|
def test_directory_import_requires_index_file(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
root = Path(tmpdir)
|
|
runtime_lib = root / "runtime-lib"
|
|
runtime_lib.mkdir()
|
|
(runtime_lib / "index.mjs").write_text("export {};\n", encoding="utf-8")
|
|
(root / "main.mjs").write_text("import './runtime-lib';\n", encoding="utf-8")
|
|
|
|
failures = self.module.verify_import_closure(root)
|
|
|
|
self.assertEqual(failures, [])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|