From d735dea704977f5d6172545a8062bc7494b9f766 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 30 Jun 2026 19:41:50 +0800 Subject: [PATCH] fix(runner): classify harbor public route failures --- docs/LOGBOOK.md | 13 ++ ops/runner/read-public-gitea-actions-queue.py | 100 ++++++++++++++ .../test_read_public_gitea_actions_queue.py | 129 ++++++++++++++++++ 3 files changed, 242 insertions(+) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 0872c41cd..da602cfd5 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,16 @@ +## 2026-06-30 — 20:16 Public Gitea CD Harbor blocker classifier + +**照主線修正的問題**: +- #4043 / #4044 顯示 tests 已可過,但 build-and-deploy 在 Harbor `/v2/` public route 502 / timeout 上 fail-closed;不能再只把 latest CD 顯示成泛化 Failure。 +- `ops/runner/read-public-gitea-actions-queue.py` 現在會在 public/read-only 邊界讀 latest visible CD run 的 build job log,分類 `harbor_registry_public_route_unavailable`、記錄 final `registry_v2_status` 與 Harbor login retry attempt count。 +- 這和前一段 dynamic jobs API URL guard 疊在一起:jobs API 舊資料不再被誤當成功,build log blocker 也能成為 closure verifier 的精準 evidence。 + +**驗證**: +- `test_read_public_gitea_actions_queue.py` 新增 fixture,覆蓋 Harbor `/v2/` `000/502`、第 12 次 retry、`BLOCKER harbor_registry_public_route_unavailable`、CLI fixture log readback。 +- focused verifier tests、`py_compile`、`git diff --check` 通過。 + +**邊界**:只讀 public Gitea HTML / API / public job log;未 workflow_dispatch,未 SSH 寫主機,未重啟主機,未 restart Docker daemon / host Nginx / K3s / DB / Redis / firewall,未讀 secret / token / raw sessions / SQLite / `.env`,未使用 GitHub / `gh` / GitHub API。 + ## 2026-06-30 — 20:05 Harbor public route retry for P0 CD closure **照主線修正的問題**: diff --git a/ops/runner/read-public-gitea-actions-queue.py b/ops/runner/read-public-gitea-actions-queue.py index 575eec95e..a8ccd2067 100644 --- a/ops/runner/read-public-gitea-actions-queue.py +++ b/ops/runner/read-public-gitea-actions-queue.py @@ -18,6 +18,9 @@ DEFAULT_ACTIONS_LIST_API_URL = ( "https://gitea.wooo.work/api/v1/repos/wooo/awoooi/actions/runs?limit=10" ) DEFAULT_CD_RUN_JOBS_API_URL = "" +DEFAULT_CD_BUILD_JOB_LOG_URL_TEMPLATE = ( + "https://gitea.wooo.work/wooo/awoooi/actions/runs/{run_id}/jobs/3/logs" +) SCHEMA_VERSION = "awoooi_public_gitea_actions_queue_readback_v1" _RUN_ROW_RE = re.compile( @@ -38,6 +41,13 @@ _RUN_NAME_RE = re.compile(r"^(?P.+)\s+#(?P\d+)$") _NO_MATCHING_LABEL_RE = re.compile( r"No matching online runner with label:\s*(?P