#!/usr/bin/env bash # script_engine 模块构建脚本 —— 四步安装(由宿主应用 build.sh 集成调用) # ① 安装生成工具 ② 生成 DDL ③ 生成 CRUD UI ④ 链接 wwwroot set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MODULE="script_engine" echo "[$MODULE] ==== Step 1/4: 安装生成工具 xls2ddl ====" if ! command -v json2ddl >/dev/null 2>&1 || ! command -v xls2ui >/dev/null 2>&1; then pip install xls2ddl >/dev/null 2>&1 || echo "[$MODULE] 警告: xls2ddl 安装失败(宿主已装则忽略)" fi echo "[$MODULE] ==== Step 2/4: 生成 DDL ====" if [ -d "$SCRIPT_DIR/models" ]; then if command -v json2ddl >/dev/null 2>&1; then json2ddl mysql "$SCRIPT_DIR/models" > "$SCRIPT_DIR/models/mysql.ddl.sql" echo "[$MODULE] DDL 已生成: models/mysql.ddl.sql" else echo "[$MODULE] 警告: json2ddl 不可用,跳过 DDL 生成" fi fi echo "[$MODULE] ==== Step 3/4: 生成 CRUD UI ====" if [ -d "$SCRIPT_DIR/json" ]; then if command -v xls2ui >/dev/null 2>&1; then (cd "$SCRIPT_DIR" && xls2ui -m models -o wwwroot "$MODULE" json/*.json) echo "[$MODULE] CRUD UI 已生成: wwwroot/$MODULE/" else echo "[$MODULE] 警告: xls2ui 不可用,跳过 CRUD UI 生成" fi fi echo "[$MODULE] ==== Step 4/4: 链接 wwwroot 到宿主 ====" SAGE_ROOT="" for candidate in "$SCRIPT_DIR/../.." "$HOME/repos/sage" "$HOME/sage"; do if [ -d "$candidate/wwwroot" ] && [ -d "$candidate/py3/bin" ]; then SAGE_ROOT="$(cd "$candidate" && pwd)" break fi done if [ -n "$SAGE_ROOT" ]; then mkdir -p "$SAGE_ROOT/wwwroot/$MODULE/api" ln -sfn "$SCRIPT_DIR/wwwroot/index.ui" "$SAGE_ROOT/wwwroot/$MODULE/index.ui" for f in "$SCRIPT_DIR"/wwwroot/api/*.dspy; do [ -f "$f" ] && ln -sfn "$f" "$SAGE_ROOT/wwwroot/$MODULE/api/$(basename "$f")" done for d in "$SCRIPT_DIR"/wwwroot/*/; do [ -d "$d" ] || continue name="$(basename "$d")" case "$name" in api|styles|scripts) continue ;; esac ln -sfn "$d" "$SAGE_ROOT/wwwroot/$MODULE/$name" done echo "[$MODULE] wwwroot 已链接到 $SAGE_ROOT/wwwroot/$MODULE" else echo "[$MODULE] 未找到宿主 wwwroot,跳过链接" fi echo "[$MODULE] ==== build.sh 四步安装完成 ===="