Resolve backend inventory from checkout
Dependency Audit / dependency-audit (push) Successful in 1m38s
Deployment Installer / deployment-installer (push) Successful in 5s
Security Audit / security-audit (push) Successful in 10m2s

This commit is contained in:
2026-08-03 01:12:41 +02:00
parent 43380eb068
commit b40f1428fd
2 changed files with 44 additions and 1 deletions
@@ -21,6 +21,28 @@ SPEC.loader.exec_module(inventory)
class PlatformInterfaceInventoryTests(unittest.TestCase): class PlatformInterfaceInventoryTests(unittest.TestCase):
def test_workspace_resolution_prefers_populated_checkout_siblings(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
sibling = root / "checkout"
meta = sibling / "govoplan"
configured = root / "configured"
(sibling / "govoplan-core" / "src").mkdir(parents=True)
(configured / "govoplan-core").mkdir(parents=True)
previous = inventory.META_ROOT
inventory.META_ROOT = meta
try:
resolved = inventory._resolve_workspace_root(
{
"default_parent": str(configured),
"repositories": [{"path": "govoplan-core"}],
}
)
finally:
inventory.META_ROOT = previous
self.assertEqual(sibling.resolve(), resolved)
def test_canonical_api_path_normalizes_versions_and_parameters(self) -> None: def test_canonical_api_path_normalizes_versions_and_parameters(self) -> None:
self.assertEqual( self.assertEqual(
inventory.canonical_api_path( inventory.canonical_api_path(
@@ -54,7 +54,7 @@ def main() -> int:
args = parser.parse_args() args = parser.parse_args()
catalog = json.loads((META_ROOT / "repositories.json").read_text(encoding="utf-8")) catalog = json.loads((META_ROOT / "repositories.json").read_text(encoding="utf-8"))
workspace_root = Path(catalog["default_parent"]).resolve() workspace_root = _resolve_workspace_root(catalog)
webui = _extract_webui() webui = _extract_webui()
backend_endpoints = _extract_backend_endpoints(catalog, workspace_root) backend_endpoints = _extract_backend_endpoints(catalog, workspace_root)
manifests = _extract_manifests(catalog, workspace_root) manifests = _extract_manifests(catalog, workspace_root)
@@ -103,6 +103,27 @@ def main() -> int:
return 0 return 0
def _resolve_workspace_root(catalog: dict[str, Any]) -> Path:
sibling_root = META_ROOT.parent.resolve()
configured_root = Path(str(catalog["default_parent"])).expanduser().resolve()
repositories = catalog.get("repositories")
if not isinstance(repositories, list):
raise ValueError("repository catalog has no repositories array")
def source_count(root: Path) -> int:
return sum(
1
for item in repositories
if isinstance(item, dict)
and isinstance(item.get("path"), str)
and (root / item["path"] / "src").is_dir()
)
sibling_count = source_count(sibling_root)
configured_count = source_count(configured_root)
return sibling_root if sibling_count >= configured_count else configured_root
def _extract_webui() -> dict[str, Any]: def _extract_webui() -> dict[str, Any]:
helper = META_ROOT / "tools" / "inventory" / "extract-webui-structure.mjs" helper = META_ROOT / "tools" / "inventory" / "extract-webui-structure.mjs"
completed = subprocess.run( completed = subprocess.run(