From fd03c16eca085423267c163137b28ccb60de8db0 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Wed, 25 Feb 2026 00:45:13 +0100
Subject: [PATCH] feat: multi-compose rebuild (Seafile), cancel endpoint, schedule router, project descriptor
---
app/routers/registry.py | 48 ++++++++++++++++++++++++++----------------------
1 files changed, 26 insertions(+), 22 deletions(-)
diff --git a/app/routers/registry.py b/app/routers/registry.py
index 99e8f20..8643808 100644
--- a/app/routers/registry.py
+++ b/app/routers/registry.py
@@ -1,20 +1,35 @@
-import yaml
-from pathlib import Path
+import sys
from typing import Any
from fastapi import APIRouter, Depends
from app.auth import verify_token
+sys.path.insert(0, "/opt/infrastructure")
+from toolkit.discovery import all_projects # noqa: E402
+
router = APIRouter()
-_REGISTRY_PATH = Path("/opt/infrastructure/servers/hetzner-vps/registry.yaml")
+def _serialize_project(desc: Any) -> dict:
+ """Serialize a ProjectDescriptor to a response dict."""
+ environments = [
+ {
+ "name": e.name,
+ "domain": e.domain,
+ "compose_dir": e.compose_dir,
+ }
+ for e in desc.environments
+ ]
-def _load_registry() -> dict:
- """Load and return the registry YAML."""
- with open(_REGISTRY_PATH) as f:
- return yaml.safe_load(f)
+ return {
+ "environments": environments,
+ "domains": desc.domains,
+ "promote": desc.promote or None,
+ "has_cli": bool(desc.sync.get("type")),
+ "backup": desc.backup or None,
+ "type": desc.type,
+ }
@router.get("/", summary="Get project registry")
@@ -22,19 +37,8 @@
_: str = Depends(verify_token),
) -> dict[str, Any]:
"""Return project list with environments, promote config, and domains."""
- registry = _load_registry()
- projects = {}
-
- for name, cfg in registry.get("projects", {}).items():
- projects[name] = {
- "environments": cfg.get("environments", []),
- "domains": cfg.get("domains", {}),
- "promote": cfg.get("promote"),
- "has_cli": bool(cfg.get("cli")),
- "static": cfg.get("static", False),
- "infrastructure": cfg.get("infrastructure", False),
- "backup_dir": cfg.get("backup_dir"),
- "has_coolify": bool(cfg.get("coolify_uuids")),
- }
-
+ projects = {
+ name: _serialize_project(desc)
+ for name, desc in all_projects().items()
+ }
return {"projects": projects}
--
Gitblit v1.3.1