feat(clean-release): complete compliance redesign phases and polish tasks T047-T052
This commit is contained in:
@@ -19,7 +19,8 @@ from datetime import datetime, timezone
|
||||
from uuid import uuid4
|
||||
from typing import List
|
||||
|
||||
from ...models.clean_release import CheckFinalStatus, ComplianceCheckRun, ComplianceReport, ComplianceViolation
|
||||
from .enums import RunStatus, ComplianceDecision
|
||||
from ...models.clean_release import ComplianceRun, ComplianceReport, ComplianceViolation
|
||||
from .repository import CleanReleaseRepository
|
||||
|
||||
|
||||
@@ -27,32 +28,39 @@ class ComplianceReportBuilder:
|
||||
def __init__(self, repository: CleanReleaseRepository):
|
||||
self.repository = repository
|
||||
|
||||
def build_report_payload(self, check_run: ComplianceCheckRun, violations: List[ComplianceViolation]) -> ComplianceReport:
|
||||
if check_run.final_status == CheckFinalStatus.RUNNING:
|
||||
def build_report_payload(self, check_run: ComplianceRun, violations: List[ComplianceViolation]) -> ComplianceReport:
|
||||
if check_run.status == RunStatus.RUNNING:
|
||||
raise ValueError("Cannot build report for non-terminal run")
|
||||
|
||||
violations_count = len(violations)
|
||||
blocking_violations_count = sum(1 for v in violations if v.blocked_release)
|
||||
blocking_violations_count = sum(
|
||||
1
|
||||
for v in violations
|
||||
if bool(getattr(v, "blocked_release", False))
|
||||
or bool(getattr(v, "evidence_json", {}).get("blocked_release", False))
|
||||
)
|
||||
|
||||
if check_run.final_status == CheckFinalStatus.BLOCKED and blocking_violations_count <= 0:
|
||||
if check_run.final_status == ComplianceDecision.BLOCKED and blocking_violations_count <= 0:
|
||||
raise ValueError("Blocked run requires at least one blocking violation")
|
||||
|
||||
summary = (
|
||||
"Compliance passed with no blocking violations"
|
||||
if check_run.final_status == CheckFinalStatus.COMPLIANT
|
||||
if check_run.final_status == ComplianceDecision.PASSED
|
||||
else f"Blocked with {blocking_violations_count} blocking violation(s)"
|
||||
)
|
||||
|
||||
return ComplianceReport(
|
||||
report_id=f"CCR-{uuid4()}",
|
||||
check_run_id=check_run.check_run_id,
|
||||
id=f"CCR-{uuid4()}",
|
||||
run_id=check_run.id,
|
||||
candidate_id=check_run.candidate_id,
|
||||
generated_at=datetime.now(timezone.utc),
|
||||
final_status=check_run.final_status,
|
||||
operator_summary=summary,
|
||||
structured_payload_ref=f"inmemory://check-runs/{check_run.check_run_id}/report",
|
||||
violations_count=violations_count,
|
||||
blocking_violations_count=blocking_violations_count,
|
||||
summary_json={
|
||||
"operator_summary": summary,
|
||||
"violations_count": violations_count,
|
||||
"blocking_violations_count": blocking_violations_count,
|
||||
},
|
||||
immutable=True,
|
||||
)
|
||||
|
||||
def persist_report(self, report: ComplianceReport) -> ComplianceReport:
|
||||
|
||||
Reference in New Issue
Block a user