diff --git a/deploy.sh b/deploy.sh index 08a5263..cbb8227 100755 --- a/deploy.sh +++ b/deploy.sh @@ -39,45 +39,104 @@ run_as_user() { check_node_env() { echo "🔍 Checking Node.js environment..." - # Check if npm/node are available in original user's environment - if run_as_user "command -v npm" &> /dev/null && run_as_user "command -v node" &> /dev/null; then - NPM_VERSION=$(run_as_user "npm --version") - NODE_VERSION=$(run_as_user "node --version") - echo "✅ npm found: $NPM_VERSION" - echo "✅ Node.js found: $NODE_VERSION" - return 0 - fi - - # Check common nvm installation paths - NVM_PATHS=( - "$ORIGINAL_HOME/.nvm/versions/node/*/bin" - "$ORIGINAL_HOME/.volta/bin" - "/usr/local/bin" - "/usr/bin" - ) - - for nvm_path in "${NVM_PATHS[@]}"; do - if [ -d "$nvm_path" ] && [ -x "$nvm_path/npm" ] && [ -x "$nvm_path/node" ]; then - echo "✅ Found Node.js in: $nvm_path" - export PATH="$nvm_path:$PATH" - NPM_VERSION=$("$nvm_path/npm" --version) - NODE_VERSION=$("$nvm_path/node" --version) + # First, try to source nvm and check + if [ "$ORIGINAL_USER" != "root" ]; then + echo "🔍 Checking user environment for nvm..." + + # Try to source nvm and check npm/node + if sudo -u "$ORIGINAL_USER" -i bash -c " + # Source nvm if it exists + [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' + [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + [ -s '$ORIGINAL_HOME/.profile' ] && source '$ORIGINAL_HOME/.profile' + + # Check if npm and node are available + command -v npm &> /dev/null && command -v node &> /dev/null + "; then + # Get versions using the same approach + NPM_VERSION=$(sudo -u "$ORIGINAL_USER" -i bash -c " + [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' + [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + npm --version 2>/dev/null || echo 'unknown' + ") + NODE_VERSION=$(sudo -u "$ORIGINAL_USER" -i bash -c " + [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' + [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + node --version 2>/dev/null || echo 'unknown' + ") echo "✅ npm found: $NPM_VERSION" echo "✅ Node.js found: $NODE_VERSION" return 0 fi + fi + + # Fallback: Check specific nvm paths directly + echo "🔍 Checking nvm installation paths..." + NVM_DIRS=$(find "$ORIGINAL_HOME/.nvm/versions/node" -name "bin" -type d 2>/dev/null | head -5) + + for nvm_bin in $NVM_DIRS; do + if [ -x "$nvm_bin/npm" ] && [ -x "$nvm_bin/node" ]; then + echo "✅ Found Node.js in: $nvm_bin" + NPM_VERSION=$("$nvm_bin/npm" --version 2>/dev/null || echo "unknown") + NODE_VERSION=$("$nvm_bin/node" --version 2>/dev/null || echo "unknown") + echo "✅ npm found: $NPM_VERSION" + echo "✅ Node.js found: $NODE_VERSION" + + # Set PATH for the rest of the script + export PATH="$nvm_bin:$PATH" + return 0 + fi done - echo "❌ Error: npm/node not found in user environment" + # Check system-wide installation + echo "🔍 Checking system-wide installation..." + if command -v npm &> /dev/null && command -v node &> /dev/null; then + NPM_VERSION=$(npm --version) + NODE_VERSION=$(node --version) + echo "✅ npm found (system): $NPM_VERSION" + echo "✅ Node.js found (system): $NODE_VERSION" + return 0 + fi + + echo "❌ Error: npm/node not found in any location" + echo "" + echo "🔍 Checked locations:" + echo " - User environment with nvm sourcing" + echo " - $ORIGINAL_HOME/.nvm/versions/node/*/bin" + echo " - System PATH: /usr/local/bin, /usr/bin" echo "" echo "💡 Solutions:" - echo " 1. Run 'npm run build' as user first, then run this script" - echo " 2. Install Node.js system-wide" - echo " 3. Or run: cd '$PWD' && npm run build && sudo ./deploy.sh" + echo " 1. Build first: npm run build (as $ORIGINAL_USER)" + echo " 2. Then run: sudo ./deploy.sh" + echo " 3. Or install Node.js system-wide: curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs" echo "" return 1 } +# Enhanced build function +build_application() { + echo "📦 Building application as user $ORIGINAL_USER..." + + # Use nvm-aware build command + if sudo -u "$ORIGINAL_USER" -i bash -c " + cd '$PWD' + + # Source nvm if available + [ -s '$ORIGINAL_HOME/.nvm/nvm.sh' ] && source '$ORIGINAL_HOME/.nvm/nvm.sh' + [ -s '$ORIGINAL_HOME/.bashrc' ] && source '$ORIGINAL_HOME/.bashrc' + + # Run build + npm run build + "; then + echo "✅ Build completed successfully" + return 0 + else + echo "❌ Error: Build failed" + echo "💡 Try running manually: npm run build" + return 1 + fi +} + # Check Node.js environment if ! check_node_env; then exit 1 @@ -85,24 +144,17 @@ fi # Check if dist directory exists or can be built if [ ! -d "dist" ]; then - echo "📦 Building application as user $ORIGINAL_USER..." - if ! run_as_user "npm run build"; then - echo "❌ Error: Build failed" - echo "💡 Try running: npm run build (as user) before deployment" + if ! build_application; then exit 1 fi - echo "✅ Build completed successfully" else echo "📦 Found existing dist/ directory" read -p "🤔 Rebuild application? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then - echo "📦 Rebuilding application as user $ORIGINAL_USER..." - if ! run_as_user "npm run build"; then - echo "❌ Error: Rebuild failed" + if ! build_application; then exit 1 fi - echo "✅ Rebuild completed successfully" else echo "📦 Using existing build" fi