Publish curated Unraid-AppOps-Gateway source from ba66029223865607deddc234e283c11127324eb8

This commit is contained in:
Public Source Publisher committed 2026-10-07 01:56:22 +00:00
1 parent 820244dbb3
commit 8dd4b40252
52 files changed
+11814 -288

No files matched your search

@@ -28,6 +28,7 @@ _COMPOSE_CANDIDATES = (
)
# Must remain identical to DeploymentPlanV1.application_id.
_APP_ID = re.compile(r"^[a-z][a-z0-9-]{1,62}$")
_COMPOSE_PROJECT = re.compile(r"^[a-z0-9][a-z0-9_-]{0,62}$")
_TRANSIENT_STATES = {"gitea_unavailable", "controller_unavailable", "registration_error"}
_RETRY_STATES = _TRANSIENT_STATES | {"controller_conflict", "policy_conflict"}
_DEPLOYMENT_ACTIONS = ("deployment.apply", "deployment.rollback", "deployment.runnerless.provision")
@@ -208,6 +209,7 @@ class GiteaProjectAutoRegistration:
"composeFile",
"composeProject",
"healthTimeout",
"primaryService",
"verifyOciRevision",
}
unknown = set(payload) - allowed
@@ -223,14 +225,18 @@ class GiteaProjectAutoRegistration:
raise ValueError("deployment descriptor applicationId is invalid")
compose_file = str(payload.get("composeFile") or "").strip()
compose_project = str(payload.get("composeProject") or application_id).strip().lower()
if compose_project != application_id:
raise ValueError("deployment descriptor composeProject must equal applicationId")
if not _COMPOSE_PROJECT.fullmatch(compose_project):
raise ValueError("deployment descriptor composeProject is invalid")
primary_service = str(payload.get("primaryService") or application_id).strip()
if not _APP_ID.fullmatch(primary_service):
raise ValueError("deployment descriptor primaryService is invalid")
timeout = int(payload.get("healthTimeout") or 180)
return {
"applicationId": application_id,
"composeFile": compose_file,
"composeProject": compose_project,
"healthTimeout": timeout,
"primaryService": primary_service,
"verifyOciRevision": bool(payload.get("verifyOciRevision", False)),
}
@@ -303,8 +309,9 @@ class GiteaProjectAutoRegistration:
if descriptor_present:
application_id = str(descriptor["applicationId"])
if application_id not in service_names:
raise ValueError("deployment descriptor applicationId must name a Compose service")
primary_service = str(descriptor["primaryService"])
if primary_service not in service_names:
raise ValueError("deployment descriptor primaryService must name a Compose service")
else:
repository_id = self._application_id(repository_name)
compose_name = str(compose.get("name") or "").strip().lower() if isinstance(compose, dict) else ""
@@ -321,8 +328,9 @@ class GiteaProjectAutoRegistration:
# explicit bounded descriptor to select its primary service.
return None
application_id = candidates[0]
primary_service = application_id
compose_project = application_id
compose_project = str(descriptor.get("composeProject") or application_id)
containers: list[str] = []
for service_name, raw_service in services.items():
service = raw_service if isinstance(raw_service, dict) else {}
@@ -334,6 +342,7 @@ class GiteaProjectAutoRegistration:
"applicationId": application_id,
"composeFile": compose_file,
"composeProject": compose_project,
"primaryService": primary_service,
"containers": containers,
"serviceNames": service_names,
"healthTimeout": int(descriptor.get("healthTimeout") or 180),
@@ -510,6 +519,7 @@ class GiteaProjectAutoRegistration:
"applicationId": application_id,
"composeFile": contract["composeFile"],
"composeProject": contract["composeProject"],
"primaryService": contract.get("primaryService", application_id),
"containers": list(contract["containers"]),
"serviceNames": list(contract["serviceNames"]),
}