#!/usr/bin/env bash set -e cdir=$(cd "$(dirname "$0")" && pwd) cd "$cdir" echo "=== Pipeline App Build ===" # 1. Create venv if [ ! -d py3 ]; then python3 -m venv py3 fi source py3/bin/activate # 2. Install foundation packages (clone to pkgs) mkdir -p pkgs for m in apppublic sqlor ahserver bricks-for-python xls2ddl rbac appbase; do echo "install $m ..." cd "$cdir/pkgs" if [ ! -d "$m" ]; then git clone https://git.opencomputing.cn/yumoqing/$m || echo "SKIP: $m clone failed" fi if [ -d "$m" ]; then cd "$m" "$cdir/py3/bin/pip" install . 2>&1 | tail -1 fi cd "$cdir" done # 3. Build bricks frontend cd "$cdir/pkgs" if [ ! -d bricks ]; then git clone https://git.opencomputing.cn/yumoqing/bricks || true fi if [ ! -f bricks/dist/bricks.js ]; then mkdir -p bricks/dist if [ -d bricks/bricks ]; then cd bricks/bricks bash build.sh 2>&1 | tail -3 cd "$cdir/pkgs" fi fi # Link dist to wwwroot rm -rf "$cdir/wwwroot/bricks" 2>/dev/null ln -sf "$cdir/pkgs/bricks/dist" "$cdir/wwwroot/bricks" echo "bricks: $(readlink "$cdir/wwwroot/bricks")" # 4. Move local business modules into pkgs/ for mod in pipeline_core pipeline_ops pipeline_dist; do if [ -d "$mod" ]; then mv "$mod" "pkgs/$mod" fi done # 5. Install business modules (clone external, local already in pkgs) for mod in pipeline-sdlc showcase evaluate pipeline-service pipeline-task tenant; do cd "$cdir/pkgs" if [ ! -d "$mod" ]; then git clone https://git.opencomputing.cn/yumoqing/$mod || echo "SKIP: $mod" fi cd "$cdir" done # 6. pip install all modules from pkgs/ for mod in pipeline_core pipeline_ops pipeline_dist pipeline-sdlc showcase tenant; do if [ -d "pkgs/$mod" ]; then "$cdir/py3/bin/pip" install "pkgs/$mod/" 2>&1 | tail -1 fi done # 7. Regenerate CRUD from json for all pipeline modules for mod in pipeline_core pipeline_ops pipeline_dist pipeline-sdlc; do json_dir="pkgs/$mod/json" models_dir="pkgs/$mod/models" wwwroot_dir="pkgs/$mod/wwwroot" if [ -d "$json_dir" ] && ls "$json_dir"/*.json >/dev/null 2>&1; then cd "$json_dir" "$cdir/py3/bin/xls2ui" -m "../models" -o "../wwwroot" "$mod" *.json 2>&1 | grep -c 'handle' | xargs -I{} echo " xls2ui $mod: {} tables" cd "$cdir" fi done # 8. Link module wwwroot directories (symlinks from pkgs/) for mod in pipeline-sdlc showcase tenant pipeline_core pipeline_ops pipeline_dist appbase; do src="pkgs/$mod/wwwroot" dst="wwwroot/$mod" if [ -d "$src" ]; then rm -rf "$dst" 2>/dev/null ln -sf "../pkgs/$mod/wwwroot" "$dst" echo " wwwroot: $mod linked" fi done # pipeline_task has no separate module mkdir -p wwwroot/pipeline_task # 9. Sync password_key from Sage (not databases — those are app-specific) if [ -f /d/apitest/sage/conf/config.json ]; then python3 -c " import json cs=json.load(open('/d/apitest/sage/conf/config.json')) c=json.load(open('$cdir/conf/config.json')) c['password_key']=cs.get('password_key','') json.dump(c,open('$cdir/conf/config.json','w'),ensure_ascii=False,indent=2) print(' config: password_key synced') " fi # 10. Create runtime dirs mkdir -p "$cdir/logs" "$cdir/files" "$cdir/conf" # 6. Fix auto-assign created_by in CRUD dspys (xls2ui overwritten) for d in sd_projects sd_iterations; do for t in add update; do f="$cdir/wwwroot/pipeline-sdlc/$d/${t}_${d}.dspy" [ -f "$f" ] && grep -q 'created_by' "$f" || sed -i "s/ns\['org_id'\] = userorgid/ns['org_id'] = userorgid\nns['created_by'] = userorgid/" "$f" done done chmod +x "$cdir/start.sh" "$cdir/stop.sh" 2>/dev/null || true echo "=== Build complete ==="