compliance/test-multiplatform-script.sh
2025-08-20 15:40:57 +08:00

254 lines
7.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 测试多平台脚本的基本功能不构建Docker
set -e
# 配置变量
EXPORT_DIR="dms-compliance-multiplatform-test-$(date +%Y%m%d-%H%M%S)"
IMAGE_NAME="compliance-dms-multiplatform"
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
# 支持的平台列表 - 使用函数替代关联数组以兼容旧版bash
get_platform() {
case "$1" in
1) echo "linux/amd64" ;;
2) echo "linux/arm64" ;;
3) echo "linux/arm/v7" ;;
4) echo "linux/arm/v6" ;;
5) echo "linux/386" ;;
6) echo "linux/ppc64le" ;;
7) echo "linux/s390x" ;;
8) echo "linux/riscv64" ;;
*) echo "" ;;
esac
}
get_platform_name() {
case "$1" in
"linux/amd64") echo "AMD64 (x86_64) - Intel/AMD 64位" ;;
"linux/arm64") echo "ARM64 (aarch64) - Apple M1/M2, ARM 64位" ;;
"linux/arm/v7") echo "ARMv7 - 树莓派 3/4, ARM 32位" ;;
"linux/arm/v6") echo "ARMv6 - 树莓派 1/Zero, ARM 32位" ;;
"linux/386") echo "i386 - Intel/AMD 32位" ;;
"linux/ppc64le") echo "PowerPC 64位小端" ;;
"linux/s390x") echo "IBM System z" ;;
"linux/riscv64") echo "RISC-V 64位" ;;
*) echo "未知平台" ;;
esac
}
# 服务架构选择
get_service_arch() {
case "$1" in
1) echo "dual" ;;
2) echo "fastapi" ;;
3) echo "flask" ;;
*) echo "" ;;
esac
}
get_service_arch_name() {
case "$1" in
"dual") echo "双服务架构 - API服务器(5050) + 历史查看器(5051)" ;;
"fastapi") echo "FastAPI单服务 - 现代异步框架自动生成API文档(5051)" ;;
"flask") echo "Flask单服务 - 轻量级传统框架(5050)" ;;
*) echo "未知架构" ;;
esac
}
get_service_ports() {
case "$1" in
"dual") echo "5050,5051" ;;
"fastapi") echo "5051" ;;
"flask") echo "5050" ;;
*) echo "5050" ;;
esac
}
echo "=== DMS合规性测试工具 跨平台脚本测试 ==="
echo ""
# 检测当前平台
CURRENT_ARCH=$(uname -m)
case "$CURRENT_ARCH" in
x86_64|amd64) CURRENT_PLATFORM="linux/amd64" ;;
aarch64|arm64) CURRENT_PLATFORM="linux/arm64" ;;
armv7l) CURRENT_PLATFORM="linux/arm/v7" ;;
armv6l) CURRENT_PLATFORM="linux/arm/v6" ;;
i386|i686) CURRENT_PLATFORM="linux/386" ;;
*) CURRENT_PLATFORM="linux/amd64" ;;
esac
echo "[信息] 当前平台: $(get_platform_name "$CURRENT_PLATFORM")"
echo ""
# 选择服务架构
echo "请选择服务架构:"
echo " 1) $(get_service_arch_name "dual")"
echo " 2) $(get_service_arch_name "fastapi")"
echo " 3) $(get_service_arch_name "flask")"
echo ""
read -p "请输入选择 (1-3) [默认: 1]: " service_choice
service_choice=${service_choice:-1}
SELECTED_SERVICE_ARCH=$(get_service_arch "$service_choice")
if [[ -z "$SELECTED_SERVICE_ARCH" ]]; then
echo "[错误] 无效的服务架构选择"
exit 1
fi
SELECTED_PORTS=$(get_service_ports "$SELECTED_SERVICE_ARCH")
echo "[信息] 选择的架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo "[信息] 服务端口: $SELECTED_PORTS"
echo ""
# 选择目标平台
echo "请选择目标平台架构:"
for key in 1 2 3 4 5 6 7 8; do
platform=$(get_platform "$key")
name=$(get_platform_name "$platform")
if [[ "$platform" == "$CURRENT_PLATFORM" ]]; then
echo " $key) $name [当前平台]"
else
echo " $key) $name"
fi
done
echo " 9) 多平台构建 (同时构建多个平台)"
echo " 0) 自动检测当前平台"
echo ""
read -p "请输入选择 (0-9) [默认: 0]: " platform_choice
platform_choice=${platform_choice:-0}
if [[ "$platform_choice" == "0" ]]; then
TARGET_PLATFORM="$CURRENT_PLATFORM"
TARGET_PLATFORM_NAME="$(get_platform_name "$CURRENT_PLATFORM") [自动检测]"
MULTI_PLATFORM=false
elif [[ "$platform_choice" == "9" ]]; then
TARGET_PLATFORM="linux/amd64,linux/arm64"
TARGET_PLATFORM_NAME="常用平台 (AMD64 + ARM64)"
MULTI_PLATFORM=true
else
TARGET_PLATFORM=$(get_platform "$platform_choice")
if [[ -z "$TARGET_PLATFORM" ]]; then
echo "[错误] 无效的平台选择"
exit 1
fi
TARGET_PLATFORM_NAME=$(get_platform_name "$TARGET_PLATFORM")
MULTI_PLATFORM=false
fi
echo "[信息] 目标平台: $TARGET_PLATFORM_NAME"
echo "[信息] 多平台构建: $MULTI_PLATFORM"
echo ""
# 确认构建
echo "构建配置确认:"
echo " 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo " 端口: $SELECTED_PORTS"
echo " 平台: $TARGET_PLATFORM_NAME"
echo ""
read -p "确认开始测试? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo "[信息] 测试已取消"
exit 0
fi
# 更新导出目录名称以包含平台信息
if [[ "$MULTI_PLATFORM" == "true" ]]; then
EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-multiplatform-$(date +%Y%m%d-%H%M%S)"
else
platform_suffix=$(echo "$TARGET_PLATFORM" | sed 's/linux\///g' | sed 's/\//-/g')
EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-${platform_suffix}-$(date +%Y%m%d-%H%M%S)"
fi
ARCHIVE_NAME="$EXPORT_DIR.tar.gz"
echo "[信息] 最终输出目录: $EXPORT_DIR"
# 创建最终导出目录
rm -rf "$EXPORT_DIR"
mkdir -p "$EXPORT_DIR"
echo ""
echo "[步骤 1/3] 创建测试文件..."
# 创建临时构建目录
TEMP_BUILD_DIR=$(mktemp -d)
trap "rm -rf $TEMP_BUILD_DIR" EXIT
# 创建测试文件
mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,templates,static}
echo "# Test requirements" > "$TEMP_BUILD_DIR/requirements.txt"
echo "# Test API server" > "$TEMP_BUILD_DIR/api_server.py"
echo "# Test history viewer" > "$TEMP_BUILD_DIR/history_viewer.py"
echo "[步骤 2/3] 创建配置文件..."
# 创建测试Dockerfile
if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then
cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF'
FROM python:3.11-alpine
WORKDIR /app
COPY . .
EXPOSE 5050 5051
CMD ["echo", "Dual service architecture"]
EOF
cat > "$TEMP_BUILD_DIR/supervisord.conf" << 'EOF'
[supervisord]
nodaemon=true
[program:api_server]
command=python api_server.py
[program:history_viewer]
command=python history_viewer.py
EOF
else
cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF'
FROM python:3.11-alpine
WORKDIR /app
COPY . .
EXPOSE 5050
CMD ["echo", "Single service architecture"]
EOF
fi
echo "[步骤 3/3] 复制文件到最终目录..."
# 复制构建文件到最终目录
cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/"
# 创建README
cat > "$EXPORT_DIR/README.md" << EOF
# DMS合规性测试工具 - 测试部署包
## 配置信息
- **架构**: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")
- **端口**: $SELECTED_PORTS
- **目标平台**: $TARGET_PLATFORM_NAME
- **构建时间**: $(date '+%Y-%m-%d %H:%M:%S')
## 测试成功
这是一个测试部署包,验证了脚本的基本功能。
EOF
# 创建压缩包
echo "[信息] 创建压缩包..."
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
# 显示结果
echo ""
echo "=== 测试完成 ==="
echo "[成功] 测试部署包已创建: $ARCHIVE_NAME"
echo "[信息] 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")"
echo "[信息] 端口: $SELECTED_PORTS"
echo "[信息] 平台: $TARGET_PLATFORM_NAME"
echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)"
echo ""
echo "测试成功!脚本功能正常。"