Files
trading_assistant/init_api_bak/init_monorepo.sh
2026-02-06 15:51:22 +08:00

118 lines
4.2 KiB
Bash
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
set -euo pipefail
# 脚本编码设置,避免中文乱码
export LANG=C.UTF-8
# 配置项(可按需修改)
PROJECT_NAME="code"
PYTHON_IMAGE="python:3.11-alpine" # 轻量Python3镜像仅80+MB
PYTHON_SCRIPT="init_monorepo.py"
# 颜色输出函数(增强可读性)
red() { echo -e "\033[31m$1\033[0m"; }
green() { echo -e "\033[32m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }
blue() { echo -e "\033[34m$1\033[0m"; }
# 第一步检查Docker环境是否安装
check_docker() {
blue "===== 1. 检测Docker环境 ====="
if ! command -v docker &> /dev/null; then
red "❌ 错误本地未安装Docker请先安装Docker后再执行"
red "Docker官方安装地址https://docs.docker.com/get-docker/"
exit 1
fi
# 检查Docker守护进程是否运行
if ! docker info &> /dev/null; then
red "❌ 错误Docker守护进程未启动请先启动Docker服务"
exit 1
fi
green "✅ Docker环境检测通过版本$(docker --version | awk '{print $3}' | sed 's/,//g')"
}
# 第二步检查Python脚本是否存在
check_script() {
blue -e "\n===== 2. 检测${PYTHON_SCRIPT}脚本 ====="
if [ ! -f "${PYTHON_SCRIPT}" ]; then
red "❌ 错误:当前目录未找到${PYTHON_SCRIPT}文件!"
red "请确保${PYTHON_SCRIPT}与本sh脚本在同一目录下"
exit 1
fi
green "${PYTHON_SCRIPT}脚本检测通过"
}
# 第三步拉取Python镜像若本地无
pull_python_image() {
blue -e "\n===== 3. 检查Python3镜像 ====="
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${PYTHON_IMAGE}$"; then
green "✅ 本地已存在${PYTHON_IMAGE}镜像,无需拉取"
else
yellow "⚠️ 本地无${PYTHON_IMAGE}镜像开始拉取轻量镜像仅80+MB耗时约10s"
docker pull "${PYTHON_IMAGE}"
green "${PYTHON_IMAGE}镜像拉取完成"
fi
}
# 第四步创建临时Python容器执行初始化脚本
run_python_container() {
blue -e "\n===== 4. 启动临时Python容器执行初始化 ====="
yellow "⚠️ 正在生成${PROJECT_NAME}基础结构,文件将保存在当前目录..."
# 核心docker run命令
# --rm执行完成后自动销毁容器
# -v $(pwd):/app将本地当前目录挂载到容器内/app目录
# -w /app设置容器工作目录为/app与本地挂载目录一致
# ${PYTHON_IMAGE}使用的Python镜像
# python3 ${PYTHON_SCRIPT}在容器内执行Python脚本
docker run --rm \
-v "$(pwd)":/app \
-w /app \
--name "tmp-go-monorepo-init" \
"${PYTHON_IMAGE}" \
python3 "${PYTHON_SCRIPT}"
# 检查脚本执行结果
if [ -d "${PROJECT_NAME}" ]; then
green -e "\n✅ 容器执行完成!${PROJECT_NAME}基础结构已生成在当前目录"
else
red "❌ 容器执行失败,未生成${PROJECT_NAME}目录,请检查日志!"
exit 1
fi
}
# 第五步:权限修复(解决容器生成文件的权限问题)
fix_permission() {
blue -e "\n===== 5. 修复文件目录权限 ====="
# 容器内生成的文件可能属于root用户修复为当前用户权限
if [ -d "${PROJECT_NAME}" ] && [ "$(id -u)" -ne 0 ]; then
sudo chown -R "$(id -u)":"$(id -g)" "${PROJECT_NAME}" 2>/dev/null || true
chmod +x "${PROJECT_NAME}/Makefile" 2>/dev/null || true
green "✅ 目录权限修复完成,当前用户可正常操作${PROJECT_NAME}内文件"
else
yellow "⚠️ 无需修复权限当前为root用户或目录不存在"
fi
}
# 主执行流程
main() {
clear
blue "====================================================="
blue " Go Monorepo 容器化初始化脚本"
blue " 无本地Python环境依赖 · 仅需Docker"
blue "====================================================="
echo ""
check_docker
check_script
pull_python_image
run_python_container
fix_permission
echo ""
green "🎉 所有操作完成!"
green "👉 下一步操作cd ${PROJECT_NAME} && make go-init"
echo ""
}
# 执行主函数
main