mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 07:10:43 +00:00
192 lines
6.4 KiB
Bash
Executable File
192 lines
6.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
source "$ROOT_DIR/scripts/lib/docker-e2e-image.sh"
|
|
|
|
IMAGE_NAME="$(docker_e2e_resolve_image "openclaw-npm-telegram-rtt-e2e" OPENCLAW_NPM_TELEGRAM_RTT_E2E_IMAGE)"
|
|
DOCKER_TARGET="${OPENCLAW_NPM_TELEGRAM_DOCKER_TARGET:-build}"
|
|
PACKAGE_SPEC="${OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC:-openclaw@beta}"
|
|
PACKAGE_TGZ="${OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ:-${OPENCLAW_CURRENT_PACKAGE_TGZ:-}}"
|
|
PACKAGE_LABEL="${OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL:-}"
|
|
OUTPUT_DIR="${OPENCLAW_NPM_TELEGRAM_OUTPUT_DIR:-.artifacts/qa-e2e/npm-telegram-rtt}"
|
|
|
|
validate_openclaw_package_spec() {
|
|
local spec="$1"
|
|
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
|
|
return 0
|
|
fi
|
|
echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC must be openclaw@beta, openclaw@latest, or an exact OpenClaw release version; got: $spec" >&2
|
|
exit 1
|
|
}
|
|
|
|
resolve_package_tgz() {
|
|
local candidate="$1"
|
|
if [ -z "$candidate" ]; then
|
|
return 0
|
|
fi
|
|
if [ ! -f "$candidate" ]; then
|
|
echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ must point to an existing .tgz file; got: $candidate" >&2
|
|
exit 1
|
|
fi
|
|
case "$candidate" in
|
|
*.tgz) ;;
|
|
*)
|
|
echo "OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ must point to a .tgz file; got: $candidate" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
local dir
|
|
local base
|
|
dir="$(cd "$(dirname "$candidate")" && pwd)"
|
|
base="$(basename "$candidate")"
|
|
printf "%s/%s" "$dir" "$base"
|
|
}
|
|
|
|
package_mount_args=()
|
|
package_install_source="$PACKAGE_SPEC"
|
|
resolved_package_tgz="$(resolve_package_tgz "$PACKAGE_TGZ")"
|
|
if [ -n "$resolved_package_tgz" ]; then
|
|
package_install_source="/package-under-test/$(basename "$resolved_package_tgz")"
|
|
package_mount_args=(-v "$resolved_package_tgz:$package_install_source:ro")
|
|
else
|
|
validate_openclaw_package_spec "$PACKAGE_SPEC"
|
|
fi
|
|
if [ -z "$PACKAGE_LABEL" ]; then
|
|
if [ -n "$resolved_package_tgz" ]; then
|
|
PACKAGE_LABEL="$(basename "$resolved_package_tgz")"
|
|
else
|
|
PACKAGE_LABEL="$PACKAGE_SPEC"
|
|
fi
|
|
fi
|
|
|
|
for key in \
|
|
OPENCLAW_QA_TELEGRAM_GROUP_ID \
|
|
OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN \
|
|
OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN; do
|
|
if [ -z "${!key:-}" ]; then
|
|
echo "Missing required env: $key" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
docker_e2e_build_or_reuse "$IMAGE_NAME" npm-telegram-rtt "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR" "$DOCKER_TARGET"
|
|
|
|
mkdir -p "$ROOT_DIR/.artifacts/qa-e2e"
|
|
run_log="$(mktemp "${TMPDIR:-/tmp}/openclaw-npm-telegram-rtt.XXXXXX")"
|
|
npm_prefix_host="$(mktemp -d "$ROOT_DIR/.artifacts/qa-e2e/npm-telegram-rtt-prefix.XXXXXX")"
|
|
trap 'rm -f "$run_log"; rm -rf "$npm_prefix_host"' EXIT
|
|
|
|
docker_env=(
|
|
-e COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
|
-e OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE="$package_install_source"
|
|
-e OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL="$PACKAGE_LABEL"
|
|
-e OPENCLAW_NPM_TELEGRAM_OUTPUT_DIR="$OUTPUT_DIR"
|
|
-e OPENCLAW_QA_TELEGRAM_GROUP_ID
|
|
-e OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN
|
|
-e OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN
|
|
-e OPENCLAW_QA_TELEGRAM_CANARY_TIMEOUT_MS="${OPENCLAW_QA_TELEGRAM_CANARY_TIMEOUT_MS:-180000}"
|
|
-e OPENCLAW_QA_TELEGRAM_SCENARIO_TIMEOUT_MS="${OPENCLAW_QA_TELEGRAM_SCENARIO_TIMEOUT_MS:-180000}"
|
|
-e OPENCLAW_NPM_TELEGRAM_SCENARIOS="${OPENCLAW_NPM_TELEGRAM_SCENARIOS:-telegram-mentioned-message-reply}"
|
|
-e OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE="${OPENCLAW_NPM_TELEGRAM_PROVIDER_MODE:-mock-openai}"
|
|
)
|
|
|
|
run_logged() {
|
|
if ! "$@" >"$run_log" 2>&1; then
|
|
cat "$run_log"
|
|
exit 1
|
|
fi
|
|
cat "$run_log"
|
|
>"$run_log"
|
|
}
|
|
|
|
echo "Running package Telegram RTT Docker E2E ($PACKAGE_LABEL)..."
|
|
run_logged docker run --rm \
|
|
"${docker_env[@]}" \
|
|
${package_mount_args[@]+"${package_mount_args[@]}"} \
|
|
-v "$ROOT_DIR/scripts:/app/scripts:ro" \
|
|
-v "$ROOT_DIR/.artifacts:/app/.artifacts" \
|
|
-v "$npm_prefix_host:/npm-global" \
|
|
-i "$IMAGE_NAME" bash -s <<'EOF'
|
|
set -euo pipefail
|
|
|
|
export HOME="$(mktemp -d "/tmp/openclaw-npm-telegram-rtt.XXXXXX")"
|
|
export NPM_CONFIG_PREFIX="/npm-global"
|
|
export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
|
|
export OPENAI_API_KEY="sk-openclaw-rtt"
|
|
export GATEWAY_AUTH_TOKEN_REF="openclaw-rtt"
|
|
export TELEGRAM_BOT_TOKEN="$OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN"
|
|
export OPENCLAW_DISABLE_BONJOUR="1"
|
|
|
|
install_source="${OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE:?missing OPENCLAW_NPM_TELEGRAM_INSTALL_SOURCE}"
|
|
package_label="${OPENCLAW_NPM_TELEGRAM_PACKAGE_LABEL:-$install_source}"
|
|
mock_port="${OPENCLAW_NPM_TELEGRAM_MOCK_PORT:-44080}"
|
|
config_path="$HOME/.openclaw/openclaw.json"
|
|
gateway_log="/tmp/openclaw-npm-telegram-rtt-gateway.log"
|
|
mock_log="/tmp/openclaw-npm-telegram-rtt-mock.log"
|
|
export MOCK_PORT="$mock_port"
|
|
|
|
dump_logs() {
|
|
local status="$1"
|
|
if [ "$status" -eq 0 ]; then
|
|
return
|
|
fi
|
|
echo "package Telegram RTT failed with exit code $status" >&2
|
|
for file in \
|
|
"$mock_log" \
|
|
"$gateway_log"; do
|
|
if [ -f "$file" ]; then
|
|
echo "--- $file ---" >&2
|
|
sed -n '1,260p' "$file" >&2 || true
|
|
fi
|
|
done
|
|
}
|
|
trap 'status=$?; kill ${gateway_pid:-} ${mock_pid:-} 2>/dev/null || true; dump_logs "$status"; exit "$status"' EXIT
|
|
|
|
echo "Installing ${package_label} from ${install_source}..."
|
|
npm install -g "$install_source" --no-fund --no-audit
|
|
command -v openclaw
|
|
openclaw --version
|
|
installed_version="$(node -p "require('/npm-global/lib/node_modules/openclaw/package.json').version")"
|
|
|
|
node /app/scripts/e2e/mock-openai-server.mjs >"$mock_log" 2>&1 &
|
|
mock_pid="$!"
|
|
for _ in $(seq 1 60); do
|
|
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
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
mkdir -p "$(dirname "$config_path")" "$HOME/.openclaw/workspace" "$HOME/.openclaw/agents/main/sessions" "$HOME/workspace"
|
|
|
|
node /app/scripts/e2e/npm-telegram-rtt-config.mjs \
|
|
"$config_path" \
|
|
"$mock_port" \
|
|
"$OPENCLAW_QA_TELEGRAM_GROUP_ID" \
|
|
"$OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN" \
|
|
"$OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN" \
|
|
"$installed_version"
|
|
|
|
openclaw gateway run --verbose >"$gateway_log" 2>&1 &
|
|
gateway_pid="$!"
|
|
for _ in $(seq 1 120); do
|
|
if ! kill -0 "$gateway_pid" 2>/dev/null; then
|
|
echo "gateway exited before readiness" >&2
|
|
exit 1
|
|
fi
|
|
if bash -c ":</dev/tcp/127.0.0.1/18789" >/dev/null 2>&1; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
if ! bash -c ":</dev/tcp/127.0.0.1/18789" >/dev/null 2>&1; then
|
|
echo "gateway did not open port 18789" >&2
|
|
exit 1
|
|
fi
|
|
|
|
node /app/scripts/e2e/npm-telegram-rtt-driver.mjs
|
|
EOF
|
|
|
|
echo "package Telegram RTT Docker E2E passed ($PACKAGE_LABEL)"
|