Add GH workflow for Mac ARM, Intel, and Linux build #13
Workflow file for this run
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 | |
# 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 |