






















@@ -4,14 +4,39 @@
44# They centralize temporary log naming and the small success/failure print
55# pattern used by Docker scenario scripts.
667+docker_e2e_normalize_positive_int_value() {
8+local label="${1:?missing value label}"
9+local value="${2-}"
10+if [[ ! "$value" =~ ^[0-9]+$ ]] || (( 10#$value < 1 )); then
11+echo "invalid $label: $value" >&2
12+return 2
13+fi
14+printf '%s\n' "$((10#$value))"
15+}
16+17+docker_e2e_read_positive_int_env() {
18+local name="${1:?missing environment variable name}"
19+local fallback="${2:?missing fallback value}"
20+local value="${!name-}"
21+if [ -z "${!name+x}" ]; then
22+ value="$fallback"
23+fi
24+ docker_e2e_normalize_positive_int_value "$name" "$value"
25+}
26+727run_logged() {
828local label="$1"
929shift
30+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 >/dev/null || return $?
1031local log_file
1132 log_file="$(docker_e2e_run_log "$label")"
1233if ! "$@" >"$log_file" 2>&1; then
13- docker_e2e_print_log "$log_file"
34+local print_status=0
35+ docker_e2e_print_log "$log_file" || print_status="$?"
1436 rm -f "$log_file"
37+if [ "$print_status" -ne 0 ]; then
38+return "$print_status"
39+fi
1540return 1
1641fi
1742 rm -f "$log_file"
@@ -20,26 +45,36 @@ run_logged() {
2045run_logged_print() {
2146local label="$1"
2247shift
48+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 >/dev/null || return $?
2349local log_file
2450 log_file="$(docker_e2e_run_log "$label")"
2551if ! "$@" >"$log_file" 2>&1; then
26- docker_e2e_print_log "$log_file"
52+local print_status=0
53+ docker_e2e_print_log "$log_file" || print_status="$?"
2754 rm -f "$log_file"
55+if [ "$print_status" -ne 0 ]; then
56+return "$print_status"
57+fi
2858return 1
2959fi
30- docker_e2e_print_log "$log_file"
60+ docker_e2e_print_log "$log_file" || {
61+local print_status="$?"
62+ rm -f "$log_file"
63+return "$print_status"
64+ }
3165 rm -f "$log_file"
3266}
33673468run_logged_print_heartbeat() {
3569local label="$1"
3670local interval_seconds="$2"
3771shift 2
38-if ! [[ "$interval_seconds" =~ ^[0-9]+$ ]] || [ "$interval_seconds" -lt 1 ]; then
39- interval_seconds="30"
40-else
41- interval_seconds="$((10#$interval_seconds))"
42-fi
72+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 >/dev/null || return $?
73+ interval_seconds="$(docker_e2e_normalize_positive_int_value "Docker E2E log heartbeat interval" "$interval_seconds")" || return $?
74+local heartbeat_term_grace_seconds
75+ heartbeat_term_grace_seconds="$(
76+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_HEARTBEAT_TERM_GRACE_SECONDS 30
77+ )" || return $?
4378local log_file
4479 log_file="$(docker_e2e_run_log "$label")"
4580local command_pid=""
@@ -55,14 +90,8 @@ run_logged_print_heartbeat() {
5590return 0
5691fi
5792kill -TERM "$command_pid" 2>/dev/null || true
58-local grace_seconds="${OPENCLAW_DOCKER_E2E_HEARTBEAT_TERM_GRACE_SECONDS:-30}"
59-if ! [[ "$grace_seconds" =~ ^[0-9]+$ ]] || [ "$grace_seconds" -lt 1 ]; then
60- grace_seconds="30"
61-else
62- grace_seconds="$((10#$grace_seconds))"
63-fi
6493local wait_attempt
65-for wait_attempt in $(seq 1 "$((grace_seconds * 10))"); do
94+for wait_attempt in $(seq 1 "$((heartbeat_term_grace_seconds * 10))"); do
6695if ! kill -0 "$command_pid" 2>/dev/null; then
6796return 0
6897fi
@@ -130,7 +159,11 @@ run_logged_print_heartbeat() {
130159wait "$command_pid"
131160 status=$?
132161set -e
133- docker_e2e_print_log "$log_file"
162+ docker_e2e_print_log "$log_file" || {
163+local print_status="$?"
164+ cleanup_heartbeat_command 0
165+return "$print_status"
166+ }
134167 cleanup_heartbeat_command 0
135168return "$status"
136169}
@@ -144,12 +177,8 @@ docker_e2e_run_log() {
144177145178docker_e2e_print_log() {
146179local log_file="$1"
147-local max_bytes="${OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES:-65536}"
148-if ! [[ "$max_bytes" =~ ^[0-9]+$ ]] || [ "$max_bytes" -lt 1 ]; then
149- max_bytes="65536"
150-else
151- max_bytes="$((10#$max_bytes))"
152-fi
180+local max_bytes
181+ max_bytes="$(docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536)" || return $?
153182if [ ! -f "$log_file" ]; then
154183return 0
155184fi
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。