script_engine/build.sh

57 lines
1.7 KiB
Bash

#!/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"