transmission-rss-manager/scripts/create-module-links.sh
MasterDraco 2dcd4becef Fix update functionality and improve documentation
- Fixed update detection in install scripts
- Added Git availability checks to update system
- Improved error handling for update endpoint
- Added detailed Git requirements to README
- Added troubleshooting section for update issues

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-10 16:57:47 +00:00

212 lines
7.7 KiB
Bash
Executable File

#!/bin/bash
# Script to create symlinks for all modules in different naming styles
# This ensures compatibility with different module import styles
APP_DIR="$(dirname "$(dirname "$(readlink -f "$0")")")"
MODULE_DIR="$APP_DIR/modules"
echo "Creating module symlinks for compatibility..."
echo "Module directory: $MODULE_DIR"
# Create a function to make bidirectional symlinks
create_module_symlinks() {
if [ ! -d "$MODULE_DIR" ]; then
echo "Error: Module directory not found at $MODULE_DIR"
mkdir -p "$MODULE_DIR"
echo "Created module directory: $MODULE_DIR"
fi
# Check if any .js files exist in the module directory
js_file_count=$(find "$MODULE_DIR" -maxdepth 1 -name "*.js" -type f | wc -l)
if [ "$js_file_count" -eq 0 ]; then
echo "Warning: No JavaScript module files found in $MODULE_DIR"
echo "Skipping symlink creation as there are no modules to link"
return 0
fi
# Create symlinks for hyphenated modules
for module in "$MODULE_DIR"/*-*.js; do
if [ -f "$module" ]; then
# Convert hyphenated to camelCase
BASE_NAME=$(basename "$module")
CAMEL_NAME=$(echo "$BASE_NAME" | sed -E 's/-([a-z])/\U\1/g')
# Create camelCase symlink if needed
if [ ! -f "$MODULE_DIR/$CAMEL_NAME" ] && [ ! -L "$MODULE_DIR/$CAMEL_NAME" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$CAMEL_NAME"; then
echo "Created symlink: $CAMEL_NAME -> $BASE_NAME"
else
echo "Error: Failed to create symlink $CAMEL_NAME"
fi
fi
# Create extension-less symlink for both versions
NO_EXT_BASE="${BASE_NAME%.js}"
if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ] && [ ! -L "$MODULE_DIR/$NO_EXT_BASE" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE"; then
echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME"
else
echo "Error: Failed to create symlink $NO_EXT_BASE"
fi
fi
NO_EXT_CAMEL="${CAMEL_NAME%.js}"
if [ ! -f "$MODULE_DIR/$NO_EXT_CAMEL" ] && [ ! -L "$MODULE_DIR/$NO_EXT_CAMEL" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_CAMEL"; then
echo "Created symlink: $NO_EXT_CAMEL -> $BASE_NAME"
else
echo "Error: Failed to create symlink $NO_EXT_CAMEL"
fi
fi
fi
done
# Create symlinks for camelCase modules (only non-symlinked files)
for module in "$MODULE_DIR"/[a-z]*[A-Z]*.js; do
if [ -f "$module" ] && [ ! -L "$module" ]; then
# Convert camelCase to hyphenated
BASE_NAME=$(basename "$module")
HYPHEN_NAME=$(echo "$BASE_NAME" | sed -E 's/([a-z])([A-Z])/\1-\L\2/g')
# Create hyphenated symlink if needed
if [ ! -f "$MODULE_DIR/$HYPHEN_NAME" ] && [ ! -L "$MODULE_DIR/$HYPHEN_NAME" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$HYPHEN_NAME"; then
echo "Created symlink: $HYPHEN_NAME -> $BASE_NAME"
else
echo "Error: Failed to create symlink $HYPHEN_NAME"
fi
fi
# Create extension-less symlink for both versions
NO_EXT_BASE="${BASE_NAME%.js}"
if [ ! -f "$MODULE_DIR/$NO_EXT_BASE" ] && [ ! -L "$MODULE_DIR/$NO_EXT_BASE" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_BASE"; then
echo "Created symlink: $NO_EXT_BASE -> $BASE_NAME"
else
echo "Error: Failed to create symlink $NO_EXT_BASE"
fi
fi
NO_EXT_HYPHEN="${HYPHEN_NAME%.js}"
if [ ! -f "$MODULE_DIR/$NO_EXT_HYPHEN" ] && [ ! -L "$MODULE_DIR/$NO_EXT_HYPHEN" ]; then
if ln -sf "$BASE_NAME" "$MODULE_DIR/$NO_EXT_HYPHEN"; then
echo "Created symlink: $NO_EXT_HYPHEN -> $BASE_NAME"
else
echo "Error: Failed to create symlink $NO_EXT_HYPHEN"
fi
fi
fi
done
echo "Module symlinks created successfully"
}
# Setup production directory if needed
setup_production_dir() {
# Check if this is running in development environment
DEV_DIR="/opt/develop/transmission-rss-manager"
# Check systemd service file to determine the correct production directory
PROD_DIR="/opt/transmission-rss-manager"
SERVICE_FILE="/etc/systemd/system/transmission-rss-manager.service"
if [ -f "$SERVICE_FILE" ]; then
# Extract the WorkingDirectory from the service file
WORKING_DIR=$(grep "WorkingDirectory=" "$SERVICE_FILE" | cut -d'=' -f2)
if [ -n "$WORKING_DIR" ]; then
PROD_DIR="$WORKING_DIR"
echo "Found production directory from service file: $PROD_DIR"
fi
fi
if [ "$APP_DIR" == "$DEV_DIR" ] && [ -d "$DEV_DIR" ]; then
echo "Setting up production directory symlinks at $PROD_DIR..."
# Create the production directory if it doesn't exist
if [ ! -d "$PROD_DIR" ]; then
if mkdir -p "$PROD_DIR"; then
echo "Created production directory: $PROD_DIR"
else
echo "Error: Failed to create production directory $PROD_DIR"
return 1
fi
fi
# Create the modules directory in production if it doesn't exist
if [ ! -d "$PROD_DIR/modules" ]; then
if mkdir -p "$PROD_DIR/modules"; then
echo "Created production modules directory: $PROD_DIR/modules"
else
echo "Error: Failed to create production modules directory"
return 1
fi
fi
# Check for JavaScript modules in dev directory
js_file_count=$(find "$MODULE_DIR" -maxdepth 1 -name "*.js" -type f | wc -l)
if [ "$js_file_count" -eq 0 ]; then
echo "Warning: No JavaScript module files found in $MODULE_DIR"
echo "Skipping production symlink creation"
else
# Create symlinks from development modules to production modules
for module in "$MODULE_DIR"/*.js; do
if [ -f "$module" ] && [ ! -L "$module" ]; then
MODULE_NAME=$(basename "$module")
# Create symlink in production directory
if ln -sf "$module" "$PROD_DIR/modules/$MODULE_NAME"; then
echo "Created production symlink: $PROD_DIR/modules/$MODULE_NAME -> $module"
else
echo "Error: Failed to create production symlink for $MODULE_NAME"
fi
fi
done
fi
# Copy server.js to production if it doesn't exist or needs updating
if [ -f "$DEV_DIR/server.js" ]; then
if [ ! -f "$PROD_DIR/server.js" ] || [ "$DEV_DIR/server.js" -nt "$PROD_DIR/server.js" ]; then
if cp "$DEV_DIR/server.js" "$PROD_DIR/server.js"; then
echo "Copied server.js to production directory"
else
echo "Error: Failed to copy server.js to production"
fi
fi
else
echo "Warning: server.js not found in development directory"
fi
# Create data directory in production if it doesn't exist
if mkdir -p "$PROD_DIR/data"; then
echo "Ensured data directory exists in production"
else
echo "Error: Failed to create production data directory"
fi
# Make sure scripts directory exists in production
if mkdir -p "$PROD_DIR/scripts"; then
echo "Ensured scripts directory exists in production"
else
echo "Error: Failed to create production scripts directory"
fi
# Copy test-and-start.sh to production
if [ -f "$DEV_DIR/scripts/test-and-start.sh" ]; then
if cp "$DEV_DIR/scripts/test-and-start.sh" "$PROD_DIR/scripts/test-and-start.sh"; then
chmod +x "$PROD_DIR/scripts/test-and-start.sh"
echo "Copied test-and-start.sh script to production"
else
echo "Error: Failed to copy test-and-start.sh to production"
fi
else
echo "Warning: test-and-start.sh not found in development scripts directory"
fi
echo "Production directory setup complete"
fi
}
# Execute the symlink creation function
create_module_symlinks
# Setup production directory if needed
setup_production_dir