update
This commit is contained in:
parent
22a25cd049
commit
09f0fd3658
1 changed files with 217 additions and 0 deletions
217
master-forgejo.sh
Normal file
217
master-forgejo.sh
Normal file
|
@ -0,0 +1,217 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Run this script with:
|
||||
# wget https://git.hhf.technology/hhf/script-management-cloudpanel/raw/branch/main/master.sh && sudo bash master.sh
|
||||
|
||||
# Variables for URLs and script info
|
||||
this_script_url="https://git.hhf.technology/hhf/script-management-cloudpanel/raw/branch/main/master.sh"
|
||||
this_script_name="HHF Script Management Tool"
|
||||
BRANCH="main"
|
||||
|
||||
forgejo_url="git.hhf.technology"
|
||||
repo_owner="hhf"
|
||||
repo_name="script-management-cloudpanel"
|
||||
|
||||
# Colors for output formatting
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_GREEN='\033[0;32m'
|
||||
COLOR_BLUE='\033[0;34m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Formatting functions
|
||||
print_header() {
|
||||
local script_name=$1
|
||||
local script_url=$2
|
||||
printf "\n${COLOR_GREEN}=== %s ===${COLOR_RESET}\n" "$script_name"
|
||||
printf "${COLOR_BLUE}Script URL: %s${COLOR_RESET}\n\n" "$script_url"
|
||||
}
|
||||
|
||||
format_output() {
|
||||
local func=$1
|
||||
local message=$2
|
||||
printf "${COLOR_BLUE}%s...${COLOR_RESET}\n" "$message"
|
||||
$func
|
||||
printf "${COLOR_GREEN}Done!${COLOR_RESET}\n"
|
||||
}
|
||||
|
||||
final_message() {
|
||||
local script_name=$1
|
||||
local success=$2
|
||||
if [ $success -eq 0 ]; then
|
||||
printf "\n${COLOR_GREEN}=== %s completed successfully ===${COLOR_RESET}\n" "$script_name"
|
||||
else
|
||||
printf "\n${COLOR_RED}=== %s failed with errors ===${COLOR_RESET}\n" "$script_name"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if the script is being run with sudo
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
ORIGINAL_USER=${SUDO_USER:-$(whoami)}
|
||||
else
|
||||
ORIGINAL_USER=$(whoami)
|
||||
fi
|
||||
|
||||
# Function to check and install sudo if not present
|
||||
install_sudo() {
|
||||
if ! command which sudo &> /dev/null; then
|
||||
echo "sudo is not installed. Installing sudo..."
|
||||
if [ -x "$(command -v apt-get)" ]; then
|
||||
apt-get update > /dev/null 2>&1 && apt-get install -y sudo > /dev/null 2>&1
|
||||
elif [ -x "$(command -v yum)" ]; then
|
||||
yum install -y sudo > /dev/null 2>&1
|
||||
else
|
||||
echo "Could not install sudo. Please install it manually."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check and install curl if not present
|
||||
install_curl() {
|
||||
if ! command -v curl &> /dev/null; then
|
||||
echo "curl is not installed. Installing curl..."
|
||||
if [ -x "$(command -v apt-get)" ]; then
|
||||
sudo apt-get update > /dev/null 2>&1 && sudo apt-get install -y curl > /dev/null 2>&1
|
||||
elif [ -x "$(command -v yum)" ]; then
|
||||
sudo yum install -y curl > /dev/null 2>&1
|
||||
else
|
||||
echo "Could not install curl. Please install it manually."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check and install jq if not present
|
||||
install_jq() {
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "jq is not installed. Installing jq..."
|
||||
if [ -x "$(command -v apt-get)" ]; then
|
||||
sudo apt-get update > /dev/null 2>&1 && sudo apt-get install -y jq > /dev/null 2>&1
|
||||
elif [ -x "$(command -v yum)" ]; then
|
||||
sudo yum install -y jq > /dev/null 2>&1
|
||||
else
|
||||
echo "Could not install jq. Please install it manually."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to clean up temporary files in /tmp
|
||||
cleanup_tmp_files() {
|
||||
echo "Cleaning up temporary files..."
|
||||
sudo rm -rf /tmp/$forgejo_url* > /dev/null 2>&1
|
||||
echo "Temporary files cleaned."
|
||||
}
|
||||
|
||||
remove_script() {
|
||||
rm -- "$0" 2>/dev/null
|
||||
}
|
||||
|
||||
# Function to fetch the list of scripts from the repository
|
||||
fetch_scripts() {
|
||||
# Forgejo/Gitea API endpoint for listing repository contents
|
||||
scripts_recursive=$(curl -k -s "https://$forgejo_url/api/v1/repos/$repo_owner/$repo_name/contents?ref=$BRANCH" | jq -r '.[] | select(.type == "file" and .name and (.name | type == "string") and (.name | endswith(".sh"))) | .path')
|
||||
echo "$scripts_recursive" | sort -u
|
||||
}
|
||||
|
||||
# Function to download and run a selected script
|
||||
run_script() {
|
||||
local script_path=$1
|
||||
local encoded_script_path=$(echo "$script_path" | sed 's/\//%2F/g')
|
||||
local script_name=$(basename "$script_path")
|
||||
local url="https://$forgejo_url/$repo_owner/$repo_name/raw/branch/$BRANCH/$script_path"
|
||||
|
||||
# If verbose mode, print the URL
|
||||
if [[ "$verbose" == "true" ]]; then
|
||||
echo "Requesting URL: $url"
|
||||
fi
|
||||
|
||||
# Create necessary directories for the script
|
||||
mkdir -p "/tmp/$(dirname "$script_path")"
|
||||
|
||||
# Make the request and capture the HTTP status code
|
||||
http_status=$(curl -k -sL -w "%{http_code}" -o "/tmp/$script_path" "$url")
|
||||
|
||||
# If verbose mode, print the HTTP status code
|
||||
if [[ "$verbose" == "true" ]]; then
|
||||
echo "Request completed with status code: $http_status"
|
||||
fi
|
||||
|
||||
if [[ "$http_status" == "200" ]]; then
|
||||
chmod +x "/tmp/$script_path"
|
||||
sudo bash "/tmp/$script_path" "$ORIGINAL_USER"
|
||||
else
|
||||
echo "Failed to download script: $script_name (HTTP status code: $http_status)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function to display the script selection menu and run the selected scripts
|
||||
run_scripts() {
|
||||
printf "${COLOR_GREEN}Fetching list of available scripts from Forgejo repository...${COLOR_RESET}\n"
|
||||
scripts=$(fetch_scripts)
|
||||
|
||||
if [ -z "$scripts" ]; then
|
||||
printf "${COLOR_RED}No scripts found in the repository.${COLOR_RESET}\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while true; do
|
||||
printf "${COLOR_BLUE}\nAvailable scripts:${COLOR_RESET}\n"
|
||||
select script in $scripts "Quit"; do
|
||||
if [ "$script" == "Quit" ]; then
|
||||
break 2
|
||||
elif [ -n "$script" ]; then
|
||||
printf "${COLOR_BLUE}You selected $script. Running script...${COLOR_RESET}\n"
|
||||
run_script "$script"
|
||||
break
|
||||
else
|
||||
printf "${COLOR_RED}Invalid selection. Please try again.${COLOR_RESET}\n"
|
||||
fi
|
||||
done
|
||||
|
||||
printf "${COLOR_BLUE}Would you like to run more scripts? (y/n)${COLOR_RESET}\n"
|
||||
read -r choice
|
||||
if [[ "$choice" != "y" ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Main script logic
|
||||
clear
|
||||
|
||||
# Check for verbose flag
|
||||
verbose="false"
|
||||
if [[ "$1" == "-v" ]]; then
|
||||
verbose="true"
|
||||
fi
|
||||
|
||||
# Print header
|
||||
print_header "$this_script_name" "$this_script_url"
|
||||
|
||||
# Initialize success flag
|
||||
success=0
|
||||
install_sudo
|
||||
install_curl
|
||||
install_jq
|
||||
run_scripts
|
||||
|
||||
# Cleanup created files
|
||||
cleanup_tmp_files
|
||||
|
||||
# Clean up the master script
|
||||
format_output remove_script "Cleaning up"
|
||||
|
||||
# Print final message
|
||||
final_message() {
|
||||
local script_name=$1
|
||||
local success=$2
|
||||
if [[ $success -eq 0 ]]; then
|
||||
log "${CHECK_MARK} $script_name completed successfully."
|
||||
else
|
||||
log "${CROSS_MARK} $script_name encountered errors."
|
||||
fi
|
||||
}
|
||||
|
||||
# Exit with appropriate status
|
||||
exit $success
|
Loading…
Reference in a new issue