-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.sh
More file actions
137 lines (119 loc) · 4.85 KB
/
Copy pathinit.sh
File metadata and controls
137 lines (119 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env bash
# OPPE 环境初始化脚本
# 用途:每次 Builder/QA 会话开始时运行,确认环境可用
# 用法:bash init.sh
set -e # 任何命令失败立即退出
echo "==============================="
echo " OPPE 环境初始化"
echo "==============================="
# ── 1. 检查 Node.js 版本 ──────────────────────────────
REQUIRED_NODE=18
CURRENT_NODE=$(node -v 2>/dev/null | sed 's/v//' | cut -d'.' -f1)
if [ -z "$CURRENT_NODE" ]; then
echo "❌ 未检测到 Node.js,请先安装 Node.js v${REQUIRED_NODE}+"
exit 1
fi
if [ "$CURRENT_NODE" -lt "$REQUIRED_NODE" ]; then
echo "❌ Node.js 版本过低(当前:$(node -v),需要 v${REQUIRED_NODE}+)"
exit 1
fi
echo "✅ Node.js $(node -v) | npm $(npm -v)"
# ── 2. 安装依赖 ───────────────────────────────────────
if [ ! -d "node_modules" ]; then
echo "📦 node_modules 不存在,正在安装依赖..."
npm install
echo "✅ 依赖安装完成"
else
echo "✅ 依赖已安装(node_modules 存在)"
fi
# ── 3. 检查 .env ────────────────────────────────
if [ ! -f ".env" ]; then
if [ ! -f ".env.example" ]; then
echo "❌ .env.example 不存在,请先创建再运行"
exit 1
fi
cp .env.example .env
# 自动生成 NEXTAUTH_SECRET(API key 加密必填)
SECRET=$(openssl rand -base64 32)
# 使用 python 替换(避免 sed 分隔符 / 与 base64 输出冲突)
python3 -c "
import re
with open('.env', 'r') as f:
content = f.read()
content = content.replace('NEXTAUTH_SECRET=<auto-generated>', 'NEXTAUTH_SECRET=${SECRET}')
with open('.env', 'w') as f:
f.write(content)
"
echo "✅ .env 已创建(NEXTAUTH_SECRET 自动生成)"
echo " API Key 请在登录后进入 /settings 页面配置"
else
echo "✅ .env 存在"
fi
# ── 4. 创建数据库目录 ─────────────────────────────────
mkdir -p db
echo "✅ db/ 目录就绪"
# ── 5. 生成 Prisma Client ─────────────────────────────
echo "🔧 生成 Prisma Client..."
if npx prisma generate 2>&1; then
echo "✅ Prisma Client 生成完成"
else
echo "❌ Prisma Client 生成失败,请检查 prisma/schema.prisma"
exit 1
fi
# ── 6. 运行数据库迁移 ─────────────────────────────────
echo "🗄️ 同步数据库..."
if npx prisma migrate deploy 2>/dev/null; then
echo "✅ 数据库迁移完成(deploy 模式)"
elif npx prisma db push 2>/dev/null; then
echo "✅ 数据库已同步(db push 模式,适用于首次运行)"
else
echo "⚠️ 数据库迁移跳过(首次运行或无迁移文件,属于正常情况)"
fi
# ── 7. TypeScript 类型检查 ────────────────────────────
echo "🔍 TypeScript 类型检查..."
if npx tsc --noEmit 2>&1; then
echo "✅ TypeScript 无类型错误"
else
echo "⚠️ TypeScript 有类型错误,Builder 需要修复后才能继续"
echo " 运行 npx tsc --noEmit 查看详情"
# 不退出,允许带类型错误启动开发服务器(常见于开发初期)
fi
# ── 8. 启动开发服务器并健康检查 ───────────────────────
echo "🚀 启动开发服务器..."
# 如果 3000 端口已被占用,说明服务器已在运行
if curl -s --max-time 2 http://localhost:3000 > /dev/null 2>&1; then
echo "✅ 服务器已在运行:http://localhost:3000"
else
# 后台启动开发服务器
npm run dev > /tmp/oppe-dev.log 2>&1 &
DEV_PID=$!
echo " 服务器 PID:$DEV_PID(日志:/tmp/oppe-dev.log)"
# 等待服务器就绪(最多 60 秒)
echo "⏳ 等待服务器就绪..."
ATTEMPTS=0
MAX_ATTEMPTS=60
while [ $ATTEMPTS -lt $MAX_ATTEMPTS ]; do
if curl -s --max-time 2 http://localhost:3000 > /dev/null 2>&1; then
echo "✅ 服务器就绪:http://localhost:3000"
break
fi
ATTEMPTS=$((ATTEMPTS + 1))
sleep 1
done
if [ $ATTEMPTS -eq $MAX_ATTEMPTS ]; then
echo "❌ 服务器启动超时(60 秒),请查看日志:"
echo " cat /tmp/oppe-dev.log"
kill $DEV_PID 2>/dev/null
exit 1
fi
fi
# ── 完成 ──────────────────────────────────────────────
echo ""
echo "==============================="
echo " ✅ 环境初始化完成"
echo "==============================="
echo " 访问地址:http://localhost:3000"
echo " 数据库 :./db/dev.db"
echo " 日志 :/tmp/oppe-dev.log"
echo ""
echo "Agent 可以开始工作了。"