From 0c18e0c87feb9e33fe8627448cc5851f6b606f82 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 16 Jul 2026 21:19:06 -0700 Subject: [PATCH] refactor(docker): isolate E2E diagnostics (#109625) --- .../lib/docker-e2e-resource-diagnostics.sh | 41 ++++++++----------- test/scripts/docker-build-helper.test.ts | 12 ++++-- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/scripts/lib/docker-e2e-resource-diagnostics.sh b/scripts/lib/docker-e2e-resource-diagnostics.sh index 4547d802bde2..8c39a6bf22f2 100644 --- a/scripts/lib/docker-e2e-resource-diagnostics.sh +++ b/scripts/lib/docker-e2e-resource-diagnostics.sh @@ -23,17 +23,17 @@ docker_e2e_resource_limit_error_file() { return 1 } -docker_e2e_resource_limit_stderr_file() { +docker_e2e_resource_limit_temp_dir() { local template="${TMPDIR:-/tmp}/openclaw-docker-resource-limits.XXXXXX" if command -v mktemp >/dev/null 2>&1; then - mktemp "$template" + mktemp -d "$template" return fi if [ -x /usr/bin/mktemp ]; then - /usr/bin/mktemp "$template" + /usr/bin/mktemp -d "$template" return fi - echo "mktemp command not found; cannot capture Docker resource-limit diagnostics" >&2 + echo "mktemp command not found; cannot create Docker resource-limit diagnostics" >&2 return 127 } @@ -61,12 +61,12 @@ docker_e2e_tail_bin() { return 1 } -docker_e2e_remove_diagnostic_file() { +docker_e2e_remove_diagnostic_dir() { if command -v rm >/dev/null 2>&1; then - rm -f "$@" + rm -rf "$1" return fi - /bin/rm -f "$@" + /bin/rm -rf "$1" } docker_e2e_print_resource_limit_error() { @@ -81,8 +81,8 @@ docker_e2e_docker_run_with_resource_diagnostics() { return fi - local stderr_file="" - if ! stderr_file="$(docker_e2e_resource_limit_stderr_file)"; then + local diagnostic_dir="" + if ! diagnostic_dir="$(docker_e2e_resource_limit_temp_dir)"; then docker_e2e_timeout_cmd \ "$timeout_value" \ docker run "${DOCKER_E2E_RUN_RESOURCE_ARGS[@]}" "$@" @@ -90,7 +90,7 @@ docker_e2e_docker_run_with_resource_diagnostics() { fi local tee_bin="" if ! tee_bin="$(docker_e2e_tee_bin)"; then - docker_e2e_remove_diagnostic_file "$stderr_file" + docker_e2e_remove_diagnostic_dir "$diagnostic_dir" docker_e2e_timeout_cmd \ "$timeout_value" \ docker run "${DOCKER_E2E_RUN_RESOURCE_ARGS[@]}" "$@" @@ -98,30 +98,23 @@ docker_e2e_docker_run_with_resource_diagnostics() { fi local tail_bin="" if ! tail_bin="$(docker_e2e_tail_bin)"; then - docker_e2e_remove_diagnostic_file "$stderr_file" + docker_e2e_remove_diagnostic_dir "$diagnostic_dir" docker_e2e_timeout_cmd \ "$timeout_value" \ docker run "${DOCKER_E2E_RUN_RESOURCE_ARGS[@]}" "$@" return fi - local stderr_fifo="${stderr_file}.stderr.pipe" - local capture_fifo="${stderr_file}.capture.pipe" + local stderr_file="${diagnostic_dir}/stderr" + local stderr_fifo="${diagnostic_dir}/stderr.pipe" + local capture_fifo="${diagnostic_dir}/capture.pipe" local mkfifo_bin="" if command -v mkfifo >/dev/null 2>&1; then mkfifo_bin="$(command -v mkfifo)" elif [ -x /usr/bin/mkfifo ]; then mkfifo_bin=/usr/bin/mkfifo fi - local fifo_status=1 - if [ -n "$mkfifo_bin" ]; then - local previous_umask="" - previous_umask="$(umask)" - umask 077 - "$mkfifo_bin" "$stderr_fifo" "$capture_fifo" && fifo_status=0 || fifo_status="$?" - umask "$previous_umask" - fi - if [ "$fifo_status" -ne 0 ]; then - docker_e2e_remove_diagnostic_file "$stderr_file" "$stderr_fifo" "$capture_fifo" + if [ -z "$mkfifo_bin" ] || ! "$mkfifo_bin" "$stderr_fifo" "$capture_fifo"; then + docker_e2e_remove_diagnostic_dir "$diagnostic_dir" docker_e2e_timeout_cmd \ "$timeout_value" \ docker run "${DOCKER_E2E_RUN_RESOURCE_ARGS[@]}" "$@" @@ -147,6 +140,6 @@ docker_e2e_docker_run_with_resource_diagnostics() { if docker_e2e_resource_limit_error_file "$run_status" "$stderr_file"; then docker_e2e_print_resource_limit_error fi - docker_e2e_remove_diagnostic_file "$stderr_file" "$stderr_fifo" "$capture_fifo" + docker_e2e_remove_diagnostic_dir "$diagnostic_dir" return "$run_status" } diff --git a/test/scripts/docker-build-helper.test.ts b/test/scripts/docker-build-helper.test.ts index 9d118484625c..5a4858a94f16 100644 --- a/test/scripts/docker-build-helper.test.ts +++ b/test/scripts/docker-build-helper.test.ts @@ -1336,9 +1336,12 @@ docker() { return 125 } -mkfifo() { - umask >"$TMPDIR/mkfifo-umask" - /usr/bin/mkfifo "$@" +mktemp() { + local dir="" + dir="$(/usr/bin/mktemp "$@")" || return + printf "%s\\n" "$*" >"$TMPDIR/mktemp-seen" + printf "%s\\n" "$dir" >"$TMPDIR/diagnostic-dir" + printf "%s\\n" "$dir" } tail() { @@ -1366,7 +1369,8 @@ stderr="$(<"$TMPDIR/stderr")" [[ "$stderr" = *"OPENCLAW_DOCKER_E2E_DISABLE_RESOURCE_LIMITS=1"* ]] [[ "$(grep -c '^run ' "$TMPDIR/docker-seen")" = "1" ]] [[ "$(<"$TMPDIR/tail-seen")" = "-c 65536" ]] -[[ "$(<"$TMPDIR/mkfifo-umask")" = "0077" ]] +[[ "$(<"$TMPDIR/mktemp-seen")" = -d* ]] +[[ ! -e "$(<"$TMPDIR/diagnostic-dir")" ]] `; execFileSync("bash", ["-lc", script], { encoding: "utf8" });