fix: tea 遇到 TLS 憑證錯誤時自動重試,避免輪詢腳本中斷
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
58c76f517a
commit
891db4e7f6
@@ -59,4 +59,6 @@ Gitea 一律以 tea 的預設 login(`tea login list` 中 default 為 true 的
|
|||||||
| `tick.sh` | 子 agent | 勾議題內文第 k 個核取方塊 |
|
| `tick.sh` | 子 agent | 勾議題內文第 k 個核取方塊 |
|
||||||
| `pr-wait.sh` | 子 agent(背景) | 等 PR 衝突、關閉或合併 |
|
| `pr-wait.sh` | 子 agent(背景) | 等 PR 衝突、關閉或合併 |
|
||||||
|
|
||||||
環境變數:`HERDR_ISSUE_INTERVAL`(pr-wait 輪詢秒數,預設 300)、`HERDR_ISSUE_WATCH_INTERVAL`(watch-issue 輪詢秒數,預設 5)、`HERDR_ISSUE_BLOCKED_AFTER`(blocked 多久才通知,預設 60 秒)、`HERDR_ISSUE_MODEL`(預設 `claude-opus-5-5`)。
|
TLS/憑證錯誤:`lib.sh` 的 tea 包裝會自動重試(預設 5 次、間隔 3 秒),輪詢中的 `watch-issue.sh`、`pr-wait.sh` 因此不會被一次性的連線問題打斷;不會關閉憑證驗證。若憑證長期有問題,請修正伺服器或系統 CA,而不是略過驗證。
|
||||||
|
|
||||||
|
環境變數:`HERDR_ISSUE_TLS_RETRIES`(TLS 重試次數,預設 5)、`HERDR_ISSUE_INTERVAL`(pr-wait 輪詢秒數,預設 300)、`HERDR_ISSUE_WATCH_INTERVAL`(watch-issue 輪詢秒數,預設 5)、`HERDR_ISSUE_BLOCKED_AFTER`(blocked 多久才通知,預設 60 秒)、`HERDR_ISSUE_MODEL`(預設 `claude-opus-5-5`)。
|
||||||
|
|||||||
@@ -19,7 +19,22 @@ print(next((l['name'] for l in json.load(sys.stdin) if str(l.get('default')).low
|
|||||||
fi
|
fi
|
||||||
[ -n "$HERDR_ISSUE_LOGIN" ] || { echo "herdr-issue: tea 沒有預設 login,請先 tea login default <name>" >&2; exit 1; }
|
[ -n "$HERDR_ISSUE_LOGIN" ] || { echo "herdr-issue: tea 沒有預設 login,請先 tea login default <name>" >&2; exit 1; }
|
||||||
export HERDR_ISSUE_LOGIN
|
export HERDR_ISSUE_LOGIN
|
||||||
tea() { command tea "$1" --login "$HERDR_ISSUE_LOGIN" "${@:2}"; }
|
# TLS/憑證錯誤多半是暫時的(連線被重置、代理、時鐘),遇到就重試幾次,不要讓輪詢中的腳本因此中斷;
|
||||||
|
# 其他錯誤原樣回傳。不關閉憑證驗證。重試次數 HERDR_ISSUE_TLS_RETRIES(預設 5),間隔 3 秒。
|
||||||
|
tea() {
|
||||||
|
local out err rc=0 try max="${HERDR_ISSUE_TLS_RETRIES:-5}" ef; ef="$(mktemp)"
|
||||||
|
for ((try = 1; try <= max; try++)); do
|
||||||
|
out="$(command tea "$1" --login "$HERDR_ISSUE_LOGIN" "${@:2}" 2>"$ef")" && rc=0 || rc=$?
|
||||||
|
err="$(cat "$ef")"
|
||||||
|
if ! grep -qiE 'tls|x509|certificate|handshake' <<<"$out$err"; then break; fi
|
||||||
|
echo "herdr-issue: tea 遇到 TLS/憑證錯誤(第 $try/$max 次),3 秒後重試" >&2
|
||||||
|
rc=${rc/#0/1}; sleep 3
|
||||||
|
done
|
||||||
|
rm -f "$ef"
|
||||||
|
[ -z "$err" ] || printf '%s\n' "$err" >&2
|
||||||
|
printf '%s\n' "$out"
|
||||||
|
return "$rc"
|
||||||
|
}
|
||||||
|
|
||||||
# 從 stdin 讀 JSON,執行 python 片段,d 是解析後的物件。
|
# 從 stdin 讀 JSON,執行 python 片段,d 是解析後的物件。
|
||||||
jq_py() { python3 -c "import sys,json
|
jq_py() { python3 -c "import sys,json
|
||||||
|
|||||||
Reference in New Issue
Block a user