Skip to content

Add GH workflow for Mac ARM, Intel, and Linux build #13

Add GH workflow for Mac ARM, Intel, and Linux build

Add GH workflow for Mac ARM, Intel, and Linux build #13

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
# Create postinst script with improved lock handling
cat << EOF > debian/DEBIAN/postinst
#!/bin/bash
set -e
# Function to wait for lock release
wait_for_lock_release() {
local lock_file=\$1
local max_wait=300 # Maximum wait time in seconds
local wait_time=0
while fuser \$lock_file >/dev/null 2>&1; do
if [ \$wait_time -ge \$max_wait ]; then
echo "Timeout waiting for lock release. Installation may be incomplete."
return 1
fi
sleep 5
wait_time=\$((wait_time + 5))
echo "Waiting for lock release... (\$wait_time seconds)"
done
return 0
}
# Function to run apt operations safely
run_apt_safely() {
local max_attempts=3
local attempt=1
while [ \$attempt -le \$max_attempts ]; do
if wait_for_lock_release /var/lib/dpkg/lock; then
if wait_for_lock_release /var/lib/apt/lists/lock; then
if "\$@"; then
return 0
fi
fi
fi
echo "Attempt \$attempt failed. Retrying..."
attempt=\$((attempt + 1))
sleep 10
done
echo "Failed to complete apt operation after \$max_attempts attempts."
return 1
}
# Ensure curl is installed
if ! command -v curl &> /dev/null; then
echo "Installing curl..."
if ! run_apt_safely apt-get update && run_apt_safely apt-get install -y curl; then
echo "Failed to install curl. Exiting."
exit 1
fi
fi
# Install Docker if not present
if ! command -v docker &> /dev/null; then
echo "Installing Docker..."
if curl -fsSL https://get.docker.com -o get-docker.sh; then
if sh get-docker.sh; then
usermod -aG docker \$SUDO_USER
systemctl enable docker
systemctl start docker
else
echo "Failed to install Docker. Exiting."
exit 1
fi
else
echo "Failed to download Docker installation script. Exiting."
exit 1
fi
fi
# Pull necessary Docker images
echo "Pulling Docker images..."
if ! docker pull morpheusai/nginx-agent:latest || ! docker pull morpheusai/agents:latest; then
echo "Failed to pull Docker images. Exiting."
exit 1
fi
# Start Docker containers
echo "Starting Docker containers..."
if ! docker run -d --name agents -p 8080:5000 --restart always -v /var/lib/agents -v /app/src morpheusai/agents:latest; then
echo "Failed to start agents container. Exiting."
exit 1
fi
if ! docker run -d --name nginx -p 3333:80 morpheusai/nginx-agent:latest; then
echo "Failed to start nginx container. Exiting."
exit 1
fi
echo "Installation complete!"
echo "You can now start MORagents from your application menu or by running 'MORagents' in the terminal."
EOF
chmod 755 debian/DEBIAN/postinst
dpkg-deb --build debian moragents.deb
- name: Upload Debian Package
uses: actions/upload-artifact@v4
with:
name: MORagentsSetup-Linux
path: moragents.deb