chore: optimize cms startup, refactor scripts and implement real-time dev mode
This commit is contained in:
27
scripts/cms-up.sh
Executable file
27
scripts/cms-up.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Configuration
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
echo "🚀 Starting CMS infrastructure..."
|
||||
|
||||
# 1. Build extensions (pass all arguments to handle flags like --link)
|
||||
"$SCRIPT_DIR/sync-extensions.sh" "$@"
|
||||
|
||||
# Filter out --link before passing to docker compose
|
||||
DOCKER_ARGS=()
|
||||
for arg in "$@"; do
|
||||
if [ "$arg" != "--link" ]; then
|
||||
DOCKER_ARGS+=("$arg")
|
||||
fi
|
||||
done
|
||||
|
||||
# 2. Docker compose up with arguments
|
||||
cd "$REPO_ROOT/packages/cms-infra"
|
||||
docker compose up -d "${DOCKER_ARGS[@]}"
|
||||
|
||||
# 3. Apply core patch
|
||||
"$SCRIPT_DIR/patch-cms.sh"
|
||||
|
||||
echo "✨ CMS is up and patched!"
|
||||
66
scripts/patch-cms.sh
Executable file
66
scripts/patch-cms.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Configuration
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
# Define potential container names
|
||||
CONTAINERS=("cms-infra-infra-cms-1" "at-mintel-directus-1")
|
||||
|
||||
echo "🔧 Checking for Directus containers to patch..."
|
||||
|
||||
for CONTAINER in "${CONTAINERS[@]}"; do
|
||||
# Check if container exists and is running
|
||||
if [ "$(docker ps -q -f name=^/${CONTAINER}$)" ]; then
|
||||
echo "🔧 Applying core patch to Directus container: $CONTAINER..."
|
||||
docker exec "$CONTAINER" node -e '
|
||||
const fs = require("node:fs");
|
||||
// Try multiple potential paths for the node_modules location
|
||||
const searchPaths = [
|
||||
"/directus/node_modules/.pnpm/@directus+extensions@file+packages+extensions_deep-diff@1.0.2_express@4.21.2_graphql@16_244b87fbecd929c2d2240e7b3abc1fe4/node_modules/@directus/extensions/dist/node.js",
|
||||
"/directus/node_modules/@directus/extensions/dist/node.js"
|
||||
];
|
||||
|
||||
let targetPath = null;
|
||||
for (const p of searchPaths) {
|
||||
if (fs.existsSync(p)) {
|
||||
targetPath = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (targetPath) {
|
||||
let content = fs.readFileSync(targetPath, "utf8");
|
||||
|
||||
// Patch the filter: allow string entrypoints for modules
|
||||
const filterPatch = "extension.host === \"app\" && (extension.entrypoint.app || extension.entrypoint)";
|
||||
if (!content.includes(filterPatch)) {
|
||||
content = content.replace(
|
||||
/extension\.host === \"app\" && !!extension\.entrypoint\.app/g,
|
||||
filterPatch
|
||||
);
|
||||
}
|
||||
|
||||
// Patch all imports: handle string entrypoints
|
||||
if (!content.includes("(extension.entrypoint.app || extension.entrypoint)")) {
|
||||
content = content.replace(
|
||||
/extension\.entrypoint\.app/g,
|
||||
"(extension.entrypoint.app || extension.entrypoint)"
|
||||
);
|
||||
}
|
||||
|
||||
fs.writeFileSync(targetPath, content);
|
||||
console.log(`✅ Core patched successfully at ${targetPath}.`);
|
||||
} else {
|
||||
console.error("⚠️ Could not find @directus/extensions node.js to patch!");
|
||||
}
|
||||
'
|
||||
|
||||
echo "🔄 Restarting Directus container: $CONTAINER..."
|
||||
docker restart "$CONTAINER"
|
||||
else
|
||||
echo "ℹ️ Container $CONTAINER is not running or not found. Skipping patch."
|
||||
fi
|
||||
done
|
||||
|
||||
echo "✨ Patching process finished."
|
||||
@@ -22,6 +22,14 @@ EXTENSION_PACKAGES=(
|
||||
"unified-dashboard"
|
||||
)
|
||||
|
||||
# Parse flags
|
||||
LINK_MODE=false
|
||||
for arg in "$@"; do
|
||||
if [ "$arg" == "--link" ]; then
|
||||
LINK_MODE=true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "🚀 Starting isolated extension sync..."
|
||||
|
||||
# Ensure target directories exist
|
||||
@@ -59,13 +67,22 @@ for PKG in "${EXTENSION_PACKAGES[@]}"; do
|
||||
rm -rf "${FINAL_TARGET:?}"/*
|
||||
|
||||
# Copy build artifacts
|
||||
if [ -f "$PKG_PATH/dist/index.js" ]; then
|
||||
cp "$PKG_PATH/dist/index.js" "$FINAL_TARGET/index.js"
|
||||
elif [ -f "$PKG_PATH/index.js" ]; then
|
||||
cp "$PKG_PATH/index.js" "$FINAL_TARGET/index.js"
|
||||
if [ "$LINK_MODE" = true ]; then
|
||||
if [ -f "$PKG_PATH/dist/index.js" ]; then
|
||||
ln -sf "$PKG_PATH/dist/index.js" "$FINAL_TARGET/index.js"
|
||||
elif [ -f "$PKG_PATH/index.js" ]; then
|
||||
ln -sf "$PKG_PATH/index.js" "$FINAL_TARGET/index.js"
|
||||
fi
|
||||
else
|
||||
if [ -f "$PKG_PATH/dist/index.js" ]; then
|
||||
cp "$PKG_PATH/dist/index.js" "$FINAL_TARGET/index.js"
|
||||
elif [ -f "$PKG_PATH/index.js" ]; then
|
||||
cp "$PKG_PATH/index.js" "$FINAL_TARGET/index.js"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f "$PKG_PATH/package.json" ]; then
|
||||
# We ALWAYS copy and patch package.json to avoid messing with source
|
||||
cp "$PKG_PATH/package.json" "$FINAL_TARGET/"
|
||||
# We force the registration path to index.js and ensure host/source are set
|
||||
node -e "
|
||||
@@ -88,7 +105,11 @@ for PKG in "${EXTENSION_PACKAGES[@]}"; do
|
||||
fi
|
||||
|
||||
if [ -d "$PKG_PATH/dist" ]; then
|
||||
cp -r "$PKG_PATH/dist" "$FINAL_TARGET/"
|
||||
if [ "$LINK_MODE" = true ]; then
|
||||
ln -sf "$PKG_PATH/dist" "$FINAL_TARGET/dist"
|
||||
else
|
||||
cp -r "$PKG_PATH/dist" "$FINAL_TARGET/"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -118,38 +139,7 @@ for TARGET_BASE in "${TARGET_DIRS[@]}"; do
|
||||
done
|
||||
done
|
||||
|
||||
echo "🔧 Applying core patch to Directus 11.15.2 bundler..."
|
||||
docker exec cms-infra-infra-cms-1 node -e '
|
||||
const fs = require("node:fs");
|
||||
const path = "/directus/node_modules/.pnpm/@directus+extensions@file+packages+extensions_deep-diff@1.0.2_express@4.21.2_graphql@16_244b87fbecd929c2d2240e7b3abc1fe4/node_modules/@directus/extensions/dist/node.js";
|
||||
if (fs.existsSync(path)) {
|
||||
let content = fs.readFileSync(path, "utf8");
|
||||
|
||||
// Patch the filter: allow string entrypoints for modules
|
||||
const filterPatch = "extension.host === \"app\" && (extension.entrypoint.app || extension.entrypoint)";
|
||||
if (!content.includes(filterPatch)) {
|
||||
content = content.replace(
|
||||
/extension\.host === \"app\" && !!extension\.entrypoint\.app/g,
|
||||
filterPatch
|
||||
);
|
||||
}
|
||||
# Container patching is now handled by scripts/patch-cms.sh
|
||||
# which should be run AFTER the containers are up.
|
||||
|
||||
// Patch all imports: handle string entrypoints (replace all occurrences of .app where it might fail)
|
||||
if (!content.includes("(extension.entrypoint.app || extension.entrypoint)")) {
|
||||
content = content.replace(
|
||||
/extension\.entrypoint\.app/g,
|
||||
"(extension.entrypoint.app || extension.entrypoint)"
|
||||
);
|
||||
}
|
||||
|
||||
fs.writeFileSync(path, content);
|
||||
console.log("✅ Core patched successfully.");
|
||||
} else {
|
||||
console.error("⚠️ Could not find node.js to patch!");
|
||||
}
|
||||
'
|
||||
|
||||
echo "🔄 Restarting Directus container..."
|
||||
docker restart cms-infra-infra-cms-1 2>/dev/null || true
|
||||
|
||||
echo "✨ Sync complete! Extensions are in packages/cms-infra/extensions and core is patched."
|
||||
echo "✨ Sync complete! Extensions are in packages/cms-infra/extensions."
|
||||
|
||||
Reference in New Issue
Block a user