punimtag/viewer-frontend/scripts/install-dependencies.sh
Tanya 67c1227b55
All checks were successful
CI / skip-ci-check (pull_request) Successful in 1m35s
CI / lint-and-type-check (pull_request) Successful in 2m11s
CI / python-lint (pull_request) Successful in 1m58s
CI / test-backend (pull_request) Successful in 3m57s
CI / build (pull_request) Successful in 4m41s
CI / secret-scanning (pull_request) Successful in 1m42s
CI / dependency-scan (pull_request) Successful in 1m41s
CI / sast-scan (pull_request) Successful in 2m46s
CI / workflow-summary (pull_request) Successful in 1m33s
chore: Add blank lines to improve readability in various files
This commit adds blank lines to the end of several files, including pytest.ini, README.md, and various scripts in the viewer-frontend. These changes enhance the readability and maintainability of the codebase by ensuring consistent formatting.
2026-01-12 11:36:29 -05:00

209 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# Install Dependencies Script
# This script installs all required dependencies for the PunimTag Photo Viewer
# including npm packages, system dependencies, and Prisma clients
set -e # Exit on error
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_DIR"
echo "🚀 Installing PunimTag Photo Viewer Dependencies"
echo "================================================"
echo ""
# Check Node.js version
echo "📋 Checking Node.js version..."
NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 20 ]; then
echo "⚠️ Warning: Node.js 20+ is recommended (found v$NODE_VERSION)"
echo " Consider upgrading: nvm install 20 && nvm use 20"
read -p "Continue anyway? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
else
echo "✅ Node.js version: $(node --version)"
fi
echo ""
# Check for system dependencies
echo "📦 Checking system dependencies..."
MISSING_DEPS=()
# Check for libvips (optional but recommended)
if ! command -v vips &> /dev/null && ! dpkg -l | grep -q libvips-dev; then
echo "⚠️ libvips-dev not found (optional, for image watermarking)"
MISSING_DEPS+=("libvips-dev")
fi
# Check for FFmpeg (optional)
if ! command -v ffmpeg &> /dev/null; then
echo "⚠️ FFmpeg not found (optional, for video thumbnails)"
MISSING_DEPS+=("ffmpeg")
fi
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
echo ""
echo "Optional system dependencies not installed:"
for dep in "${MISSING_DEPS[@]}"; do
echo " - $dep"
done
echo ""
read -p "Install optional dependencies? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Installing system dependencies..."
if command -v apt-get &> /dev/null; then
sudo apt-get update
for dep in "${MISSING_DEPS[@]}"; do
if [ "$dep" = "libvips-dev" ]; then
sudo apt-get install -y libvips-dev
elif [ "$dep" = "ffmpeg" ]; then
sudo apt-get install -y ffmpeg
fi
done
elif command -v brew &> /dev/null; then
for dep in "${MISSING_DEPS[@]}"; do
if [ "$dep" = "libvips-dev" ]; then
brew install vips
elif [ "$dep" = "ffmpeg" ]; then
brew install ffmpeg
fi
done
else
echo "⚠️ Please install dependencies manually for your system"
fi
fi
else
echo "✅ All system dependencies found"
fi
echo ""
# Install npm dependencies
echo "📦 Installing npm dependencies..."
npm install
echo "✅ npm dependencies installed"
echo ""
# Install build tools for Sharp (if needed)
if [ -d "node_modules/sharp" ]; then
echo "🔧 Setting up Sharp image processing library..."
# Check if Sharp can load
if node -e "try { require('sharp'); console.log('OK'); } catch(e) { console.log('FAIL'); process.exit(1); }" 2>/dev/null; then
echo "✅ Sharp is working correctly"
else
echo "⚠️ Sharp needs additional setup..."
# Install build dependencies if not present
if ! npm list node-gyp &> /dev/null; then
echo " Installing node-gyp..."
npm install --save-dev node-gyp
fi
if ! npm list node-addon-api &> /dev/null; then
echo " Installing node-addon-api..."
npm install --save-dev node-addon-api
fi
# Try to rebuild Sharp
echo " Attempting to rebuild Sharp..."
npm rebuild sharp || echo " ⚠️ Sharp rebuild failed, but wrapper script will handle library path"
fi
echo ""
fi
# Verify Sharp wrapper script exists
if [ ! -f "scripts/with-sharp-libpath.sh" ]; then
echo "📝 Creating Sharp library path wrapper script..."
cat > scripts/with-sharp-libpath.sh << 'EOF'
#!/bin/bash
# Helper script to set LD_LIBRARY_PATH for Sharp before running commands
# This ensures Sharp can find its bundled libvips library
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
SHARP_LIB_PATH="$PROJECT_DIR/node_modules/sharp/node_modules/@img/sharp-libvips-linux-x64/lib"
if [ -d "$SHARP_LIB_PATH" ]; then
export LD_LIBRARY_PATH="$SHARP_LIB_PATH:${LD_LIBRARY_PATH:-}"
exec "$@"
else
echo "Warning: Sharp libvips library not found at $SHARP_LIB_PATH"
echo "Sharp image processing may not work correctly."
exec "$@"
fi
EOF
chmod +x scripts/with-sharp-libpath.sh
echo "✅ Sharp wrapper script created"
echo ""
fi
# Generate Prisma clients
echo "🔧 Generating Prisma clients..."
if [ -f "prisma/schema.prisma" ]; then
npm run prisma:generate
echo "✅ Main Prisma client generated"
else
echo "⚠️ prisma/schema.prisma not found, skipping Prisma generation"
fi
if [ -f "prisma/schema-auth.prisma" ]; then
npm run prisma:generate:auth
echo "✅ Auth Prisma client generated"
fi
echo ""
# Check for .env file
if [ ! -f ".env" ]; then
echo "⚠️ .env file not found"
echo " Please create a .env file with the following variables:"
echo " - DATABASE_URL"
echo " - DATABASE_URL_AUTH (optional)"
echo " - NEXTAUTH_SECRET"
echo " - NEXTAUTH_URL"
echo ""
else
echo "✅ .env file found"
fi
echo ""
# Test Sharp if available
echo "🧪 Testing Sharp library..."
if node -e "
const path = require('path');
const libPath = path.join(__dirname, 'node_modules/sharp/node_modules/@img/sharp-libvips-linux-x64/lib');
process.env.LD_LIBRARY_PATH = libPath + ':' + (process.env.LD_LIBRARY_PATH || '');
try {
const sharp = require('sharp');
console.log('✅ Sharp loaded successfully');
console.log(' Version:', require('sharp/package.json').version);
console.log(' libvips:', sharp.versions.vips);
} catch(e) {
console.log('⚠️ Sharp not available:', e.message.split('\n')[0]);
console.log(' Image watermarking will be disabled');
console.log(' The wrapper script will handle this at runtime');
}
" 2>/dev/null; then
echo ""
else
echo "⚠️ Sharp test failed, but wrapper script will handle it at runtime"
echo ""
fi
echo "================================================"
echo "✅ Dependency installation complete!"
echo ""
echo "Next steps:"
echo "1. Configure your .env file with database connection strings"
echo "2. Run 'npm run dev' to start the development server"
echo "3. Run 'npm run check:permissions' to verify database access"
echo ""