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!"
|
|
|