pbls/build.sh

69 lines
3.1 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
# pbls 一键部署web-application-spec 8 步;端口 9300 来源 projects/pbls/env/test.json
set -euo pipefail
cdir=$(cd "$(dirname "$0")" && pwd)
APP=pbls
PORT=${PORT:-9300}
DB_HOST=127.0.0.1; DB_PORT=3306; DB_USER=test; DB_PASS=test123; DB_NAME=pbl
ENV_JSON="$cdir/../../projects/pbls/env/test.json"
[ -f "$ENV_JSON" ] && PORT=$(python3 -c "import json;print(json.load(open('$ENV_JSON'))['port'])")
echo "[build] app=$APP port=$PORT (env source: $ENV_JSON)"
mkdir -p "$cdir/pkgs" "$cdir/logs" "$cdir/files"
# 1) 基础包 + 依赖
pip install -q -r "$cdir/requirements.txt" || echo "[warn] pip requirements 需离线源,跳过"
# 2) 模块 clone + 安装(基础模块 + 复用基座 + 12 个 pbl_*
MODULES="world scene entity script_engine scense scense_game scense_runtime \
pbl_common pbl_appcodes pbl_blueprint pbl_validation pbl_compiler pbl_agent_runtime \
pbl_evidence pbl_assessment pbl_kdb_ext pbl_domain_ext pbl_scense_ext pbl_runtime_ext"
for m in $MODULES; do
src="$cdir/../../modules/$m"
[ -d "$src" ] || { echo "[skip] module $m 不存在"; continue; }
[ -d "$cdir/pkgs/$m" ] || cp -r "$src" "$cdir/pkgs/$m"
if [ -f "$cdir/pkgs/$m/pyproject.toml" ]; then
pip install -q -e "$cdir/pkgs/$m" || echo "[warn] pip install -e $m 失败,回退 PYTHONPATH"
fi
export PYTHONPATH="$cdir/pkgs:$PYTHONPATH"
# 3) wwwroot 软链(非 cp保持同步
ln -sfn "$cdir/pkgs/$m/wwwroot" "$cdir/wwwroot/$m"
# 5) 建表models/*.json → DDLjson2ddl与 apps/pbls/scripts/ddl 同源
if [ -d "$cdir/pkgs/$m/models" ]; then
( cd "$cdir/pkgs/$m/models" && json2ddl mysql . > mysql.ddl.sql 2>/dev/null || true )
[ -s "$cdir/pkgs/$m/models/mysql.ddl.sql" ] && \
mysql -h "$DB_HOST" -P "$DB_PORT" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" \
< "$cdir/pkgs/$m/models/mysql.ddl.sql" || echo "[warn] DDL 执行跳过($m"
fi
# 6) CRUD 生成json/*.json → .dspy + .ui
if [ -d "$cdir/pkgs/$m/json" ]; then
( cd "$cdir/pkgs/$m/json" && xls2ui -m ../models -o ../wwwroot "$m" *.json 2>/dev/null || true )
fi
# 7) 初始化数据appcodes 等种子)
[ -f "$cdir/pkgs/$m/init/data.json" ] && echo "[info] $m 有 init/data.json由 load_$m() 幂等注入"
# 8) RBAC 路径注册
[ -f "$cdir/pkgs/$m/scripts/load_path.py" ] && \
python3 "$cdir/pkgs/$m/scripts/load_path.py" || echo "[warn] $m rbac 注册跳过"
done
# 4) i18n 合并
python3 "$cdir/scripts/merge_i18n.py" 2>/dev/null || echo "[info] i18n 合并跳过"
# 兜底建表36 表MariaDB 方言,幂等 CREATE TABLE IF NOT EXISTS
bash "$cdir/scripts/apply_ddl.sh" || echo "[warn] apply_ddl 跳过(离线/无库)"
# bricks 前端
[ -d "$cdir/pkgs/bricks/dist" ] && ln -sfn "$cdir/pkgs/bricks/dist" "$cdir/wwwroot/bricks"
# 启动/停止脚本
cat > "$cdir/start.sh" <<EOF
#!/bin/bash
cd "$cdir" && PYTHONPATH="$cdir/pkgs:\$PYTHONPATH" python3 app/$APP.py >> logs/$APP.out 2>&1 &
echo \$! > $APP.pid
EOF
cat > "$cdir/stop.sh" <<EOF
#!/bin/bash
cd "$cdir" && [ -f $APP.pid ] && kill \$(cat $APP.pid) && rm -f $APP.pid
EOF
chmod +x "$cdir/start.sh" "$cdir/stop.sh"
echo "[build] done. start: ./start.sh port: $PORT"