compliance/test-directory-fix.sh
2025-08-20 15:40:57 +08:00

180 lines
4.2 KiB
Bash

#!/bin/bash
# 测试目录创建和复制逻辑
set -e
echo "=== 测试目录创建和复制逻辑 ==="
# 模拟变量
SELECTED_SERVICE_ARCH="dual"
TARGET_PLATFORM="linux/arm64"
MULTI_PLATFORM=false
# 更新导出目录名称以包含平台信息
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 "[步骤 1/4] 复制项目文件..."
# 创建临时构建目录
TEMP_BUILD_DIR=$(mktemp -d)
trap "rm -rf $TEMP_BUILD_DIR" EXIT
# 复制核心目录(排除缓存和临时文件)
echo "[信息] 复制核心目录..."
mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,custom_testcases,templates,static,assets}
# 创建测试文件
echo "# Test content" > "$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 "# Test ddms suite" > "$TEMP_BUILD_DIR/ddms_compliance_suite/test.py"
echo "[步骤 2/4] 创建 Dockerfile..."
cd "$TEMP_BUILD_DIR"
# 创建测试Dockerfile
cat > "Dockerfile" << 'EOF'
FROM python:3.11-alpine
WORKDIR /app
COPY . .
EXPOSE 5050 5051
CMD ["echo", "Test dockerfile"]
EOF
# 创建supervisor配置
cat > "supervisord.conf" << 'EOF'
[supervisord]
nodaemon=true
[program:api_server]
command=python api_server.py
[program:history_viewer]
command=python history_viewer.py
EOF
cd ..
echo "[步骤 3/4] 复制构建文件..."
# 确保目标目录存在
mkdir -p "$EXPORT_DIR"
cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/"
echo "[步骤 4/4] 创建配置文件..."
# 创建Docker Compose文件
cat > "$EXPORT_DIR/docker-compose.yml" << EOF
version: '3.8'
services:
dms-compliance:
build:
context: .
dockerfile: Dockerfile
platforms:
- $TARGET_PLATFORM
image: compliance-dms-multiplatform:latest
container_name: dms-compliance-tool
ports:
- "5050:5050" # API服务器端口
- "5051:5051" # 历史查看器端口
environment:
- PYTHONPATH=/app
- TZ=Asia/Shanghai
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
volumes:
- ./uploads:/app/uploads
- ./logs:/app/logs
- ./test_reports:/app/test_reports
- ./config:/app/config:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5050/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- dms-network
networks:
dms-network:
driver: bridge
volumes:
uploads:
logs:
test_reports:
config:
EOF
# 创建启动脚本
cat > "$EXPORT_DIR/start.sh" << 'EOF'
#!/bin/bash
echo "=== DMS合规性测试工具启动脚本 ==="
echo "这是一个测试脚本"
EOF
chmod +x "$EXPORT_DIR/start.sh"
# 创建README
cat > "$EXPORT_DIR/README.md" << EOF
# DMS合规性测试工具 - 测试部署包
## 系统信息
- **架构**: 双服务架构 - API服务器(5050) + 历史查看器(5051)
- **端口**: 5050,5051
- **目标平台**: ARM64 (aarch64) - Apple M1/M2, ARM 64位
- **构建时间**: $(date '+%Y-%m-%d %H:%M:%S')
## 测试成功
目录创建和文件复制逻辑正常工作。
EOF
# 验证文件结构
echo ""
echo "=== 验证文件结构 ==="
echo "导出目录内容:"
ls -la "$EXPORT_DIR"
echo ""
echo "核心文件检查:"
for file in Dockerfile docker-compose.yml start.sh README.md requirements.txt api_server.py history_viewer.py supervisord.conf; do
if [[ -f "$EXPORT_DIR/$file" ]]; then
echo "$file"
else
echo "$file (缺失)"
fi
done
# 创建压缩包
echo ""
echo "[信息] 创建压缩包..."
tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR"
# 清理临时目录
rm -rf "$EXPORT_DIR"
# 显示结果
echo ""
echo "=== 测试完成 ==="
echo "[成功] 测试部署包已创建: $ARCHIVE_NAME"
echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)"
echo ""
echo "目录创建和复制逻辑测试成功!"