fix(gitea): close controlled runner attestation readback
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 1m6s
CD Pipeline / build-and-deploy (push) Successful in 4m29s
CD Pipeline / post-deploy-checks (push) Successful in 2m3s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 1m6s
CD Pipeline / build-and-deploy (push) Successful in 4m29s
CD Pipeline / post-deploy-checks (push) Successful in 2m3s
This commit is contained in:
@@ -14,7 +14,11 @@ from src.services.gitea_workflow_runner_health import (
|
||||
)
|
||||
|
||||
_SCHEMA_VERSION = "gitea_workflow_runner_owner_attestation_request_v1"
|
||||
_CONTRACT_ID = "ubuntu_latest_gitea_runner_label"
|
||||
_LEGACY_CONTRACT_ID = "ubuntu_latest_gitea_runner_label"
|
||||
_CONTROLLED_CONTRACT_IDS = (
|
||||
"awoooi_non110_host_runner",
|
||||
"awoooi_non110_ubuntu_runner",
|
||||
)
|
||||
_REQUIRED_FIELDS = [
|
||||
"runner_label",
|
||||
"actual_runner_mapping_ref",
|
||||
@@ -53,47 +57,71 @@ def load_latest_gitea_workflow_runner_owner_attestation_request() -> dict[str, A
|
||||
and contract.get("contract_id")
|
||||
in set(_strings(rollups.get("runner_contracts_requiring_action")))
|
||||
]
|
||||
target_contract = next(
|
||||
legacy_contract = next(
|
||||
(
|
||||
contract
|
||||
for contract in action_contracts
|
||||
if contract.get("contract_id") == _CONTRACT_ID
|
||||
if contract.get("contract_id") == _LEGACY_CONTRACT_ID
|
||||
),
|
||||
{},
|
||||
)
|
||||
controlled_contracts = [
|
||||
contract
|
||||
for contract in health.get("runner_contracts", [])
|
||||
if isinstance(contract, dict)
|
||||
and contract.get("contract_id") in set(_CONTROLLED_CONTRACT_IDS)
|
||||
]
|
||||
target_contract = legacy_contract or _first_dict(controlled_contracts)
|
||||
workflow_ids = _strings(rollups.get("workflow_ids_requiring_runner_attestation"))
|
||||
request_ready = bool(target_contract) and bool(workflow_ids)
|
||||
attestation_required = bool(legacy_contract) and bool(workflow_ids)
|
||||
attestation_not_required = (
|
||||
bool(controlled_contracts) and not action_contracts and not workflow_ids
|
||||
)
|
||||
request_packet_ready = attestation_required or attestation_not_required
|
||||
active_blockers = []
|
||||
if not request_ready:
|
||||
if not request_packet_ready:
|
||||
active_blockers.append("runner_attestation_request_source_missing")
|
||||
active_blockers.append("owner_attestation_response_not_received")
|
||||
if attestation_required:
|
||||
active_blockers.append("owner_attestation_response_not_received")
|
||||
|
||||
status = "blocked_owner_attestation_request_source_missing"
|
||||
if attestation_required:
|
||||
status = "owner_attestation_request_ready_waiting_response"
|
||||
elif attestation_not_required:
|
||||
status = "owner_attestation_not_required_controlled_runner_contracts_mapped"
|
||||
|
||||
return {
|
||||
"schema_version": _SCHEMA_VERSION,
|
||||
"priority": "P1-002",
|
||||
"scope": "gitea_workflow_runner_owner_attestation_request",
|
||||
"status": (
|
||||
"owner_attestation_request_ready_waiting_response"
|
||||
if request_ready
|
||||
else "blocked_owner_attestation_request_source_missing"
|
||||
),
|
||||
"status": status,
|
||||
"readback": {
|
||||
"workplan_id": "P1-002-GITEA-RUNNER-OWNER-ATTESTATION",
|
||||
"source_health_schema_version": health.get("schema_version"),
|
||||
"source_health_endpoint": "/api/v1/agents/gitea-workflow-runner-health",
|
||||
"contract_id": _CONTRACT_ID,
|
||||
"contract_id": str(target_contract.get("contract_id") or ""),
|
||||
"runner_label": _first_string(target_contract.get("runner_labels")),
|
||||
"request_packet_id": "gitea_runner_owner_attestation_request::ubuntu_latest",
|
||||
"attestation_required": attestation_required,
|
||||
"attestation_not_required": attestation_not_required,
|
||||
"request_packet_id": (
|
||||
"gitea_runner_owner_attestation_request::controlled_non110"
|
||||
if attestation_not_required
|
||||
else "gitea_runner_owner_attestation_request::ubuntu_latest"
|
||||
),
|
||||
"safe_next_step": (
|
||||
"collect_redacted_owner_attestation_response_then_validate_no_runner_mutation"
|
||||
"continue_public_gitea_queue_and_production_readback_without_runner_mutation"
|
||||
if attestation_not_required
|
||||
else "collect_redacted_owner_attestation_response_then_validate_no_runner_mutation"
|
||||
),
|
||||
},
|
||||
"request_packet": {
|
||||
"request_template_ready": request_ready,
|
||||
"request_template_ready": request_packet_ready,
|
||||
"attestation_required": attestation_required,
|
||||
"attestation_not_required": attestation_not_required,
|
||||
"request_sent": False,
|
||||
"owner_response_received": False,
|
||||
"owner_response_accepted": False,
|
||||
"contract_id": _CONTRACT_ID,
|
||||
"contract_id": str(target_contract.get("contract_id") or ""),
|
||||
"display_name": str(target_contract.get("display_name") or ""),
|
||||
"risk_level": str(target_contract.get("risk_level") or "high"),
|
||||
"runner_labels": _strings(target_contract.get("runner_labels")),
|
||||
@@ -127,8 +155,11 @@ def load_latest_gitea_workflow_runner_owner_attestation_request() -> dict[str, A
|
||||
],
|
||||
},
|
||||
"rollups": {
|
||||
"request_template_ready": request_ready,
|
||||
"request_packet_count": int(request_ready),
|
||||
"request_template_ready": request_packet_ready,
|
||||
"attestation_required": attestation_required,
|
||||
"attestation_not_required": attestation_not_required,
|
||||
"request_packet_count": int(request_packet_ready),
|
||||
"controlled_runner_contract_count": len(controlled_contracts),
|
||||
"workflow_requiring_attestation_count": len(workflow_ids),
|
||||
"runner_contracts_requiring_action_count": len(action_contracts),
|
||||
"required_owner_field_count": len(_REQUIRED_FIELDS),
|
||||
@@ -170,3 +201,12 @@ def _strings(value: Any) -> list[str]:
|
||||
def _first_string(value: Any) -> str:
|
||||
values = _strings(value)
|
||||
return values[0] if values else ""
|
||||
|
||||
|
||||
def _first_dict(value: Any) -> dict[str, Any]:
|
||||
if not isinstance(value, list):
|
||||
return {}
|
||||
for item in value:
|
||||
if isinstance(item, dict):
|
||||
return item
|
||||
return {}
|
||||
|
||||
Reference in New Issue
Block a user