aidxnFUN/manage

353 lines
12 KiB
Plaintext
Raw Normal View History

2024-10-12 19:18:53 -04:00
#!/bin/bash
SC_VERSION=1.2.1
SC_CODENAME="bionic"
2024-10-21 20:47:48 -04:00
PORT=5566
2024-10-12 19:18:53 -04:00
SETUP_FILE=".setup_complete"
COLOR_RESET="\033[0m"
COLOR_GREEN="\033[1;32m"
COLOR_RED="\033[1;31m"
COLOR_YELLOW="\033[1;33m"
COLOR_BLUE="\033[1;34m"
COLOR_CYAN="\033[1;36m"
2024-10-12 19:18:53 -04:00
function install_tools() {
if ! command -v node &> /dev/null 2>&1; then
echo -e "${COLOR_RED}NodeJS is not installed. Installing now...${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 20.18.0
echo -e "\n${COLOR_GREEN}NodeJS installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}NodeJS is installed. Version: $(node -v)${COLOR_RESET}"
fi
if ! command -v nc &> /dev/null 2>&1; then
echo -e "${COLOR_RED}Netcat is not installed. Installing now...${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
sudo apt-get install netcat-traditional
echo -e "\n${COLOR_GREEN}Netcat installed successfully.${COLOR_RESET}\n"
else
echo -e "${COLOR_GREEN}Netcat is installed.${COLOR_RESET}"
fi
if ! command -v npm &> /dev/null 2>&1; then
echo -e "${COLOR_RED}NPM is not installed. Installing now...${COLOR_RESET}"
echo -e "${COLOR_YELLOW}You may need to enter your sudo password.${COLOR_RESET}\n"
sudo apt-get update
sudo apt-get install npm
if [ ! -f "config.json" ]; then
2024-10-15 19:34:38 -04:00
echo -e "${COLOR_BLUE}Copying config file...${COLOR_RESET}"
if [ ! -f "config.json.example" ]; then
2024-10-15 19:34:38 -04:00
echo "Couldn't find example config file"
else
2024-11-07 13:59:02 -05:00
cp config.json.example config.json
fi
else
2024-10-15 19:34:38 -04:00
echo -e "${COLOR_GREEN}config file already exists, skipping.${COLOR_RESET}"
fi
echo -e "${COLOR_BLUE}Installing NPM deps...${COLOR_RESET}"
2024-11-07 13:59:02 -05:00
npm install
echo -e "\n${COLOR_GREEN}NPM installed successfully.${COLOR_RESET}\n"
2024-10-12 19:18:53 -04:00
touch $SETUP_FILE
else
echo -e "${COLOR_GREEN}NPM is installed. Version: $(npm -v)${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
touch $SETUP_FILE
fi
}
function show_help() {
echo -e "${COLOR_GREEN}manage version:${COLOR_RESET} ${COLOR_BLUE}${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}"
echo -e "${COLOR_BLUE}Usage:${COLOR_RESET} ./manage [command]\n"
echo -e "${COLOR_YELLOW}Commands:${COLOR_RESET}"
echo -e " ${COLOR_CYAN}help, -h, --help${COLOR_RESET} Shows this help message."
echo -e " ${COLOR_CYAN}up${COLOR_RESET} Builds the project and starts the server."
echo -e " ${COLOR_CYAN}down${COLOR_RESET} Stops the server."
echo -e " ${COLOR_CYAN}restart${COLOR_RESET} Restarts the server."
echo -e " ${COLOR_CYAN}status, -s, --status${COLOR_RESET} Checks if the server is running.\n"
2024-10-12 19:18:53 -04:00
}
function check_dirs() {
local action=$1
local created_count=0
local deleted_count=0
2024-10-12 19:18:53 -04:00
if [ "$action" == "create" ]; then
for dir in "./public" "./public/js" "./public/css" "./public/pgp" "./src" "./src/css" "./src/img" "./src/js" "./src/pgp"; do
2024-10-12 19:18:53 -04:00
if [ ! -d "$dir" ]; then
echo -e "${COLOR_BLUE}Creating $dir...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
mkdir -p "$dir"
created_count=$((created_count + 1))
fi
done
if [ "$created_count" -gt 0 ]; then
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
elif [ "$action" == "delete" ]; then
if [ -d "./public" ]; then
echo -e "${COLOR_BLUE}Deleting public directory...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
rm -rf "./public"
deleted_count=$((deleted_count + 1))
fi
2024-10-12 19:18:53 -04:00
if [ "$deleted_count" -gt 0 ]; then
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
else
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
else
echo -e "${COLOR_RED}Invalid action: $action. Use 'create' or 'delete'.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
}
function restart_server() {
check_setup
2024-11-07 13:59:02 -05:00
if [ -d './public' ]; then
echo -e "${COLOR_BLUE}Deleting public directories...${COLOR_RESET}"
check_dirs "delete"
fi
2024-11-07 13:59:02 -05:00
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting old Tailwind CSS...${COLOR_RESET}"
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-11-07 13:59:02 -05:00
fi
2024-10-12 19:18:53 -04:00
2024-11-07 13:59:02 -05:00
PIDS=$(lsof -t -i:$PORT)
2024-11-07 13:59:02 -05:00
if [ -n "$PIDS" ]; then
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
for PID in $PIDS; do
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
done
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-11-07 13:59:02 -05:00
else
echo -e "${COLOR_YELLOW}No process found on port $PORT.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
2024-11-07 13:59:02 -05:00
echo -e "${COLOR_BLUE}Creating public directories...${COLOR_RESET}"
check_dirs "create"
echo -e "${COLOR_BLUE}Building project...${COLOR_RESET}"
if ! npm run build > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
exit 1
2024-10-15 17:06:26 -04:00
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
if [ -f './public/css/base.css' ]; then
echo -e "${COLOR_BLUE}Cleaning up base Tailwind CSS file...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
rm ./public/css/base.css
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}"
npm start > node.log 2>&1 &
2024-11-13 15:08:33 -05:00
for i in {1..10}; do
PIDS=$(lsof -t -i:$PORT)
if [ -n "$PIDS" ]; then
echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}"
break
else
echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT...${COLOR_RESET}"
sleep 1
fi
done
2024-11-07 13:59:02 -05:00
2024-11-13 15:08:33 -05:00
if [ -z "$PIDS" ]; then
2024-11-07 13:59:02 -05:00
echo -e "${COLOR_RED}Something went wrong... Check node.log for more details${COLOR_RESET} (no process on port)"
fi
2024-10-12 19:18:53 -04:00
}
function start_server() {
check_setup
PID=$(lsof -t -i:$PORT)
if [ -n "$PID" ]; then
2024-11-07 13:59:02 -05:00
echo -e "${COLOR_YELLOW}Server already running on port $PORT. Skipping server startup.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
return
fi
echo -e "${COLOR_BLUE}Creating public directories...${COLOR_RESET}"
check_dirs "create"
2024-10-12 19:18:53 -04:00
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting old Tailwind CSS...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
echo -e "${COLOR_BLUE}Building project...${COLOR_RESET}"
if ! npm run build > node.log 2>&1; then
echo -e "${COLOR_RED}Build failed. Please check for errors above.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
exit 1
2024-10-15 17:06:26 -04:00
else
echo -e "${COLOR_GREEN}Done!${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
if [ -f './public/css/base.css' ]; then
echo -e "${COLOR_BLUE}Cleaning up base Tailwind CSS file...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
rm ./public/css/base.css
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
echo -e "${COLOR_BLUE}Starting server...${COLOR_RESET}"
npm start > node.log 2>&1 &
2024-11-13 15:08:33 -05:00
for i in {1..10}; do
PIDS=$(lsof -t -i:$PORT)
if [ -n "$PIDS" ]; then
echo -e "${COLOR_GREEN}\nDone. Server up and running on port $PORT!\n${COLOR_RESET}"
break
else
echo -e "${COLOR_YELLOW}Waiting for server to start on port $PORT...${COLOR_RESET}"
sleep 1
fi
done
2024-11-07 13:59:02 -05:00
2024-11-13 15:08:33 -05:00
if [ -z "$PIDS" ]; then
2024-11-07 13:59:02 -05:00
echo -e "${COLOR_RED}Something went wrong... Check node.log for more details${COLOR_RESET} (no process on port)"
fi
2024-10-12 19:18:53 -04:00
}
function stop_server() {
check_setup
PID=$(lsof -t -i:$PORT)
if [ -d './public' ]; then
echo -e "${COLOR_BLUE}Deleting public directories...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
check_dirs "delete"
fi
if [ -f './src/css/main.css' ]; then
echo -e "${COLOR_BLUE}Deleting Tailwind CSS...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
rm ./src/css/main.css
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
fi
if [ -f './node.log' ]; then
echo -e "${COLOR_BLUE}Deleting node log...${COLOR_RESET}"
rm ./node.log
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
PIDS=$(lsof -t -i:$PORT)
if [ -n "$PIDS" ]; then
echo -e "${COLOR_BLUE}Stopping server...${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
for PID in $PIDS; do
kill "$PID" || echo -e "${COLOR_RED}Failed to kill PID: $PID${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
done
echo -e "${COLOR_GREEN}Done.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
else
echo -e "${COLOR_YELLOW}No process found on port $PORT.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
}
function check_status() {
check_setup
PID=$(lsof -t -i:$PORT)
if [ -n "$PID" ]; then
echo -e "${COLOR_GREEN}Server running with PID: $PID${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
else
echo -e "${COLOR_RED}Server not running.${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
fi
}
function setup() {
2024-10-12 19:18:53 -04:00
clear
echo -e "${COLOR_BLUE}Welcome to the aidxnFUN 'manage' script setup!\n${COLOR_RESET}${COLOR_CYAN}You are running manage ${SC_VERSION} ${SC_CODENAME}${COLOR_RESET}\n"
echo -e "${COLOR_GREEN}A custom script built by ihatenodejs${COLOR_RESET}"
echo -e "${COLOR_YELLOW}and presented by forkers like you...${COLOR_RESET}"
echo -e "\nPress any key to continue..."
read -n 1 -s -r -p ""
2024-10-12 19:18:53 -04:00
clear
2024-11-07 13:59:02 -05:00
echo -e "This script requires Node.js, NPM, and Netcat to be installed on your system."
echo "Please ensure you have these tools installed before proceeding."
echo -e "\nPress any key to continue with tool installation..."
read -n 1 -s -r -p ""
clear
2024-11-07 13:59:02 -05:00
2024-10-12 19:18:53 -04:00
install_tools
2024-10-12 21:43:41 -04:00
echo -e "\n${COLOR_GREEN}Dependancy installation complete!${COLOR_RESET}"
echo -e "\n${COLOR_BLUE}If you would like to view the install logs, please do so, or click [ENTER] to continue to the next step.${COLOR_RESET}\n"
read -n 1 -s -r -p ""
clear
echo -e "${COLOR_GREEN}Now, take a look at the commands you can use with this script:${COLOR_RESET}\n"
show_help
echo -e "\nPress any key to continue to the final step..."
read -n 1 -s -r -p ""
clear
2024-11-07 13:59:02 -05:00
echo -e "${COLOR_BLUE}Now, you may start the server with this command:${COLOR_RESET}"
echo -e "${COLOR_GREEN}./manage up${COLOR_RESET}\n"
echo -e "\n${COLOR_BLUE}If you need help, or to get info about other commands, simply use:${COLOR_RESET}"
echo -e "${COLOR_GREEN}./manage help${COLOR_RESET}"
echo -e "\nPress any key to complete the setup and exit..."
read -n 1 -s -r -p ""
clear
echo -e "${COLOR_GREEN}Thank you for using manage ${SC_VERSION} ${SC_CODENAME}!${COLOR_RESET}\n"
exit 0
2024-10-12 19:18:53 -04:00
}
function check_setup() {
if [ ! -f "$SETUP_FILE" ]; then
setup
2024-10-12 19:18:53 -04:00
fi
}
case $1 in
up)
check_setup
2024-10-12 19:18:53 -04:00
start_server
;;
down)
check_setup
2024-10-12 19:18:53 -04:00
stop_server
;;
restart)
check_setup
2024-10-12 19:18:53 -04:00
restart_server
;;
setup)
check_setup
;;
-h|--help|help)
check_setup
show_help
;;
-s|--status|status)
check_setup
check_status
2024-10-12 19:18:53 -04:00
;;
*)
check_setup
echo -e "${COLOR_RED}Invalid command: $1\n${COLOR_RESET}"
2024-10-12 19:18:53 -04:00
show_help
;;
esac