-
Notifications
You must be signed in to change notification settings - Fork 1
118 lines (100 loc) · 3.56 KB
/
deploy2.yml
File metadata and controls
118 lines (100 loc) · 3.56 KB
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
name: 🧪 CI UptimeMonitor Testing
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: 🔻 Checkout code
uses: actions/checkout@v4
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: 📦 Install dependencies
run: |
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install flask requests python-dotenv
- name: 🗃️ Create DB with correct schema
run: >
python -c "
import sqlite3;
conn = sqlite3.connect('sites.db');
conn.execute('CREATE TABLE IF NOT EXISTS sites (
id INTEGER PRIMARY KEY AUTOINCREMENT,
url TEXT NOT NULL,
check_interval INTEGER DEFAULT 60,
expected_text TEXT,
enabled INTEGER DEFAULT 1
)');
conn.execute('CREATE TABLE IF NOT EXISTS logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_id INTEGER,
status INTEGER,
response_time REAL,
timestamp TEXT,
FOREIGN KEY (site_id) REFERENCES sites (id)
)');
conn.commit();
conn.close();
print('✅ Database and tables created');
"
- name: 📁 Create required templates structure
run: |
mkdir -p templates/lang
echo '{}' > templates/lang/en.json
echo '{}' > templates/lang/ru.json
mkdir -p templates
# Обязательные шаблоны
cat > templates/base.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head><title>Uptime Monitor</title></head>
<body>{% block content %}{% endblock %}</body>
</html>
EOF
cat > templates/index.html << 'EOF'
{% extends "base.html" %}
{% block content %}
<h1>Monitor</h1>
<form method="post">
<input type="text" name="url" placeholder="Enter URL" />
<input type="number" name="interval" value="60" />
<input type="text" name="text" placeholder="Expected text" />
<button type="submit">Add Site</button>
</form>
{% endblock %}
EOF
cat > templates/admin.html << 'EOF'
<h1>Admin Panel</h1>
<p>Total: {{ total }}, Up: {{ up_now }}</p>
{% for event in events %}
<div>{{ event[0] }} — {{ 'UP' if event[1]==1 else 'DOWN' }}</div>
{% endfor %}
EOF
- name: 💬 Mock .env (с исправленным Telegram URL!)
run: |
echo 'TELEGRAM_TOKEN=123456:ABC-DEF' > .env
echo 'TELEGRAM_CHAT_ID=123456789' >> .env
- name: 🔨 Run app & test
run: |
source venv/bin/activate
# Запускаем в фоне
python app.py &
sleep 15 # Даем время на инициализацию
# Проверяем главную страницу
curl -f http://localhost:5000 || { echo "❌ Failed to load /"; exit 1; }
# Проверяем админку
curl -f http://localhost:5000/admin || { echo "❌ Failed to load /admin"; exit 1; }
# Убиваем сервер
pkill -f "python app.py" || true
- name: 🧹 Cleanup
if: always()
run: |
rm -f sites.db .env
rm -rf templates/