fix(release): fail closed on dashboard parse errors
This commit is contained in:
@@ -55,8 +55,9 @@ def build_selective_release_plan(
|
||||
compatibility = compatibility_issues(dashboard)
|
||||
steps = dry_run_steps(units=units, dashboard=dashboard, channel=channel)
|
||||
notes = release_notes(dashboard)
|
||||
status = plan_status(units=units, compatibility=compatibility)
|
||||
findings = tuple(finding for unit in units for finding in unit.gate_findings)
|
||||
collection_findings = dashboard_collection_findings(dashboard)
|
||||
findings = (*collection_findings, *(finding for unit in units for finding in unit.gate_findings))
|
||||
status = plan_status(units=units, compatibility=compatibility, findings=findings)
|
||||
return SelectiveReleasePlan(
|
||||
generated_at=datetime.now(tz=UTC)
|
||||
.replace(microsecond=0)
|
||||
@@ -74,11 +75,28 @@ def build_selective_release_plan(
|
||||
findings=findings,
|
||||
compatibility=compatibility,
|
||||
),
|
||||
source_preflight_ready=bool(units)
|
||||
source_preflight_ready=not collection_findings
|
||||
and bool(units)
|
||||
and all(unit.source_preflight_ready for unit in units),
|
||||
)
|
||||
|
||||
|
||||
def dashboard_collection_findings(dashboard: ReleaseDashboard) -> tuple[ReleaseGateFinding, ...]:
|
||||
return tuple(
|
||||
ReleaseGateFinding(
|
||||
code=error.code,
|
||||
severity="blocker",
|
||||
message=error.message,
|
||||
remediation=error.remediation,
|
||||
repo=error.repo,
|
||||
source=error.source,
|
||||
expected="readable release metadata",
|
||||
actual="unreadable",
|
||||
)
|
||||
for error in dashboard.collection_errors
|
||||
)
|
||||
|
||||
|
||||
def apply_repository_version_gate(
|
||||
units: tuple[ReleasePlanUnit, ...],
|
||||
*,
|
||||
@@ -620,9 +638,12 @@ def release_notes(dashboard: ReleaseDashboard) -> tuple[str, ...]:
|
||||
|
||||
|
||||
def plan_status(
|
||||
*, units: tuple[ReleasePlanUnit, ...], compatibility: tuple[CompatibilityIssue, ...]
|
||||
*,
|
||||
units: tuple[ReleasePlanUnit, ...],
|
||||
compatibility: tuple[CompatibilityIssue, ...],
|
||||
findings: tuple[ReleaseGateFinding, ...] = (),
|
||||
) -> str:
|
||||
if any(unit.blockers for unit in units) or any(
|
||||
if any(finding.severity == "blocker" for finding in findings) or any(unit.blockers for unit in units) or any(
|
||||
issue.severity == "blocker" for issue in compatibility
|
||||
):
|
||||
return "blocked"
|
||||
|
||||
Reference in New Issue
Block a user