From ed88df9a35e1755ce0891210e168a682054499b2 Mon Sep 17 00:00:00 2001 From: Nicole Rappe Date: Tue, 25 Mar 2025 21:50:45 -0600 Subject: [PATCH] Added Linux Support --- Launch-Borealis.sh | 185 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 Launch-Borealis.sh diff --git a/Launch-Borealis.sh b/Launch-Borealis.sh new file mode 100644 index 0000000..d6eb4c2 --- /dev/null +++ b/Launch-Borealis.sh @@ -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!" +