Merge pull request #104 from MorpheusAIs/ryanleung-build #43
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: MOR Agents Build Linux | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
workflow_dispatch: | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements.txt | |
pip install pyinstaller | |
- name: Build with PyInstaller | |
run: | | |
pyinstaller --name="MORagents" --add-data "images/moragents.png:images" main.py | |
- name: Create Debian package | |
run: | | |
mkdir -p debian/DEBIAN | |
mkdir -p debian/usr/bin | |
mkdir -p debian/usr/share/applications | |
mkdir -p debian/usr/share/icons/hicolor/256x256/apps | |
cp -r dist/MORagents/* debian/usr/bin/ | |
cp images/moragents.png debian/usr/share/icons/hicolor/256x256/apps/moragents.png | |
echo "[Desktop Entry] | |
Name=MORagents | |
Exec=/usr/bin/MORagents | |
Icon=moragents | |
Type=Application | |
Categories=Utility;" > debian/usr/share/applications/moragents.desktop | |
echo "Package: moragents | |
Version: 1.0 | |
Section: utils | |
Priority: optional | |
Architecture: amd64 | |
Maintainer: LachsBagel | |
Description: MORagents application | |
MORagents is a desktop application for AI agents." > debian/DEBIAN/control | |
dpkg-deb --build debian moragents.deb | |
- name: Create setup script | |
run: | | |
cat << EOF > moragents-setup.sh | |
#!/bin/bash | |
set -e | |
# Colors for output | |
RED='\033[0;31m' | |
GREEN='\033[0;32m' | |
YELLOW='\033[0;33m' | |
NC='\033[0m' # No Color | |
# Function to check if a command exists | |
command_exists() { | |
command -v "$1" >/dev/null 2>&1 | |
} | |
# Function to add current user to docker group | |
add_user_to_docker_group() { | |
local current_user=\$(whoami) | |
if [ "\$current_user" != "root" ]; then | |
echo -e "\${YELLOW}Adding current user to docker group...${NC}" | |
sudo usermod -aG docker "\$current_user" | |
echo -e "\${GREEN}User added to docker group. Please log out and log back in for changes to take effect.${NC}" | |
else | |
echo -e "\${YELLOW}Running as root. Skipping user addition to docker group.${NC}" | |
fi | |
} | |
# Function to wait for Ollama service to be ready | |
wait_for_ollama() { | |
echo -e "\${YELLOW}Waiting for Ollama service to be ready...${NC}" | |
for i in {1..30}; do | |
if curl -s http://localhost:11434/api/tags >/dev/null; then | |
echo -e "\${GREEN}Ollama service is ready.${NC}" | |
return 0 | |
fi | |
sleep 2 | |
done | |
echo -e "\${RED}Timed out waiting for Ollama service.${NC}" | |
return 1 | |
} | |
# Function to pull Ollama model with retries | |
pull_ollama_model() { | |
local model=\$1 | |
local max_attempts=3 | |
local attempt=1 | |
while [ \$attempt -le \$max_attempts ]; do | |
echo -e "\${YELLOW}Pulling Ollama model \$model (Attempt \$attempt)...${NC}" | |
if ollama pull \$model; then | |
echo -e "\${GREEN}Successfully pulled \$model.${NC}" | |
return 0 | |
fi | |
echo -e "\${YELLOW}Failed to pull \$model. Retrying...${NC}" | |
sleep 5 | |
attempt=\$((attempt + 1)) | |
done | |
echo -e "\${RED}Failed to pull \$model after \$max_attempts attempts.${NC}" | |
return 1 | |
} | |
# Install curl if not present | |
if ! command_exists curl; then | |
echo -e "\${YELLOW}Installing curl...${NC}" | |
sudo apt-get update | |
sudo apt-get install -y curl | |
fi | |
# Install Docker if not present | |
if ! command_exists docker; then | |
echo -e "\${YELLOW}Installing Docker...${NC}" | |
curl -fsSL https://get.docker.com -o get-docker.sh | |
sudo sh get-docker.sh | |
add_user_to_docker_group | |
sudo systemctl enable docker | |
sudo systemctl start docker | |
else | |
echo -e "\${GREEN}Docker is already installed.${NC}" | |
fi | |
# Install Ollama | |
echo -e "\${YELLOW}Installing Ollama...${NC}" | |
curl -fsSL https://ollama.com/install.sh | sh | |
# Start Ollama service | |
echo -e "\${YELLOW}Starting Ollama service...${NC}" | |
nohup ollama serve > /dev/null 2>&1 & | |
# Wait for Ollama service to be ready | |
wait_for_ollama | |
# Pull Ollama models | |
echo -e "\${YELLOW}Pulling Ollama models...${NC}" | |
pull_ollama_model llama3.2:3b | |
pull_ollama_model nomic-embed-text | |
# Pull necessary Docker images | |
echo -e "\${YELLOW}Pulling Docker images...${NC}" | |
sudo docker pull lachsbagel/moragents_dockers-nginx:amd64-0.2.0 | |
sudo docker pull lachsbagel/moragents_dockers-agents:amd64-0.2.0 | |
# Start Docker containers | |
echo -e "\${YELLOW}Starting Docker containers...${NC}" | |
sudo docker run -d --name agents -p 8080:5000 --restart always -v /var/lib/agents -v /app/src lachsbagel/moragents_dockers-agents:amd64-0.2.0 | |
sudo docker run -d --name nginx -p 3333:80 lachsbagel/moragents_dockers-nginx:amd64-0.2.0 | |
echo -e "\${GREEN}Setup complete!${NC}" | |
EOF | |
chmod +x moragents-setup.sh | |
- name: Upload Debian Package and Setup Script | |
uses: actions/upload-artifact@v4 | |
with: | |
name: MORagentsSetup-Linux | |
path: | | |
moragents.deb | |
moragents-setup.sh |