build: enhance Dockerfiles and entrypoints for project builds

This commit is contained in:
Melvin Chia
2026-01-18 21:18:54 +08:00
parent 3e5e1a5c30
commit 7e05e83aa5
6 changed files with 76 additions and 53 deletions

View File

@@ -8,49 +8,25 @@ until wget -q --spider http://db:8090/api/health 2>/dev/null; do
done
echo "PocketBase is ready!"
# Create symlinks for server path aliases so modules can resolve @functions/*, @lib/*, etc.
mkdir -p /lifeforge/node_modules
ln -sf /lifeforge/server/src/core/functions /lifeforge/node_modules/@functions
ln -sf /lifeforge/server/src/lib /lifeforge/node_modules/@lib
ln -sf /lifeforge/server/src/core /lifeforge/node_modules/@core
ln -sf /lifeforge/server/src/core/constants.ts /lifeforge/node_modules/@constants
ln -sf /lifeforge/server/src/core/schema /lifeforge/node_modules/@schema
# Create symlinks for externalized dependencies
mkdir -p /lifeforge/node_modules/@lifeforge
# Symlink shared package
ln -sf /lifeforge/shared /lifeforge/node_modules/shared
# Install module-specific dependencies (skip workspace deps that fail)
echo "Installing module dependencies..."
for dir in /lifeforge/apps/*/; do
if [ -f "${dir}package.json" ]; then
modname=$(basename "$dir")
# Only install if node_modules doesn't exist or is empty
if [ ! -d "${dir}node_modules" ] || [ -z "$(ls -A ${dir}node_modules 2>/dev/null)" ]; then
echo "Installing deps for $modname..."
# Create temp package.json without workspace deps, install, then restore
cd "$dir"
if [ -f package.json ]; then
# Remove workspace deps before install
bun -e "
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'));
const original = JSON.stringify(pkg, null, 2);
fs.writeFileSync('package.json.bak', original);
if (pkg.dependencies) {
for (const [k,v] of Object.entries(pkg.dependencies)) {
if (v.startsWith('workspace:')) delete pkg.dependencies[k];
}
}
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
" 2>/dev/null || true
bun install --production 2>/dev/null || true
# Restore original package.json
if [ -f package.json.bak ]; then
mv package.json.bak package.json
fi
fi
fi
fi
done
echo "Module dependencies installed."
# Symlink @lifeforge/log (required by server-utils)
ln -sf /lifeforge/packages/lifeforge-log /lifeforge/node_modules/@lifeforge/log
# Symlink @lifeforge/server-utils (required by module bundles)
ln -sf /lifeforge/packages/lifeforge-server-utils /lifeforge/node_modules/@lifeforge/server-utils
# Check if modules are mounted
if [ -d "/lifeforge/apps" ] && [ "$(ls -A /lifeforge/apps 2>/dev/null)" ]; then
module_count=$(ls -d /lifeforge/apps/*/ 2>/dev/null | wc -l | tr -d ' ')
echo "Found $module_count module(s) mounted at /lifeforge/apps"
else
echo "No modules mounted. Mount modules to /lifeforge/apps to enable them."
fi
echo "Starting server..."
cd /lifeforge/server