-
Notifications
You must be signed in to change notification settings - Fork 15
179 lines (152 loc) · 5.84 KB
/
mor-agents-build-linux.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
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.1
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.1.0
sudo docker pull lachsbagel/moragents_dockers-agents:amd64-0.1.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.1.0
sudo docker run -d --name nginx -p 3333:80 lachsbagel/moragents_dockers-nginx:amd64-0.1.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