fix(cd): 補強 Docker lock 時間解析
Some checks failed
CD Pipeline / tests (push) Successful in 1m45s
Code Review / ai-code-review (push) Successful in 27s
Ansible / Reboot Recovery Contract / validate (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled

This commit is contained in:
Your Name
2026-06-18 15:50:48 +08:00
parent fc6c01ee13
commit 84ca8423ab
2 changed files with 5 additions and 2 deletions

View File

@@ -389,9 +389,12 @@ jobs:
if [ -n "$CREATED_AT" ]; then
# 2026-05-03 ogt: 修復 stale 偵測 — Docker 回傳 "2006-01-02 15:04:05.999999999 -0700 MST"
# date -d 不接受奈秒小數點與末尾時區縮寫CST/MST 等),導致 CREATED_EPOCH=0 → stale 永不觸發
# 修法sed 去除奈秒 (.NNN...) 和末尾縮寫 (空格+大寫字母)GNU date 才能正確解析
# 2026-06-18 Codex: act-runner 容器可能沒有 GNU date / python3
# node 由 bootstrap 安裝,作為 Docker CreatedAt 的穩定解析 fallback。
CREATED_CLEAN=$(echo "$CREATED_AT" | sed 's/\.[0-9]*//' | sed 's/ [A-Z][A-Z]*$//')
CREATED_EPOCH=$(date -d "$CREATED_CLEAN" +%s 2>/dev/null || \
node -e 'const raw = process.argv[1] || ""; const cleaned = raw.replace(/\.\d+/, "").replace(/\s+[A-Z]{2,4}$/, ""); const m = cleaned.match(/^(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})\s+([+-]\d{2})(\d{2})$/); if (!m) process.exit(1); const ms = Date.parse(`${m[1]}T${m[2]}${m[3]}:${m[4]}`); if (!Number.isFinite(ms)) process.exit(1); console.log(Math.floor(ms / 1000));' \
"$CREATED_AT" 2>/dev/null || \
python3 -c "import sys, datetime, re; ts = re.sub(r'\\.\d+', '', sys.argv[1]); ts = re.sub(r'\\s+[A-Z]{2,4}$', '', ts.strip()); print(int(datetime.datetime.strptime(ts, '%Y-%m-%d %H:%M:%S %z').timestamp()))" \
"$CREATED_AT" 2>/dev/null || echo 0)
NOW_EPOCH=$(date +%s)

View File

@@ -24,7 +24,7 @@ _EXPECTED_CURRENT_TASK = "P2-407"
_EXPECTED_NEXT_TASK = "P2-408"
_EXPECTED_CANONICAL_ROOM = "AwoooI SRE 戰情室"
_EXPECTED_CANONICAL_ROOM_ENV = "SRE_GROUP_CHAT_ID"
# 2026-06-18 Codex: 部署錨點;不改變 P2-407 no-write snapshot 或 CD lock 行為。
# 2026-06-18 Codex: 部署錨點;不改變 P2-407 no-write snapshot 或 CD lock 解析行為。
_EXPECTED_SOURCE_SCHEMAS = {
"ai_agent_report_status_board_v1",
"ai_agent_report_automation_review_v1",