#!/usr/bin/env bash # script_engine module build - four steps: # 1) install xls2ddl # 2) models/*.json -> mysql.ddl.sql (json2ddl) # 3) json/*.json -> generated CRUD UI (xls2ui) # 4) symlink module wwwroot into host app wwwroot set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" PYTHON="${PYTHON:-python3}" echo "[1/4] install xls2ddl..." pip install xls2ddl echo "[2/4] generate DDL from models/*.json..." if [ -d models ]; then $PYTHON -m xls2ddl.json2ddl mysql . > mysql.ddl.sql fi echo "[3/4] generate CRUD UI from json/*.json..." if [ -d json ]; then $PYTHON -m xls2ddl.xls2ui -m models -o wwwroot script_engine json/*.json fi echo "[4/4] symlink module wwwroot into host app wwwroot..." # locate host app wwwroot: prefer sibling app dir under the same workspace HOST_WWWROOT="" for candidate in \ "$SCRIPT_DIR/../../apps/yuanjing/wwwroot" \ "$SCRIPT_DIR/../../yuanjing/wwwroot" \ "$SCRIPT_DIR/../yuanjing/wwwroot" \ "$HOME/repos/yuanjing/wwwroot"; do if [ -d "$candidate" ]; then HOST_WWWROOT="$(cd "$candidate" && pwd)" break fi done if [ -n "$HOST_WWWROOT" ]; then mkdir -p "$HOST_WWWROOT/script_engine" ln -sfn "$SCRIPT_DIR/wwwroot" "$HOST_WWWROOT/script_engine" # link generated CRUD subdirs (script_engine_list) individually for sub in "$SCRIPT_DIR/wwwroot"/*/; do name="$(basename "$sub")" case "$name" in api|styles|scripts) continue ;; esac ln -sfn "$sub" "$HOST_WWWROOT/script_engine/$name" done echo "wwwroot linked to $HOST_WWWROOT/script_engine" else echo "WARN: host app wwwroot not found - skip symlink (deploy step will link)" fi echo "script_engine build done"