Files
nextcloud-nodered-woocommerce/integrate-into-nodered.sh
T

139 lines
4.8 KiB
Bash
Raw Normal View History

2026-10-14 23:18:22 +02:00
#!/usr/bin/env bash
set -euo pipefail
# Integration script for node-red-contrib-nextcloud-woocommerce
# Patches woocommerce nodes into existing nextcloud-node-red Docker image
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGE_NAME="node-red-contrib-nextcloud-woocommerce"
# Auto-detect Node-RED directory
if [[ -z "${NODERED_DIR:-}" ]]; then
for dir in \
"/opt/nextcloud-node-red" \
"/home/ncdeploy/nextcloud-node-red" \
"/root/nextcloud-node-red" \
"$(dirname "$SCRIPT_DIR")/nextcloud-node-red" \
"$(docker inspect -f '{{.Config.Labels}}' nextcloud-node-red 2>/dev/null | grep -o 'com.docker.compose.project.working_dir=[^ ]*' | cut -d= -f2)"; do
if [[ -n "$dir" && -d "$dir" && -f "$dir/Dockerfile" ]]; then
NODERED_DIR="$dir"
break
fi
done
fi
if [[ -z "${NODERED_DIR:-}" ]] || [[ ! -d "$NODERED_DIR" ]]; then
echo "ERROR: Could not auto-detect nextcloud-node-red directory."
echo "Set NODERED_DIR environment variable."
exit 1
fi
if [[ ! -f "$NODERED_DIR/Dockerfile" ]]; then
echo "ERROR: No Dockerfile found in $NODERED_DIR"
exit 1
fi
echo "=== Nextcloud WooCommerce Node-RED Integration ==="
echo "Source: $SCRIPT_DIR"
echo "Target: $NODERED_DIR"
# 1. Copy nodes to nextcloud-node-red nodes subdirectory
NODES_TARGET="$NODERED_DIR/nodes/$PACKAGE_NAME"
echo "[integrate] Copying woocommerce nodes to $NODES_TARGET..."
mkdir -p "$NODES_TARGET"
cp "$SCRIPT_DIR/nodes"/*.js "$NODES_TARGET/"
cp "$SCRIPT_DIR/nodes"/*.html "$NODES_TARGET/"
cp "$SCRIPT_DIR/nodes/package.json" "$NODES_TARGET/"
echo " Nodes copied."
# 2. Patch Dockerfile to COPY woocommerce nodes into /opt
DOCKERFILE="$NODERED_DIR/Dockerfile"
echo "[integrate] Patching Dockerfile..."
if grep -q "$PACKAGE_NAME" "$DOCKERFILE"; then
echo " Dockerfile already contains $PACKAGE_NAME"
else
cp "$DOCKERFILE" "$DOCKERFILE.bak.$(date +%s)"
sed -i '/^COPY nodes\//a\
RUN mkdir -p /opt/nextcloud-nodes/'"$PACKAGE_NAME"'\
COPY nodes/'"$PACKAGE_NAME"' /opt/nextcloud-nodes/'"$PACKAGE_NAME"'\
2026-10-14 23:18:22 +02:00
' "$DOCKERFILE"
echo " Dockerfile patched with COPY for $PACKAGE_NAME."
fi
# 3. Patch entrypoint.sh to install woocommerce nodes at container start
ENTRYPOINT="$NODERED_DIR/entrypoint.sh"
echo "[integrate] Patching entrypoint.sh..."
if [[ -f "$ENTRYPOINT" ]]; then
cp "$ENTRYPOINT" "$ENTRYPOINT.bak.$(date +%s)"
if ! grep -q "$PACKAGE_NAME" "$ENTRYPOINT"; then
PATCH_TMP=$(mktemp)
cat > "$PATCH_TMP" << 'PATCH_EOF'
2026-10-14 23:18:22 +02:00
# --- node-red-contrib-nextcloud-woocommerce ---
SRC_WC="/opt/nextcloud-nodes/node-red-contrib-nextcloud-woocommerce"
DST_WC="/data/node_modules/node-red-contrib-nextcloud-woocommerce"
if [ -d "$SRC_WC" ]; then
echo "[entrypoint] Installing woocommerce nodes into /data..."
mkdir -p /data/node_modules
rm -rf "$DST_WC"
cp -a "$SRC_WC" /data/node_modules/
chown -R node-red:node-red "$DST_WC" 2>/dev/null || true
chmod -R a+rX "$DST_WC" 2>/dev/null || true
fi
2026-10-14 23:18:22 +02:00
PATCH_EOF
awk -v patchfile="$PATCH_TMP" '
/^exec/ && !done { while ((getline line < patchfile) > 0) print line; close(patchfile); done=1 }
{ print }
' "$ENTRYPOINT" > "$ENTRYPOINT.tmp" && mv "$ENTRYPOINT.tmp" "$ENTRYPOINT"
rm -f "$PATCH_TMP"
echo " entrypoint.sh patched (inserted before exec)."
2026-10-14 23:18:22 +02:00
else
echo " entrypoint.sh already contains $PACKAGE_NAME."
fi
else
echo " WARNING: entrypoint.sh not found at $ENTRYPOINT"
fi
# 4. Create woocommerce nodes package in /opt for entrypoint to copy
OPT_NODES_DIR="$NODERED_DIR/opt/nextcloud-nodes"
echo "[integrate] Creating woocommerce nodes package in $OPT_NODES_DIR..."
mkdir -p "$OPT_NODES_DIR/$PACKAGE_NAME/nodes"
cp "$SCRIPT_DIR/nodes"/*.js "$OPT_NODES_DIR/$PACKAGE_NAME/nodes/"
cp "$SCRIPT_DIR/nodes"/*.html "$OPT_NODES_DIR/$PACKAGE_NAME/nodes/"
cp "$SCRIPT_DIR/nodes/package.json" "$OPT_NODES_DIR/$PACKAGE_NAME/package.json"
echo " Package created."
# 5. Verify docker-compose.yml has port 1880 mapping
COMPOSE="$NODERED_DIR/docker-compose.yml"
if [[ -f "$COMPOSE" ]]; then
echo "[integrate] Checking docker-compose.yml for port 1880..."
if ! grep -q "1880:1880" "$COMPOSE"; then
cp "$COMPOSE" "$COMPOSE.bak.$(date +%s)"
sed -i '/ports:/a\ - "1880:1880"' "$COMPOSE"
echo " Added 1880:1880 port mapping."
else
echo " Port 1880 mapping already present."
fi
fi
2026-10-14 23:18:22 +02:00
echo ""
echo "=== Integration Complete ==="
echo ""
echo "Next steps:"
echo "1. Rebuild the Docker image:"
echo " cd $NODERED_DIR && docker compose build --no-cache"
echo ""
echo "2. Restart the container:"
echo " docker compose up -d"
echo ""
echo "3. In Node-RED, configure a 'woocommerce config' node with your Consumer Key + Secret."
echo ""
echo "4. Import example flows from: $SCRIPT_DIR/flows/"