Added Linux Support
This commit is contained in:
		
							
								
								
									
										185
									
								
								Launch-Borealis.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								Launch-Borealis.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| #!/usr/bin/env bash | ||||
| # -------------------------------------------------------------------- | ||||
| # Deploying Borealis - Workflow Automation Tool | ||||
| # | ||||
| # This script deploys the Borealis Workflow Automation Tool by: | ||||
| #   - Detecting the Linux distro and installing required system dependencies. | ||||
| #   - Creating a Python virtual environment. | ||||
| #   - Copying server data. | ||||
| #   - Setting up a React UI application. | ||||
| #   - Installing Python and Node dependencies. | ||||
| #   - Building the React app. | ||||
| #   - Launching the Flask server. | ||||
| # | ||||
| # Usage: | ||||
| #   chmod +x deploy_borealis.sh | ||||
| #   ./deploy_borealis.sh | ||||
| # -------------------------------------------------------------------- | ||||
|  | ||||
| # ---------------------- Initialization & Visuals ---------------------- | ||||
| GREEN="\033[0;32m" | ||||
| YELLOW="\033[1;33m" | ||||
| RED="\033[0;31m" | ||||
| RESET="\033[0m" | ||||
| CHECKMARK="✅" | ||||
| HOURGLASS="⏳" | ||||
| CROSSMARK="❌" | ||||
| INFO="ℹ️" | ||||
|  | ||||
| # Function to run a step with progress visuals and error checking | ||||
| 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 | ||||
| } | ||||
|  | ||||
| echo -e "${GREEN}Deploying Borealis - Workflow Automation Tool...${RESET}" | ||||
| echo "====================================================================================" | ||||
|  | ||||
| # ---------------------- Detect Linux Distribution ---------------------- | ||||
| detect_distro() { | ||||
|     # This function detects the Linux distribution by sourcing /etc/os-release. | ||||
|     if [ -f /etc/os-release ]; then | ||||
|         . /etc/os-release | ||||
|         DISTRO_ID=$ID | ||||
|     else | ||||
|         DISTRO_ID="unknown" | ||||
|     fi | ||||
|     echo -e "${INFO} Detected OS: ${DISTRO_ID}" | ||||
| } | ||||
| detect_distro | ||||
|  | ||||
| # ---------------------- Install System Dependencies ---------------------- | ||||
| install_core_dependencies() { | ||||
|     # Install required packages based on detected Linux distribution. | ||||
|     case "$DISTRO_ID" in | ||||
|         ubuntu|debian) | ||||
|             sudo apt update -qq | ||||
|             sudo apt install -y python3 python3-venv python3-pip nodejs npm git curl | ||||
|             ;; | ||||
|         rhel|centos|fedora|rocky) | ||||
|             # For Fedora and similar distributions, the venv module is built-in so we omit python3-venv. | ||||
|             sudo dnf install -y python3 python3-pip nodejs npm git curl | ||||
|             ;; | ||||
|         arch) | ||||
|             sudo pacman -Sy --noconfirm python python-venv python-pip nodejs npm git curl | ||||
|             ;; | ||||
|         *) | ||||
|             echo -e "${RED}${CROSSMARK} Unsupported Linux distribution: ${DISTRO_ID}${RESET}" | ||||
|             exit 1 | ||||
|             ;; | ||||
|     esac | ||||
| } | ||||
| run_step "Install System Dependencies" install_core_dependencies | ||||
|  | ||||
| # ---------------------- Path Setup ---------------------- | ||||
| # Variables and path definitions | ||||
| venvFolder="Borealis-Workflow-Automation-Tool" | ||||
| dataSource="Data" | ||||
| dataDestination="${venvFolder}/Borealis" | ||||
| customUIPath="${dataSource}/WebUI" | ||||
| webUIDestination="${venvFolder}/web-interface" | ||||
|  | ||||
| # ---------------------- Create Python Virtual Environment ---------------------- | ||||
| run_step "Create Virtual Python Environment" bash -c " | ||||
|     # Check if virtual environment already exists; if not, create one. | ||||
|     if [ ! -f '${venvFolder}/bin/activate' ]; then | ||||
|         python3 -m venv '${venvFolder}' | ||||
|     fi | ||||
| " | ||||
|  | ||||
| # ---------------------- Copy Borealis Data ---------------------- | ||||
| run_step "Copy Borealis Server Data into Virtual Python Environment" bash -c " | ||||
|     # If the Data folder exists, remove any existing server data folder and copy fresh data. | ||||
|     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 | ||||
| " | ||||
|  | ||||
| # ---------------------- React UI Setup ---------------------- | ||||
| run_step "Create a new ReactJS App in ${webUIDestination}" bash -c " | ||||
|     # Create a React app if the destination folder does not exist. | ||||
|     if [ ! -d \"$webUIDestination\" ]; then | ||||
|         # Set CI=true and add --loglevel=error to suppress funding and audit messages | ||||
|         CI=true npx create-react-app \"$webUIDestination\" --silent --use-npm --loglevel=error | ||||
|     fi | ||||
| " | ||||
|  | ||||
| run_step "Overwrite React App with Custom Files" bash -c " | ||||
|     # If custom UI files exist, copy them into the React app folder. | ||||
|     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 " | ||||
|     # Remove the build folder if it exists to ensure a fresh build. | ||||
|     if [ -d \"$webUIDestination/build\" ]; then | ||||
|         rm -rf \"$webUIDestination/build\" | ||||
|     fi | ||||
|     true | ||||
| " | ||||
|  | ||||
| # ---------------------- Activate Python Virtual Environment ---------------------- | ||||
| # Activate the Python virtual environment for subsequent commands. | ||||
| source "${venvFolder}/bin/activate" | ||||
|  | ||||
| # ---------------------- Install Python Dependencies ---------------------- | ||||
| run_step "Install Python Dependencies into Virtual Python Environment" bash -c " | ||||
|     # Install Python packages if a requirements.txt file is present. | ||||
|     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 | ||||
| " | ||||
|  | ||||
| # ---------------------- Install Node Dependencies & Build React UI ---------------------- | ||||
| run_step "Install React App Dependencies" bash -c " | ||||
|     # Install npm dependencies if package.json exists. | ||||
|     if [ -f \"$webUIDestination/package.json\" ]; then | ||||
|         cd \"$webUIDestination\" | ||||
|         # Add --loglevel=error to suppress npm's funding and audit messages | ||||
|         npm install --silent --no-fund --audit=false --loglevel=error | ||||
|         cd - | ||||
|     fi | ||||
| " | ||||
|  | ||||
| run_step "Install React Flow and UI Libraries" bash -c " | ||||
|     # Install additional React libraries. | ||||
|     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 " | ||||
|     # Build the React app to create production-ready files. | ||||
|     cd \"$webUIDestination\" | ||||
|     npm run build --silent --loglevel=error | ||||
|     cd - | ||||
| " | ||||
|  | ||||
| # ---------------------- Launch Flask Server ---------------------- | ||||
| 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!" | ||||
|  | ||||
		Reference in New Issue
	
	Block a user