Add master-gitlab.sh

This commit is contained in:
HHF Technology 2024-11-24 19:01:50 +05:30
parent c78e558492
commit cd6d714bfa

190
master-gitlab.sh Normal file
View file

@ -0,0 +1,190 @@
#!/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="Cloudpanel Script Management Tool"
formatter_url="https://git.hhf.technology/hhf/script-management-cloudpanel/raw/branch/main/task_formatter.sh"
BRANCH="main"
forgejo_url="git.hhf.technology"
repo_owner="hhf"
repo_name="script-management-cloudpanel"
scriptname=$0
wget $formatter_url --no-check-certificate -O task_formatter.sh > /dev/null 2>&1
# Source the formatter script
source ./task_formatter.sh
# 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() {
if [ -f "task_formatter.sh" ]; then
rm -- "$0"
echo "Deleted master script..."
fi
if [ -f "task_formatter.sh" ]; then
rm task_formatter.sh
fi
}
# 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 and formatter
format_output remove_script "Cleaning up"
# Print final message
final_message "$this_script_name" $success
# Exit with appropriate status
exit $success