- 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>
212 lines
7.7 KiB
Bash
Executable File
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 |