




















@@ -0,0 +1,191 @@
1+#!/usr/bin/env bash
2+set -euo pipefail
3+4+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5+source "$ROOT_DIR/scripts/lib/docker-e2e-image.sh"
6+7+IMAGE_NAME="$(docker_e2e_resolve_image "openclaw-npm-telegram-rtt-e2e" OPENCLAW_NPM_TELEGRAM_RTT_E2E_IMAGE)"
8+DOCKER_TARGET="${OPENCLAW_NPM_TELEGRAM_DOCKER_TARGET:-build}"
9+PACKAGE_SPEC="${OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC:-openclaw@beta}"
10+PACKAGE_TGZ="${OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ:-${OPENCLAW_CURRENT_PACKAGE_TGZ:-}}"
11+PACKAGE_LABEL="${OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL:-}"
12+OUTPUT_DIR="${OPENCLAW_NPM_TELEGRAM_OUTPUT_DIR:-.artifacts/qa-e2e/npm-telegram-rtt}"
13+14+validate_openclaw_package_spec() {
15+local spec="$1"
16+if [[ "$spec" =~ ^openclaw@(beta|latest|[0-9]{4}\.[1-9][0-9]*\.[1-9][0-9]*(-[1-9][0-9]*|-beta\.[1-9][0-9]*)?)$ ]]; then
17+return 0
18+fi
19+echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC must be openclaw@beta, openclaw@latest, or an exact OpenClaw release version; got: $spec" >&2
20+exit 1
21+}
22+23+resolve_package_tgz() {
24+local candidate="$1"
25+if [ -z "$candidate" ]; then
26+return 0
27+fi
28+if [ ! -f "$candidate" ]; then
29+echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ must point to an existing .tgz file; got: $candidate" >&2
30+exit 1
31+fi
32+case "$candidate" in
33+*.tgz) ;;
34+*)
35+echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ must point to a .tgz file; got: $candidate" >&2
36+exit 1
37+ ;;
38+esac
39+local dir
40+local base
41+ dir="$(cd "$(dirname "$candidate")" && pwd)"
42+ base="$(basename "$candidate")"
43+printf "%s/%s" "$dir" "$base"
44+}
45+46+package_mount_args=()
47+package_install_source="$PACKAGE_SPEC"
48+resolved_package_tgz="$(resolve_package_tgz "$PACKAGE_TGZ")"
49+if [ -n "$resolved_package_tgz" ]; then
50+ package_install_source="/package-under-test/$(basename "$resolved_package_tgz")"
51+ package_mount_args=(-v "$resolved_package_tgz:$package_install_source:ro")
52+else
53+ validate_openclaw_package_spec "$PACKAGE_SPEC"
54+fi
55+if [ -z "$PACKAGE_LABEL" ]; then
56+if [ -n "$resolved_package_tgz" ]; then
57+ PACKAGE_LABEL="$(basename "$resolved_package_tgz")"
58+else
59+ PACKAGE_LABEL="$PACKAGE_SPEC"
60+fi
61+fi
62+63+for key in \
64+ OPENCLAW_QA_TELEGRAM_GROUP_ID \
65+ OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN \
66+ OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN; do
67+if [ -z "${!key:-}" ]; then
68+echo "Missing required env: $key" >&2
69+exit 1
70+fi
71+done
72+73+docker_e2e_build_or_reuse "$IMAGE_NAME" npm-telegram-rtt "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR" "$DOCKER_TARGET"
74+75+mkdir -p "$ROOT_DIR/.artifacts/qa-e2e"
76+run_log="$(mktemp "${TMPDIR:-/tmp}/openclaw-npm-telegram-rtt.XXXXXX")"
77+npm_prefix_host="$(mktemp -d "$ROOT_DIR/.artifacts/qa-e2e/npm-telegram-rtt-prefix.XXXXXX")"
78+trap 'rm -f "$run_log"; rm -rf "$npm_prefix_host"' EXIT
79+80+docker_env=(
81+ -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0
82+ -e OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE="$package_install_source"
83+ -e OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL="$PACKAGE_LABEL"
84+ -e OPENCLAW_NPM_TELEGRAM_OUTPUT_DIR="$OUTPUT_DIR"
85+ -e OPENCLAW_QA_TELEGRAM_GROUP_ID
86+ -e OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN
87+ -e OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN
88+ -e OPENCLAW_QA_TELEGRAM_CANARY_TIMEOUT_MS="${OPENCLAW_QA_TELEGRAM_CANARY_TIMEOUT_MS:-180000}"
89+ -e OPENCLAW_QA_TELEGRAM_SCENARIO_TIMEOUT_MS="${OPENCLAW_QA_TELEGRAM_SCENARIO_TIMEOUT_MS:-180000}"
90+ -e OPENCLAW_NPM_TELEGRAM_SCENARIOS="${OPENCLAW_NPM_TELEGRAM_SCENARIOS:-telegram-mentioned-message-reply}"
91+ -e OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE="${OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE:-mock-openai}"
92+)
93+94+run_logged() {
95+if ! "$@" >"$run_log" 2>&1; then
96+ cat "$run_log"
97+exit 1
98+fi
99+ cat "$run_log"
100+>"$run_log"
101+}
102+103+echo "Running package Telegram RTT Docker E2E ($PACKAGE_LABEL)..."
104+run_logged docker run --rm \
105+"${docker_env[@]}" \
106+${package_mount_args[@]+"${package_mount_args[@]}"} \
107+ -v "$ROOT_DIR/scripts:/app/scripts:ro" \
108+ -v "$ROOT_DIR/.artifacts:/app/.artifacts" \
109+ -v "$npm_prefix_host:/npm-global" \
110+ -i "$IMAGE_NAME" bash -s <<'EOF'
111+set -euo pipefail
112+113+export HOME="$(mktemp -d "/tmp/openclaw-npm-telegram-rtt.XXXXXX")"
114+export NPM_CONFIG_PREFIX="/npm-global"
115+export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
116+export OPENAI_API_KEY="sk-openclaw-rtt"
117+export GATEWAY_AUTH_TOKEN_REF="openclaw-rtt"
118+export TELEGRAM_BOT_TOKEN="$OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN"
119+export OPENCLAW_DISABLE_BONJOUR="1"
120+121+install_source="${OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE:?missing OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE}"
122+package_label="${OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL:-$install_source}"
123+mock_port="${OPENCLAW_NPM_TELEGRAM_MOCK_PORT:-44080}"
124+config_path="$HOME/.openclaw/openclaw.json"
125+gateway_log="/tmp/openclaw-npm-telegram-rtt-gateway.log"
126+mock_log="/tmp/openclaw-npm-telegram-rtt-mock.log"
127+export MOCK_PORT="$mock_port"
128+129+dump_logs() {
130+ local status="$1"
131+ if [ "$status" -eq 0 ]; then
132+ return
133+ fi
134+ echo "package Telegram RTT failed with exit code $status" >&2
135+ for file in \
136+ "$mock_log" \
137+ "$gateway_log"; do
138+ if [ -f "$file" ]; then
139+ echo "--- $file ---" >&2
140+ sed -n '1,260p' "$file" >&2 || true
141+ fi
142+ done
143+}
144+trap 'status=$?; kill ${gateway_pid:-} ${mock_pid:-} 2>/dev/null || true; dump_logs "$status"; exit "$status"' EXIT
145+146+echo "Installing ${package_label} from ${install_source}..."
147+npm install -g "$install_source" --no-fund --no-audit
148+command -v openclaw
149+openclaw --version
150+installed_version="$(node -p "require('/npm-global/lib/node_modules/openclaw/package.json').version")"
151+152+node /app/scripts/e2e/mock-openai-server.mjs >"$mock_log" 2>&1 &
153+mock_pid="$!"
154+for _ in $(seq 1 60); do
155+ if node -e "fetch('http://127.0.0.1:${mock_port}/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"; then
156+ break
157+ fi
158+ sleep 1
159+done
160+161+mkdir -p "$(dirname "$config_path")" "$HOME/.openclaw/workspace" "$HOME/.openclaw/agents/main/sessions" "$HOME/workspace"
162+163+node /app/scripts/e2e/npm-telegram-rtt-config.mjs \
164+ "$config_path" \
165+ "$mock_port" \
166+ "$OPENCLAW_QA_TELEGRAM_GROUP_ID" \
167+ "$OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN" \
168+ "$OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN" \
169+ "$installed_version"
170+171+openclaw gateway run --verbose >"$gateway_log" 2>&1 &
172+gateway_pid="$!"
173+for _ in $(seq 1 120); do
174+ if ! kill -0 "$gateway_pid" 2>/dev/null; then
175+ echo "gateway exited before readiness" >&2
176+ exit 1
177+ fi
178+ if bash -c ":</dev/tcp/127.0.0.1/18789" >/dev/null 2>&1; then
179+ break
180+ fi
181+ sleep 1
182+done
183+if ! bash -c ":</dev/tcp/127.0.0.1/18789" >/dev/null 2>&1; then
184+ echo "gateway did not open port 18789" >&2
185+ exit 1
186+fi
187+188+node /app/scripts/e2e/npm-telegram-rtt-driver.mjs
189+EOF
190+191+echo "package Telegram RTT Docker E2E passed ($PACKAGE_LABEL)"
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。