From e7c501396325603c738f1bf7af6e78095262cb48 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 28 Jun 2026 14:44:41 +0800 Subject: [PATCH] fix(ci): use event payload for controlled runtime diff --- .gitea/workflows/cd.yaml | 28 +++++++++++++++++++++- scripts/ci/wait-host-web-build-pressure.sh | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 5afa3eb4..d38816a5 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -164,7 +164,33 @@ jobs: # pyproject.toml hash 變才重裝,其餘直接 activate (節省 ~6-7 min) - name: Run API Tests run: | - CHANGED_FILES="$(git diff-tree --no-commit-id --name-only -r "${GITHUB_SHA:-HEAD}" 2>/dev/null || git show --format= --name-only --no-renames HEAD)" + CHANGED_FILES="" + if [ -r "${GITHUB_EVENT_PATH:-}" ]; then + CHANGED_FILES="$(python3 - <<'PY' + import json + import os + + event_path = os.environ.get("GITHUB_EVENT_PATH") + files = [] + with open(event_path, "r", encoding="utf-8") as handle: + payload = json.load(handle) + for commit in payload.get("commits", []) or []: + for key in ("added", "modified", "removed"): + files.extend(commit.get(key, []) or []) + for path in dict.fromkeys(files): + print(path) + PY + )" + fi + if [ -z "$CHANGED_FILES" ]; then + BASE_SHA="${{ github.event.before }}" + if [ -n "$BASE_SHA" ] && ! printf '%s' "$BASE_SHA" | grep -Eq '^0+$'; then + git fetch --no-tags --depth=50 origin "${GITHUB_REF_NAME:-main}" >/dev/null 2>&1 || true + if git cat-file -e "${BASE_SHA}^{commit}" 2>/dev/null; then + CHANGED_FILES="$(git diff --name-only "$BASE_SHA" "${GITHUB_SHA:-HEAD}")" + fi + fi + fi if [ -z "$CHANGED_FILES" ]; then CHANGED_FILES="$(git show --format= --name-only --no-renames HEAD)" fi diff --git a/scripts/ci/wait-host-web-build-pressure.sh b/scripts/ci/wait-host-web-build-pressure.sh index 94bea698..19e09694 100755 --- a/scripts/ci/wait-host-web-build-pressure.sh +++ b/scripts/ci/wait-host-web-build-pressure.sh @@ -16,6 +16,7 @@ set -euo pipefail # 2026-06-28 Codex: cancel-stale-cd trigger for the pre-guard CD run queue. # 2026-06-28 Codex: controlled-runtime CD trigger after API test OOM 137. # 2026-06-28 Codex: old fail-closed pressure guard is now warn-only in CD. +# 2026-06-28 Codex: controlled-runtime diff detection now uses event payload. ATTEMPTS="${HOST_WEB_BUILD_PRESSURE_ATTEMPTS:-${HOST_WEB_BUILD_PRESSURE_MAX_ATTEMPTS:-60}}" SLEEP_SECONDS="${HOST_WEB_BUILD_PRESSURE_SLEEP_SECONDS:-${HOST_WEB_BUILD_PRESSURE_INTERVAL:-10}}"