feat(recovery): classify non110 harbor repair lane blocker
Some checks failed
CD Pipeline / workflow-shape (push) Has been cancelled
CD Pipeline / cancel-stale-cd (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 0s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-01 08:25:35 +08:00
parent 40b2742456
commit 77e0b58ee4
4 changed files with 252 additions and 0 deletions

View File

@@ -421,6 +421,25 @@ def build_readback(
harbor_110_repair_visible_waiting_stale = (
harbor_110_repair_waiting and harbor_110_repair_jobs_all_success
)
cd_harbor_repair_requires_110_controlled_lane = (
build_log_classifier["harbor_public_route_blocked_or_retrying"]
and build_log_classifier["harbor_controlled_repair_skip_reason"]
== "not_110_host"
)
cd_harbor_repair_blocked_by_no_matching_awoooi_host = (
cd_harbor_repair_requires_110_controlled_lane
and harbor_110_repair_no_matching_runner_label == "awoooi-host"
)
cd_harbor_repair_lane_classifier = (
"cd_harbor_repair_requires_110_controlled_lane_no_matching_awoooi_host"
if cd_harbor_repair_blocked_by_no_matching_awoooi_host
else "cd_harbor_repair_requires_110_controlled_lane_waiting"
if cd_harbor_repair_requires_110_controlled_lane
and harbor_110_repair_waiting
else "cd_harbor_repair_requires_110_controlled_lane"
if cd_harbor_repair_requires_110_controlled_lane
else ""
)
harbor_110_repair_waiting_after_cd_harbor_blocker = (
build_log_classifier["harbor_public_route_blocked_or_retrying"]
and harbor_110_repair_waiting
@@ -504,6 +523,15 @@ def build_readback(
"harbor_controlled_repair_public_registry_v2_status"
]
),
"latest_visible_cd_harbor_repair_requires_110_controlled_lane": (
cd_harbor_repair_requires_110_controlled_lane
),
"latest_visible_cd_harbor_repair_blocked_by_no_matching_awoooi_host": (
cd_harbor_repair_blocked_by_no_matching_awoooi_host
),
"latest_visible_cd_harbor_repair_lane_classifier": (
cd_harbor_repair_lane_classifier
),
"latest_visible_cd_harbor_public_route_blocked": build_log_classifier[
"harbor_public_route_blocked"
],
@@ -689,6 +717,15 @@ def build_readback(
"current_main_cd_harbor_controlled_repair_skip_reason": (
build_log_classifier["harbor_controlled_repair_skip_reason"]
),
"current_main_cd_harbor_repair_requires_110_controlled_lane": (
cd_harbor_repair_requires_110_controlled_lane
),
"current_main_cd_harbor_repair_blocked_by_no_matching_awoooi_host": (
cd_harbor_repair_blocked_by_no_matching_awoooi_host
),
"current_main_cd_harbor_repair_lane_classifier": (
cd_harbor_repair_lane_classifier
),
"current_main_cd_host_pressure_classifier": tests_log_classifier[
"host_pressure_classifier"
],

View File

@@ -699,6 +699,22 @@ def test_build_readback_classifies_harbor_public_route_blocker() -> None:
]
== "not_110_host"
)
assert (
payload["readback"][
"latest_visible_cd_harbor_repair_requires_110_controlled_lane"
]
is True
)
assert (
payload["readback"][
"latest_visible_cd_harbor_repair_blocked_by_no_matching_awoooi_host"
]
is False
)
assert (
payload["readback"]["latest_visible_cd_harbor_repair_lane_classifier"]
== "cd_harbor_repair_requires_110_controlled_lane"
)
assert payload["readback"]["latest_visible_cd_harbor_public_route_blocked"] is True
assert payload["rollups"]["current_main_cd_harbor_public_route_blocked"] is True
assert (
@@ -707,6 +723,55 @@ def test_build_readback_classifies_harbor_public_route_blocker() -> None:
]
== "not_110_host"
)
assert (
payload["rollups"][
"current_main_cd_harbor_repair_requires_110_controlled_lane"
]
is True
)
def test_harbor_repair_no_matching_explains_non110_cd_skip_reason() -> None:
module = _load_module()
payload = module.build_readback(
actions_html=_actions_html_harbor_repair_waiting_with_workflow_no_matching(),
actions_list_http_status=401,
actions_list_payload={"message": "token is required"},
cd_jobs_http_status=200,
cd_jobs_payload={"jobs": [], "total_count": 0},
latest_cd_build_log_http_status=200,
latest_cd_build_log_text=_harbor_blocked_log(),
)
assert payload["status"] == "blocked_harbor_110_repair_no_matching_runner"
assert (
payload["readback"][
"latest_visible_cd_harbor_controlled_repair_skip_reason"
]
== "not_110_host"
)
assert (
payload["readback"][
"latest_visible_cd_harbor_repair_requires_110_controlled_lane"
]
is True
)
assert (
payload["readback"][
"latest_visible_cd_harbor_repair_blocked_by_no_matching_awoooi_host"
]
is True
)
assert (
payload["readback"]["latest_visible_cd_harbor_repair_lane_classifier"]
== "cd_harbor_repair_requires_110_controlled_lane_no_matching_awoooi_host"
)
assert (
payload["rollups"][
"current_main_cd_harbor_repair_lane_classifier"
]
== "cd_harbor_repair_requires_110_controlled_lane_no_matching_awoooi_host"
)
def test_build_readback_prefers_visible_blocked_over_stale_jobs() -> None: