You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							108 lines
						
					
					
						
							3.7 KiB
						
					
					
				
								#!/bin/bash
							 | 
						|
								
							 | 
						|
								# Copyright (c) 2024, crasowas.
							 | 
						|
								#
							 | 
						|
								# Use of this source code is governed by a MIT-style license
							 | 
						|
								# that can be found in the LICENSE file or at
							 | 
						|
								# https://opensource.org/licenses/MIT.
							 | 
						|
								
							 | 
						|
								set -e
							 | 
						|
								
							 | 
						|
								# Absolute path of the script and the tool's root directory
							 | 
						|
								script_path="$(realpath "$0")"
							 | 
						|
								tool_root_path="$(dirname "$script_path")"
							 | 
						|
								
							 | 
						|
								# Repository details
							 | 
						|
								readonly REPO_OWNER="crasowas"
							 | 
						|
								readonly REPO_NAME="app_privacy_manifest_fixer"
							 | 
						|
								
							 | 
						|
								# URL to fetch the latest release information
							 | 
						|
								readonly LATEST_RELEASE_URL="https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest"
							 | 
						|
								
							 | 
						|
								# Fetch the release information from GitHub API
							 | 
						|
								release_info=$(curl -s "$LATEST_RELEASE_URL")
							 | 
						|
								
							 | 
						|
								# Extract the latest release version, download URL, and published time
							 | 
						|
								latest_version=$(echo "$release_info" | grep -o '"tag_name": "[^"]*' | sed 's/"tag_name": "//')
							 | 
						|
								download_url=$(echo "$release_info" | grep -o '"zipball_url": "[^"]*' | sed 's/"zipball_url": "//')
							 | 
						|
								published_time=$(echo "$release_info" | grep -o '"published_at": "[^"]*' | sed 's/"published_at": "//')
							 | 
						|
								
							 | 
						|
								# Ensure the latest version, download URL, and published time are successfully retrieved
							 | 
						|
								if [ -z "$latest_version" ] || [ -z "$download_url" ]  || [ -z "$published_time" ]; then
							 | 
						|
								    echo "Unable to fetch the latest release information."
							 | 
						|
								    echo "Request URL: $LATEST_RELEASE_URL"
							 | 
						|
								    echo "Response Data: $release_info"
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Convert UTC time to local time
							 | 
						|
								published_time=$(TZ=UTC date -j -f "%Y-%m-%dT%H:%M:%SZ" "$published_time" +"%s" | xargs -I{} date -j -r {} +"%Y-%m-%d %H:%M:%S %z")
							 | 
						|
								
							 | 
						|
								# Read the current tool's version from the VERSION file
							 | 
						|
								tool_version_file="$tool_root_path/VERSION"
							 | 
						|
								if [ ! -f "$tool_version_file" ]; then
							 | 
						|
								    echo "VERSION file not found."
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								local_version="$(cat "$tool_version_file")"
							 | 
						|
								
							 | 
						|
								# Skip upgrade if the current version is already the latest
							 | 
						|
								if [ "$local_version" == "$latest_version" ]; then
							 | 
						|
								    echo "Version $latest_version • $published_time"
							 | 
						|
								    echo "Already up-to-date."
							 | 
						|
								    exit 0
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Create a temporary directory for downloading the release
							 | 
						|
								temp_dir=$(mktemp -d)
							 | 
						|
								trap "rm -rf $temp_dir" EXIT
							 | 
						|
								
							 | 
						|
								download_file_name="latest-release.tar.gz"
							 | 
						|
								
							 | 
						|
								# Download the latest release archive
							 | 
						|
								echo "Downloading version $latest_version..."
							 | 
						|
								curl -L "$download_url" -o "$temp_dir/$download_file_name"
							 | 
						|
								
							 | 
						|
								# Check if the download was successful
							 | 
						|
								if [ $? -ne 0 ]; then
							 | 
						|
								    echo "Download failed, please check your network connection and try again."
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Extract the downloaded release archive
							 | 
						|
								echo "Extracting files..."
							 | 
						|
								tar -xzf "$temp_dir/$download_file_name" -C "$temp_dir"
							 | 
						|
								
							 | 
						|
								# Find the extracted release
							 | 
						|
								extracted_release_path=$(find "$temp_dir" -mindepth 1 -maxdepth 1 -type d -name "*$REPO_NAME*" | head -n 1)
							 | 
						|
								
							 | 
						|
								# Verify that an extracted release was found
							 | 
						|
								if [ -z "$extracted_release_path" ]; then
							 | 
						|
								    echo "No extracted release found for the latest version."
							 | 
						|
								    exit 1
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								user_templates_dir="$tool_root_path/Templates/UserTemplates"
							 | 
						|
								user_templates_backup_dir="$temp_dir/Templates/UserTemplates"
							 | 
						|
								
							 | 
						|
								# Backup the user templates directory if it exists
							 | 
						|
								if [ -d "$user_templates_dir" ]; then
							 | 
						|
								    echo "Backing up user templates..."
							 | 
						|
								    mkdir -p "$user_templates_backup_dir"
							 | 
						|
								    rsync -a --exclude='.*' "$user_templates_dir/" "$user_templates_backup_dir/"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Replace old version files with the new version files
							 | 
						|
								echo "Replacing old version files..."
							 | 
						|
								rsync -a --delete "$extracted_release_path/" "$tool_root_path/"
							 | 
						|
								
							 | 
						|
								# Restore the user templates from the backup
							 | 
						|
								if [ -d "$user_templates_backup_dir" ]; then
							 | 
						|
								    echo "Restoring user templates..."
							 | 
						|
								    rsync -a --exclude='.*' "$user_templates_backup_dir/" "$user_templates_dir/"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Upgrade complete
							 | 
						|
								echo "Version $latest_version • $published_time"
							 | 
						|
								echo "Upgrade completed successfully!"
							 | 
						|
								
							 |