feat: Implement organization branding, course pacing, and display upcoming deadlines in the experience portal.

This commit is contained in:
2025-12-29 01:30:48 -03:00
parent 1a2b9e473c
commit 158aa5b315
41 changed files with 2422 additions and 262 deletions
Executable
+244
View File
@@ -0,0 +1,244 @@
#!/bin/bash
# OpenCCB Unified Installation Script
# This script automates the setup of OpenCCB, including prerequisites,
# repository cloning, dependencies, and initial configuration.
set -e
REPO_URL="https://github.com/Nurfog/openccb.git" # Example URL, should be updated if needed
PROJECT_DIR="openccb"
echo "===================================================="
echo " 🚀 Welcome to the OpenCCB Installer"
echo "===================================================="
echo ""
# 1. Detection & Cloning
if [ -f "Cargo.toml" ] && [ -d "services" ] && [ -d "web" ]; then
echo "✅ Project detected in current directory."
PROJECT_ROOT=$(pwd)
else
echo "📂 Project not detected in current directory."
if [ -d "$PROJECT_DIR" ]; then
echo "✅ Detected project folder '$PROJECT_DIR'."
cd "$PROJECT_DIR"
PROJECT_ROOT=$(pwd)
else
echo "📥 Project folder not found. Cloning from $REPO_URL..."
git clone "$REPO_URL" "$PROJECT_DIR"
cd "$PROJECT_DIR"
PROJECT_ROOT=$(pwd)
fi
fi
# 2. Prerequisite Installation
echo ""
echo "🔍 Checking for prerequisites..."
# Function to check and install system packages (Ubuntu/Debian)
install_pkg() {
if ! command -v "$1" &> /dev/null; then
echo "🔧 Installing $1..."
sudo apt-get update && sudo apt-get install -y "$1"
else
echo "$1 is already installed."
fi
}
# Check for essential tools
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if [ -f /etc/debian_version ]; then
install_pkg "curl"
install_pkg "git"
install_pkg "jq"
install_pkg "build-essential"
install_pkg "docker.io"
# On modern Ubuntu, docker compose is a plugin included with docker.io or available as docker-compose-v2
if ! docker compose version &> /dev/null; then
install_pkg "docker-compose-v2"
fi
else
echo "⚠️ Unsupported Linux distribution. Please ensure curl, git, jq, docker, and docker-compose are installed."
fi
fi
# Check for Rust
if ! command -v cargo &> /dev/null; then
echo "🔧 Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
else
echo "✅ Rust (Cargo) is already installed."
fi
# Check for Node.js
if ! command -v node &> /dev/null; then
echo "🔧 Node.js not found. Installing via NVM..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
else
echo "✅ Node.js $(node -v) is already installed."
fi
# Check for sqlx-cli
if ! command -v sqlx &> /dev/null; then
echo "🔧 Installing sqlx-cli..."
cargo install sqlx-cli --no-default-features --features postgres
else
echo "✅ sqlx-cli is already installed."
fi
# AI Stack Detection & Installation
echo ""
echo "🤖 Setting up Local AI Stack..."
HAS_NVIDIA=false
if command -v nvidia-smi &> /dev/null; then
if nvidia-smi -L &> /dev/null; then
echo "🚀 NVIDIA GPU Detected!"
HAS_NVIDIA=true
fi
fi
if [ "$HAS_NVIDIA" = false ] && command -v lspci &> /dev/null; then
if lspci | grep -i nvidia &> /dev/null; then
echo "🚀 NVIDIA GPU Detected (lspci)!"
HAS_NVIDIA=true
fi
fi
# Ollama Installation
if ! command -v ollama &> /dev/null; then
echo "🔧 Installing Ollama..."
curl -fsSL https://ollama.com/install.sh | sh
else
echo "✅ Ollama is already installed."
fi
# Wait for Ollama to be ready
echo "⏳ Waiting for Ollama server to be ready..."
until curl -s http://localhost:11434/api/tags &> /dev/null; do
sleep 2
done
# Pre-download models based on hardware
if [ "$HAS_NVIDIA" = true ]; then
echo "📥 Downloading Llama 3 (optimized for GPU)..."
ollama pull llama3:8b
else
echo "📥 Downloading Phi-3 (lighter for CPU)..."
ollama pull phi3:mini
fi
# 3. Frontend Dependency Installation
echo ""
echo "📦 Installing frontend dependencies..."
for dir in "web/studio" "web/experience"; do
if [ -d "$dir" ]; then
echo "🔹 Installing in $dir..."
(cd "$dir" && npm install)
fi
done
# 4. Environment Configuration
echo ""
echo "⚙️ Configuring environment..."
if [ ! -f ".env" ]; then
if [ -f ".env.example" ]; then
echo "📄 Creating .env from .env.example..."
cp .env.example .env
else
echo "📄 Creating a new .env file..."
touch .env
fi
fi
# Function to update or add a variable in .env
update_env() {
local key=$1
local default_value=$2
local prompt_text=$3
# Read current value if it exists
local current_value=$(grep "^${key}=" .env | cut -d'=' -f2- || echo "")
local val=${current_value:-$default_value}
read -p "$prompt_text [$val]: " user_val
user_val=${user_val:-$val}
if grep -q "^${key}=" .env; then
# Use a temporary file for sed to be safe
sed -i "s|^${key}=.*|${key}=${user_val}|" .env
else
echo "${key}=${user_val}" >> .env
fi
}
echo "Please provide the following configuration values (Press Enter for default):"
update_env "DATABASE_URL" "postgresql://user:password@localhost:5432/openccb" "Master Database URL"
update_env "CMS_DATABASE_URL" "postgresql://user:password@localhost:5432/openccb_cms" "CMS Database URL"
update_env "LMS_DATABASE_URL" "postgresql://user:password@localhost:5432/openccb_lms" "LMS Database URL"
update_env "NEXT_PUBLIC_CMS_API_URL" "http://localhost:3001" "Studio CMS API URL"
update_env "NEXT_PUBLIC_LMS_API_URL" "http://localhost:3002" "Experience LMS API URL"
echo ""
echo "🛠️ AI Configuration..."
update_env "AI_PROVIDER" "local" "AI Provider (openai | local)"
if [ "$(grep "^AI_PROVIDER=" .env | cut -d'=' -f2)" == "local" ]; then
update_env "LOCAL_OLLAMA_URL" "http://localhost:11434" "Local Ollama API URL"
update_env "LOCAL_WHISPER_URL" "http://localhost:8000" "Local Whisper API URL"
default_model="phi3:mini"
if [ "$HAS_NVIDIA" = true ]; then
default_model="llama3:8b"
fi
update_env "LOCAL_LLM_MODEL" "$default_model" "Local LLM Model"
else
update_env "OPENAI_API_KEY" "" "OpenAI API Key"
fi
echo "✅ .env configuration updated."
# 5. Database Initialization
echo ""
echo "🐘 Starting database with Docker..."
docker compose up -d db
echo "⏳ Waiting for database to be ready..."
# Better wait using pg_isready if available
if command -v pg_isready &> /dev/null; then
until pg_isready -h localhost -p 5432 -U user; do
echo "Still waiting for Postgres..."
sleep 2
done
else
sleep 10
fi
echo "🏗️ Running database setup..."
chmod +x db-mgmt.sh
./db-mgmt.sh setup
# 6. System Initialization
echo ""
echo "👤 Initializing system (Admin account)..."
chmod +x init-system.sh
./init-system.sh
echo ""
echo "===================================================="
echo " ✨ OpenCCB Installation Complete!"
echo "===================================================="
echo "You can now start the services using 'docker compose up' or by"
echo "running 'npm run dev' inside the frontend directories and"
echo "'cargo run' inside the service directories."
echo ""
echo "Studio: http://localhost:3000"
echo "Experience: http://localhost:3003"
echo "CMS API: http://localhost:3001"
echo "LMS API: http://localhost:3002"
echo "===================================================="