From aa4d141c64ba6a050a3ad6533be51163a9fc7615 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 28 Jun 2026 20:40:23 +0800 Subject: [PATCH] feat(delivery): expose cd runner queue readback --- .../services/delivery_closure_workbench.py | 17 +++++++++++++++++ .../test_delivery_closure_workbench_api.py | 19 ++++++++++++++++++- docs/LOGBOOK.md | 8 ++++++++ ...tion-deploy-readback-blocker.snapshot.json | 6 +++--- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/apps/api/src/services/delivery_closure_workbench.py b/apps/api/src/services/delivery_closure_workbench.py index 725ed982..764afcf7 100644 --- a/apps/api/src/services/delivery_closure_workbench.py +++ b/apps/api/src/services/delivery_closure_workbench.py @@ -143,6 +143,15 @@ def build_delivery_closure_workbench( "latest_visible_cd_run_id": str( production_deploy_readback.get("latest_visible_cd_run_id") or "" ), + "latest_visible_cd_run_status": str( + production_deploy_readback.get("latest_visible_cd_run_status") + or "" + ), + "latest_visible_cd_run_jobs_total_count": _int( + production_deploy_readback.get( + "latest_visible_cd_run_jobs_total_count" + ) + ), }, "href": "/deployments", "next_action": _first_string(production_deploy.get("next_actions")), @@ -331,6 +340,14 @@ def build_delivery_closure_workbench( "production_deploy_latest_visible_cd_run_id": str( production_deploy_readback.get("latest_visible_cd_run_id") or "" ), + "production_deploy_latest_visible_cd_run_status": str( + production_deploy_readback.get("latest_visible_cd_run_status") or "" + ), + "production_deploy_latest_visible_cd_run_jobs_total_count": _int( + production_deploy_readback.get( + "latest_visible_cd_run_jobs_total_count" + ) + ), "github_write_channel_ready": github_preflight.get( "github_write_channel_ready" ) diff --git a/apps/api/tests/test_delivery_closure_workbench_api.py b/apps/api/tests/test_delivery_closure_workbench_api.py index 2769eaf3..d367bbb3 100644 --- a/apps/api/tests/test_delivery_closure_workbench_api.py +++ b/apps/api/tests/test_delivery_closure_workbench_api.py @@ -36,6 +36,13 @@ def test_delivery_closure_workbench_endpoint_returns_product_summary(): ) assert data["summary"]["production_deploy_hard_blocker_count"] == 2 assert data["summary"]["production_deploy_latest_visible_cd_run_id"] == "3853" + assert data["summary"]["production_deploy_latest_visible_cd_run_status"] == ( + "Waiting" + ) + assert ( + data["summary"]["production_deploy_latest_visible_cd_run_jobs_total_count"] + == 0 + ) assert data["summary"]["github_write_channel_ready"] is False assert data["summary"]["github_account_status"] == "suspended" assert data["summary"]["github_account_suspended"] is True @@ -79,7 +86,7 @@ def test_delivery_closure_workbench_endpoint_returns_product_summary(): assert lanes["production_deploy"]["blocker_count"] == 2 assert lanes["production_deploy"]["metric"][ "observed_source_control_main_short_sha" - ] == "3900b0b7a779" + ] == "5f20d654d4dc" assert lanes["production_deploy"]["metric"][ "production_image_tag_short_sha" ] == "af45811e87" @@ -93,6 +100,16 @@ def test_delivery_closure_workbench_endpoint_returns_product_summary(): is False ) assert lanes["production_deploy"]["metric"]["latest_visible_cd_run_id"] == "3853" + assert ( + lanes["production_deploy"]["metric"]["latest_visible_cd_run_status"] + == "Waiting" + ) + assert ( + lanes["production_deploy"]["metric"][ + "latest_visible_cd_run_jobs_total_count" + ] + == 0 + ) assert lanes["github"]["metric"]["kind"] == "private_backup_verified" assert lanes["gitea"]["metric"]["kind"] == "workflow_count" assert lanes["runtime"]["metric"]["kind"] == "surface_count" diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 72edfe3e..bfb5a1af 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,11 @@ +## 2026-06-28 — 20:36 Delivery Workbench CD runner queue 欄位投影 + +**完成內容**: +- 將 production deploy readback snapshot 內的 `latest_visible_cd_run_status` 與 `latest_visible_cd_run_jobs_total_count` 投影到 Delivery Workbench summary 與 `production_deploy` lane metric。 +- 刷新 source readback:Gitea main 觀測 SHA `5f20d654d4dc`,public Gitea CD `#3853` 仍為 `Waiting`,jobs API `total_count=0`;production API 仍舊版 `source_count=5`,新欄位尚未部署。 + +**邊界**:未使用 GitHub;未讀 token / cookie / session / secret / SQLite;未操作 host / Docker / K8s / runner service。 + ## 2026-06-28 — 20:30 188 non-110 user runner prepare-only 實作與 readback **完成內容**: diff --git a/docs/operations/awoooi-production-deploy-readback-blocker.snapshot.json b/docs/operations/awoooi-production-deploy-readback-blocker.snapshot.json index 998e766d..1a8ffda5 100644 --- a/docs/operations/awoooi-production-deploy-readback-blocker.snapshot.json +++ b/docs/operations/awoooi-production-deploy-readback-blocker.snapshot.json @@ -1,12 +1,12 @@ { "schema_version": "awoooi_production_deploy_readback_blocker_v1", - "generated_at": "2026-06-28T20:27:56+08:00", + "generated_at": "2026-06-28T20:39:15+08:00", "status": "blocked_waiting_authorized_gitea_workflow_dispatch_and_runner_queue", "priority": "P0", "scope": "awoooi_production_truth", "readback": { - "observed_source_control_main_sha": "3900b0b7a779bcca533ee625f3e8b301fc47764a", - "observed_source_control_main_short_sha": "3900b0b7a779", + "observed_source_control_main_sha": "5f20d654d4dc4e3267954aea4bd9aabdd9313bed", + "observed_source_control_main_short_sha": "5f20d654d4dc", "governance_closure_merge_sha": "27b96f0450d0e3ca6651d6b5f274a341dd727ef2", "governance_closure_commit_sha": "9e3e7fbb6ba3ffd324b45abf3ad1e7b6ec826b22", "production_image_tag_sha": "af45811e876fda322ee63c036fbc39c9f07ffd76",