#!/bin/bash # ============================================================ # 构建并上传 evalscope-complete-py312 Docker 镜像 # 用法: bash scripts/build_and_upload_docker.sh # ============================================================ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DOCKER_CTX="$ROOT_DIR/tools/docker" IMAGE_TAG="evalscope-complete-py312:latest" OUTPUT_TAR="$ROOT_DIR/docker/evalscope-complete-py312.tar.gz" LOG_FILE="$ROOT_DIR/logs/build_docker_$(date +%Y%m%d_%H%M%S).log" mkdir -p "$ROOT_DIR/logs" mkdir -p "$ROOT_DIR/docker" exec > >(tee -a "$LOG_FILE") exec 2>&1 echo "==> 开始构建 Docker 镜像: $IMAGE_TAG" echo " 日志: $LOG_FILE" echo "" # 1. 同步构建上下文 echo "==> 1. 同步构建上下文到 $DOCKER_CTX" cd "$ROOT_DIR" rsync -av --delete --exclude='*.log' --exclude='__pycache__' --exclude='.git' \ bash/ "$DOCKER_CTX/bash/" rsync -av --delete --exclude='*.log' --exclude='__pycache__' --exclude='.git' \ evalscope/ "$DOCKER_CTX/evalscope/" rsync -av --delete --exclude='*.log' --exclude='__pycache__' --exclude='.git' \ tools/tau2-bench/ "$DOCKER_CTX/tau2-bench/" # 2. 构建镜像 echo "" echo "==> 2. 构建 Docker 镜像" cd "$DOCKER_CTX" docker build -f Dockerfile.py312 -t "$IMAGE_TAG" . # 3. 保存镜像 echo "" echo "==> 3. 保存镜像到 $OUTPUT_TAR" docker save "$IMAGE_TAG" | gzip > "$OUTPUT_TAR" ls -lh "$OUTPUT_TAR" # 4. 生成 md5 echo "" echo "==> 4. 生成 md5" md5sum "$OUTPUT_TAR" > "$OUTPUT_TAR.md5" # 5. 上传到 ModelScope echo "" echo "==> 5. 上传到 ModelScope" modelscope upload \ --commit-message "Update evalscope-complete-py312 with torch (CPU) for tokenizer support" \ SoraAmami/evalscope-docker \ "$OUTPUT_TAR" echo "" echo "========================================" echo "构建并上传完成!" echo "镜像: $IMAGE_TAG" echo "本地 tar: $OUTPUT_TAR" echo "日志: $LOG_FILE" echo "========================================"