diff --git a/changelog.md b/changelog.md index 938a855..fb41c35 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2025-03-25 - 2.4.8 - fix(installer) +Improve Git dependency handling and repository cloning in install.sh + +- Add explicit check for git installation and prompt the user interactively if git is missing. +- Auto-install git when '-y' flag is provided in non-interactive mode. +- Ensure proper cloning of the repository when running the installer outside the repo. + ## 2025-03-25 - 2.4.7 - fix(readme) Update installation instructions to combine download and execution into a single command for clarity diff --git a/install.sh b/install.sh index 22a6695..124d554 100644 --- a/install.sh +++ b/install.sh @@ -162,37 +162,37 @@ install_git() { INSTALL_DIR="/opt/nupst" REPO_URL="https://code.foss.global/serve.zone/nupst.git" -if [ $PIPED -eq 1 ]; then - echo "Installing NUPST from remote repository..." +# Check if git is installed - needed for both piped and direct execution +if ! command -v git &> /dev/null; then + echo "Git is required but not installed." - # Check if git is installed - if ! command -v git &> /dev/null; then - echo "Git is required but not installed." + if [ $AUTO_YES -eq 1 ]; then + echo "Auto-installing git (-y flag provided)..." + install_git + elif [ $INTERACTIVE -eq 1 ]; then + # If interactive and no -y flag, ask the user + echo "Would you like to install git now? (y/N): " + read -r install_git_prompt - if [ $AUTO_YES -eq 1 ]; then - echo "Auto-installing git (-y flag provided)..." + if [[ "$install_git_prompt" =~ ^[Yy]$ ]]; then install_git - elif [ $INTERACTIVE -eq 1 ]; then - # If interactive and no -y flag, ask the user - echo "Would you like to install git now? (y/N): " - read -r install_git_prompt - - if [[ "$install_git_prompt" =~ ^[Yy]$ ]]; then - install_git - else - echo "Git installation skipped. Please install git manually and run the installer again." - echo "Alternatively, you can run the installer with -y flag to automatically install git:" - echo " sudo bash install.sh -y" - exit 1 - fi else - # Non-interactive mode without -y flag - echo "Error: Git is required but not installed." - echo "In non-interactive mode, use -y flag to auto-install dependencies:" - echo " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- -y" + echo "Git installation skipped. Please install git manually and run the installer again." + echo "Alternatively, you can run the installer with -y flag to automatically install git:" + echo " sudo bash install.sh -y" exit 1 fi + else + # Non-interactive mode without -y flag + echo "Error: Git is required but not installed." + echo "In non-interactive mode, use -y flag to auto-install dependencies:" + echo " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- -y" + exit 1 fi +fi + +if [ $PIPED -eq 1 ]; then + echo "Installing NUPST from remote repository..." # Check if installation directory exists if [ -d "$INSTALL_DIR" ] && [ -d "$INSTALL_DIR/.git" ]; then @@ -235,12 +235,47 @@ if [ $PIPED -eq 1 ]; then # Set script directory to the cloned repo SCRIPT_DIR="$INSTALL_DIR" else - # Running directly from within the repo + # Running directly from within the repo or downloaded script SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + + # When running from a downloaded script in a different location + # we need to clone the repository first + if [ ! -f "$SCRIPT_DIR/setup.sh" ]; then + echo "Running installer from downloaded script outside repository." + echo "Will clone the repository to $INSTALL_DIR..." + + # Create installation directory if needed + if [ -d "$INSTALL_DIR" ]; then + echo "Removing previous installation at $INSTALL_DIR..." + rm -rf "$INSTALL_DIR" + fi + + mkdir -p "$INSTALL_DIR" + + # Clone the repository + echo "Cloning NUPST repository to $INSTALL_DIR..." + git clone --depth 1 $REPO_URL "$INSTALL_DIR" + + if [ $? -ne 0 ]; then + echo "Failed to clone repository. Please check your internet connection." + exit 1 + fi + + # Update script directory to use the cloned repo + SCRIPT_DIR="$INSTALL_DIR" + fi fi # Run setup script echo "Running setup script..." +if [ ! -f "$SCRIPT_DIR/setup.sh" ]; then + echo "ERROR: Setup script not found at $SCRIPT_DIR/setup.sh" + echo "Current directory: $(pwd)" + echo "Script directory: $SCRIPT_DIR" + ls -la "$SCRIPT_DIR" + exit 1 +fi + bash "$SCRIPT_DIR/setup.sh" # Install globally diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 6046d06..4be00eb 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/nupst', - version: '2.4.7', + version: '2.4.8', description: 'Node.js UPS Shutdown Tool for SNMP-enabled UPS devices' }