Borealis/Launch-Borealis.sh

211 lines
6.8 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#////////// PROJECT FILE SEPARATION LINE ////////// CODE AFTER THIS LINE ARE FROM: <ProjectRoot>/Launch-Borealis.sh
#!/usr/bin/env bash
# --------------------------------------------------------------------
# Deploy Borealis - Workflow Automation Tool
#
# Menu-driven launcher for:
# [1] Borealis Web Dashboard (Server)
# [2] Borealis Client Agent (Agent)
# --------------------------------------------------------------------
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
RESET="\033[0m"
CHECKMARK="✅"
HOURGLASS="⏳"
CROSSMARK="❌"
INFO=""
run_step() {
local message="$1"
shift
echo -ne "${HOURGLASS} ${message}... "
if "$@"; then
echo -e "\r${CHECKMARK} ${message}"
else
echo -e "\r${CROSSMARK} ${message} - Failed${RESET}"
exit 1
fi
}
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO_ID=$ID
else
DISTRO_ID="unknown"
fi
echo -e "${INFO} Detected OS: ${DISTRO_ID}"
}
install_core_dependencies() {
case "$DISTRO_ID" in
ubuntu|debian)
sudo apt update -qq
sudo apt install -y python3 python3-venv python3-pip nodejs npm git curl tesseract-ocr
;;
rhel|centos|fedora|rocky)
sudo dnf install -y python3 python3-pip nodejs npm git curl tesseract
;;
arch)
sudo pacman -Sy --noconfirm python python-venv python-pip nodejs npm git curl tesseract
;;
*)
echo -e "${RED}${CROSSMARK} Unsupported Linux distribution: ${DISTRO_ID}${RESET}"
exit 1
;;
esac
}
launch_server() {
echo -e "${GREEN}Deploying Borealis - Workflow Automation Tool...${RESET}"
echo "===================================================================================="
detect_distro
run_step "Install System Dependencies" install_core_dependencies
venvFolder="Borealis-Workflow-Automation-Tool"
dataSource="Data"
dataDestination="${venvFolder}/Borealis"
customUIPath="${dataSource}/WebUI"
webUIDestination="${venvFolder}/web-interface"
run_step "Create Virtual Python Environment" bash -c "
if [ ! -f '${venvFolder}/bin/activate' ]; then
python3 -m venv '${venvFolder}'
fi
"
run_step "Copy Borealis Server Data into Virtual Python Environment" bash -c "
if [ -d \"$dataSource\" ]; then
rm -rf \"$dataDestination\"
mkdir -p \"$dataDestination\"
cp -r \"$dataSource/\"* \"$dataDestination\"
else
echo -e \"\r${INFO} Warning: Data folder not found, skipping copy.${RESET}\"
fi
true
"
run_step "Create a new ReactJS App in ${webUIDestination}" bash -c "
if [ ! -d \"$webUIDestination\" ]; then
CI=true npx create-react-app \"$webUIDestination\" --silent --use-npm --loglevel=error
fi
"
run_step "Overwrite React App with Custom Files" bash -c "
if [ -d \"$customUIPath\" ]; then
cp -r \"$customUIPath/\"* \"$webUIDestination\"
else
echo -e \"\r${INFO} No custom UI found, using default React app.${RESET}\"
fi
true
"
run_step "Remove Existing React Build (if any)" bash -c "
if [ -d \"$webUIDestination/build\" ]; then
rm -rf \"$webUIDestination/build\"
fi
true
"
source "${venvFolder}/bin/activate"
run_step "Install Python Dependencies into Virtual Python Environment" bash -c "
if [ -f \"requirements.txt\" ]; then
pip install -q -r requirements.txt
else
echo -e \"\r${INFO} No requirements.txt found, skipping Python packages.${RESET}\"
fi
true
"
run_step "Install React App Dependencies" bash -c "
if [ -f \"$webUIDestination/package.json\" ]; then
cd \"$webUIDestination\"
npm install --silent --no-fund --audit=false --loglevel=error
cd -
fi
"
run_step "Install React Flow and UI Libraries" bash -c "
cd \"$webUIDestination\"
npm install reactflow --silent --no-fund --audit=false --loglevel=error
npm install --silent @mui/material @mui/icons-material @emotion/react @emotion/styled --no-fund --audit=false --loglevel=error
cd -
"
run_step "Build React App" bash -c "
cd \"$webUIDestination\"
npm run build --silent --loglevel=error
cd -
"
cd "${venvFolder}"
echo -e "\n${GREEN}Launching Borealis...${RESET}"
echo "===================================================================================="
echo -ne "${HOURGLASS} Starting Flask server... "
python3 Borealis/server.py
echo -e "\r${CHECKMARK} Borealis Launched Successfully!"
}
launch_agent() {
echo -e "${GREEN}Deploying Borealis Agent...${RESET}"
echo "===================================================================================="
detect_distro
run_step "Install System Dependencies" install_core_dependencies
venvFolder="Agent"
agentSourcePath="Data/Agent/borealis-agent.py"
agentRequirements="Data/Agent/requirements.txt"
agentDestinationFolder="${venvFolder}/Agent"
agentDestinationFile="${agentDestinationFolder}/borealis-agent.py"
run_step "Create Virtual Python Environment for Agent" bash -c "
if [ ! -f '${venvFolder}/bin/activate' ]; then
python3 -m venv '${venvFolder}'
fi
if [ -f '${agentSourcePath}' ]; then
rm -rf '${agentDestinationFolder}'
mkdir -p '${agentDestinationFolder}'
cp '${agentSourcePath}' '${agentDestinationFile}'
else
echo -e '\r${INFO} Warning: Agent script not found at ${agentSourcePath}, skipping copy.${RESET}'
fi
true
"
source "${venvFolder}/bin/activate"
run_step "Install Python Dependencies for Agent" bash -c "
if [ -f '${agentRequirements}' ]; then
pip install -q -r '${agentRequirements}'
else
echo -e '\r${INFO} Agent-specific requirements.txt not found at ${agentRequirements}, skipping Python packages.${RESET}'
fi
true
"
echo -e "\n${GREEN}Launching Borealis Agent...${RESET}"
echo "===================================================================================="
python3 "${agentDestinationFile}"
}
echo -e "${GREEN}Deploying Borealis - Workflow Automation Tool...${RESET}"
echo "===================================================================================="
echo "Please choose which module you want to launch / (re)deploy:"
echo "- Server (Web Dashboard) [1]"
echo "- Agent (Local/Remote Client) [2]"
read -p "Enter 1 or 2: " choice
case "$choice" in
1) launch_server ;;
2) launch_agent ;;
*) echo -e "${YELLOW}Invalid selection. Exiting...${RESET}"; exit 1 ;;
esac