Files
MoonBridge/testing/smoke/container-channel.sh
T
layue13andClaude Opus 5.5 afea023bce build: 代理发行包改为单个可运行的 moonbridge.jar
发行包去掉 bin/ 启动脚本和 lib/ 下的 42 个依赖 jar,改为与其他代理服务端一样
用 java -jar moonbridge.jar 启动:
- proxy-core 用 shadow 打出含全部依赖的 moonbridge.jar(合并 META-INF/services,
  清单写入 Main-Class、Multi-Release 与 Enable-Native-Access: ALL-UNNAMED)
- 泄漏检测默认关闭改由 ProxyMain 在加载 Netty 前设置,显式 -D 仍优先
- 移除不再使用的 application 约定插件
- 安装包检查、烟测与基准脚本改用发行包根目录作 classpath;文档同步

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:00:14 +08:00

77 lines
2.7 KiB
Bash

#!/bin/sh
set -eu
repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
install="$repo_root/proxy/core/build/install/moonbridge"
python_image='docker.gitea.com/runner-images@sha256:fd911d7417bfbf0f454530e447da95b58001e1df41bbc5e1a8dd35d432575aae'
java_image='eclipse-temurin@sha256:8da0490fa9a3c26867012019565948eef0ee69438f5c75ac28146967bae984b5'
suffix=$(python3 -c 'import uuid; print(uuid.uuid4().hex[:10])')
network="moonbridge-channel-$suffix"
backend="sp-backend-$suffix"
proxy="sp-proxy-$suffix"
work=$(mktemp -d "${TMPDIR:-/tmp}/moonbridge-channel.XXXXXX")
secret=$(python3 -c 'import secrets; print(secrets.token_hex(32))')
cleanup() {
docker rm -f "$proxy" "$backend" >/dev/null 2>&1 || true
docker network rm "$network" >/dev/null 2>&1 || true
rm -rf "$work"
}
trap cleanup EXIT HUP INT TERM
cd "$repo_root"
bash ./gradlew :proxy-core:installDist --no-daemon
cat > "$work/config.yml" <<EOF
listen: "0.0.0.0:25577"
authentication: OFFLINE
allowOfflinePublicAccess: true
initialRouting:
servers: [remote]
backends: []
plugins:
directory: "/opt/moonbridge/plugins"
enabled: {}
backendChannel:
listen: "0.0.0.0:28081"
clients:
container-network-smoke:
backendName: "remote"
keyId: "primary"
secret: "$secret"
allowedHosts: ["$backend"]
allowedNamespaces: ["smoke"]
EOF
docker network create "$network" >/dev/null
docker run -d --network "$network" --name "$backend" \
-v "$repo_root:/work:ro" --entrypoint python3 "$python_image" \
/work/testing/smoke/container-network.py backend 2 >/dev/null
ready=0
for attempt in 1 2 3 4 5 6 7 8 9 10; do
if docker logs "$backend" 2>&1 | grep -q 'BACKEND_READY'; then ready=1; break; fi
sleep 1
done
if [ "$ready" -ne 1 ]; then docker logs "$backend"; exit 1; fi
docker run -d --network "$network" --name "$proxy" \
-v "$install:/opt/moonbridge:ro" -v "$work/config.yml:/opt/moonbridge.yml:ro" \
--entrypoint java "$java_image" -cp '/opt/moonbridge/*' \
dev.moonbridge.app.ProxyMain --config /opt/moonbridge.yml >/dev/null
if ! docker run --rm --network "$network" -v "$repo_root:/work:ro" \
-e "MOONBRIDGE_CHANNEL_SECRET=$secret" --entrypoint python3 "$python_image" \
/work/testing/smoke/container-network.py client control "$proxy" "$backend"; then
docker logs "$proxy" || true
docker logs "$backend" || true
exit 1
fi
for attempt in 1 2 3 4 5; do
if [ "$(docker inspect -f '{{.State.Running}}' "$backend")" = false ]; then break; fi
sleep 1
done
if [ "$(docker inspect -f '{{.State.Running}}' "$backend")" != false ] ||
[ "$(docker inspect -f '{{.State.ExitCode}}' "$backend")" != 0 ]; then
docker logs "$backend"
exit 1
fi
echo 'control: cross-container registration, login, GOODBYE and PLAY probe passed'