matrix-builder / services /api /app /integrations /matrixhub_client.py
ruslanmv
Deploy: metrics + docs (Batch 12)
22b729d
Raw
History Blame Contribute Delete
3.48 kB
from __future__ import annotations
from app.schemas.bundle import MatrixBundle
from app.schemas.publication import PublicationRequest, PublicationResponse
from app.schemas.validation import ValidationReport
from app.utils.ids import stable_id
MATRIXHUB_REQUIRED_ARTIFACTS = [
"README.md",
"MATRIX_BLUEPRINT.yaml",
"MATRIX_STANDARDS.lock",
"docs/standards-report.md",
"artifacts/manifest.json",
"artifacts/checksums.txt",
]
class MatrixHubClient:
def status(self) -> dict[str, str]:
return {"status": "ready", "integration": "matrixhub", "mode": "dry-run-first"}
def publish_bundle(
self,
bundle: MatrixBundle,
validation: ValidationReport,
payload: PublicationRequest | None = None,
) -> PublicationResponse:
request = payload or PublicationRequest(bundle_id=bundle.bundle_id, dry_run=True)
present = {file.path for file in bundle.files}
missing = [path for path in MATRIXHUB_REQUIRED_ARTIFACTS if path not in present]
if validation.status != "approved":
return PublicationResponse(
publication_id=stable_id("pub", f"{bundle.bundle_id}:rejected"),
bundle_id=bundle.bundle_id,
dry_run=request.dry_run,
accepted=False,
status="rejected",
matrixhub_slug=request.slug,
required_artifacts=MATRIXHUB_REQUIRED_ARTIFACTS,
missing_artifacts=missing,
validation_status=str(validation.status),
validation_report_id=validation.report_id,
trust_status="unverified",
message="MatrixHub rejected the bundle because validation is not approved.",
)
if missing:
return PublicationResponse(
publication_id=stable_id("pub", f"{bundle.bundle_id}:missing"),
bundle_id=bundle.bundle_id,
dry_run=request.dry_run,
accepted=False,
status="rejected",
matrixhub_slug=request.slug,
required_artifacts=MATRIXHUB_REQUIRED_ARTIFACTS,
missing_artifacts=missing,
validation_status=str(validation.status),
validation_report_id=validation.report_id,
trust_status="unverified",
message="MatrixHub rejected the bundle because required trust artifacts are missing.",
)
return PublicationResponse(
publication_id=stable_id("pub", f"{bundle.bundle_id}:matrixhub:{request.dry_run}"),
bundle_id=bundle.bundle_id,
dry_run=request.dry_run,
accepted=True,
status="accepted" if request.dry_run else "pending",
matrixhub_slug=request.slug or _slug_from(bundle.title),
required_artifacts=MATRIXHUB_REQUIRED_ARTIFACTS,
missing_artifacts=[],
validation_status=str(validation.status),
validation_report_id=validation.report_id,
trust_status="dry-run" if request.dry_run else "verified",
message=(
"MatrixHub dry-run accepted the controlled bundle."
if request.dry_run
else "MatrixHub publication request accepted for processing."
),
)
def _slug_from(value: str) -> str:
return "-".join(value.lower().replace("/", " ").split())[:80] or "matrix-bundle"