mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-05-15 19:05:30 -04:00
Merge pull request #425 from lanedirt/424-make-installsh-be-able-to-update-itself
Update install.sh with self-update support
This commit is contained in:
115
install.sh
115
install.sh
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
# @version 0.8.1
|
||||
|
||||
# Repository information used for downloading files and images from GitHub
|
||||
REPO_OWNER="lanedirt"
|
||||
@@ -22,7 +23,6 @@ REQUIRED_DIRS=(
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
MAGENTA='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
@@ -891,6 +891,9 @@ handle_update() {
|
||||
printf "${YELLOW}+++ Checking for AliasVault updates +++${NC}\n"
|
||||
printf "\n"
|
||||
|
||||
# First check for install.sh updates
|
||||
check_install_script_update || true
|
||||
|
||||
# Check current version
|
||||
if ! grep -q "^ALIASVAULT_VERSION=" "$ENV_FILE"; then
|
||||
printf "${YELLOW}> No version information found. Running first-time update check...${NC}\n"
|
||||
@@ -934,6 +937,116 @@ handle_update() {
|
||||
printf "${GREEN}> Update completed successfully!${NC}\n"
|
||||
}
|
||||
|
||||
# Function to extract version
|
||||
extract_version() {
|
||||
local file="$1"
|
||||
local version=$(head -n 2 "$file" | grep '@version' | cut -d' ' -f3)
|
||||
echo "$version"
|
||||
}
|
||||
|
||||
# Function to compare semantic versions
|
||||
compare_versions() {
|
||||
local version1="$1"
|
||||
local version2="$2"
|
||||
|
||||
# Split versions into arrays
|
||||
IFS='.' read -ra v1_parts <<< "$version1"
|
||||
IFS='.' read -ra v2_parts <<< "$version2"
|
||||
|
||||
# Compare each part numerically
|
||||
for i in {0..2}; do
|
||||
# Default to 0 if part doesn't exist
|
||||
local v1_part=${v1_parts[$i]:-0}
|
||||
local v2_part=${v2_parts[$i]:-0}
|
||||
|
||||
# Compare numerically
|
||||
if [ "$v1_part" -gt "$v2_part" ]; then
|
||||
echo "1" # version1 is greater
|
||||
return
|
||||
elif [ "$v1_part" -lt "$v2_part" ]; then
|
||||
echo "-1" # version1 is lesser
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
echo "0" # versions are equal
|
||||
}
|
||||
|
||||
# Function to check if install.sh needs updating
|
||||
check_install_script_update() {
|
||||
printf "${CYAN}> Checking for install script updates...${NC}\n"
|
||||
|
||||
# Download latest install.sh to temporary file
|
||||
if ! curl -sSf "${GITHUB_RAW_URL}/install.sh" -o "install.sh.tmp"; then
|
||||
printf "${RED}> Failed to check for install script updates. Continuing with current version.${NC}\n"
|
||||
rm -f install.sh.tmp
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get versions
|
||||
local current_version=$(extract_version "install.sh")
|
||||
local new_version=$(extract_version "install.sh.tmp")
|
||||
|
||||
# Check if versions could be extracted
|
||||
if [ -z "$current_version" ] || [ -z "$new_version" ]; then
|
||||
printf "${YELLOW}> Could not determine script versions. Falling back to file comparison...${NC}\n"
|
||||
# Fall back to file comparison
|
||||
if ! cmp -s "install.sh" "install.sh.tmp"; then
|
||||
printf "${YELLOW}> Changes detected in install script.${NC}\n"
|
||||
else
|
||||
printf "${GREEN}> Install script is up to date.${NC}\n"
|
||||
rm -f install.sh.tmp
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
printf "${CYAN}> Current version: ${current_version}${NC}\n"
|
||||
printf "${CYAN}> Latest version: ${new_version}${NC}\n"
|
||||
|
||||
# Compare versions using semver comparison
|
||||
if [ "$current_version" = "$new_version" ]; then
|
||||
printf "${GREEN}> Install script is up to date.${NC}\n"
|
||||
rm -f install.sh.tmp
|
||||
return 0
|
||||
else
|
||||
local compare_result=$(compare_versions "$current_version" "$new_version")
|
||||
|
||||
if [ "$compare_result" -ge "0" ]; then
|
||||
printf "${GREEN}> Install script is up to date.${NC}\n"
|
||||
rm -f install.sh.tmp
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# If we get here, an update is available
|
||||
printf "${YELLOW}> A new version of the install script is available.${NC}\n"
|
||||
printf "Would you like to update the install script before proceeding? [Y/n]: "
|
||||
read -r reply
|
||||
|
||||
if [[ ! $reply =~ ^[Nn]$ ]]; then
|
||||
# Create backup of current script
|
||||
cp "install.sh" "install.sh.backup"
|
||||
|
||||
if mv "install.sh.tmp" "install.sh"; then
|
||||
chmod +x "install.sh"
|
||||
printf "${GREEN}> Install script updated successfully.${NC}\n"
|
||||
printf "${GREEN}> Backup of previous version saved as install.sh.backup${NC}\n"
|
||||
printf "${YELLOW}> Please run the update command again to continue with the update process.${NC}\n"
|
||||
exit 0
|
||||
else
|
||||
printf "${RED}> Failed to update install script. Continuing with current version.${NC}\n"
|
||||
# Restore from backup if update failed
|
||||
mv "install.sh.backup" "install.sh"
|
||||
rm -f install.sh.tmp
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
printf "${YELLOW}> Continuing with current install script version.${NC}\n"
|
||||
rm -f install.sh.tmp
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to perform the actual installation with specific version
|
||||
handle_install_version() {
|
||||
local target_version="$1"
|
||||
|
||||
Reference in New Issue
Block a user