Spaces:
Running
Running
SilverElixir commited on
Commit ·
2d6a16c
1
Parent(s): 08be160
Telegram alert on state-backup failure instead of Actions summary only (audit M11)
Browse files
.github/workflows/state-backup.yml
CHANGED
|
@@ -7,6 +7,10 @@ name: State backup
|
|
| 7 |
# ADMIN_PANEL_KEY — см. curl -H "Authorization: Bearer <BOT_TOKEN>" .../admin_keys
|
| 8 |
# STATE_BACKUP_REPO — приватный репозиторий для бэкапов, например S1lverElixir/Lumen-state
|
| 9 |
# STATE_BACKUP_TOKEN — fine-grained PAT с Contents: read+write только на STATE_BACKUP_REPO
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
#
|
| 11 |
# ПРИВАТНОСТЬ (инцидент, сентябрь 2026): раньше файл заливался артефактом
|
| 12 |
# Actions, а артефакты публичного репозитория может скачать любой. Теперь
|
|
@@ -63,9 +67,31 @@ jobs:
|
|
| 63 |
git -c "http.https://github.com/.extraheader=AUTHORIZATION: basic $(printf 'x-access-token:%s' "${STATE_BACKUP_TOKEN}" | base64 -w0)" \
|
| 64 |
push origin HEAD:main
|
| 65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
- name: Report backup failure
|
| 67 |
-
# Канала уведомлений нет (нужен отдельный секрет/чат — решение владельца):
|
| 68 |
-
# минимум фиксируем провал видимым шагом и сводкой, а не тишиной в логах.
|
| 69 |
if: failure()
|
| 70 |
run: |
|
| 71 |
echo "## State backup FAILED — проверьте вкладку Actions" >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
| 7 |
# ADMIN_PANEL_KEY — см. curl -H "Authorization: Bearer <BOT_TOKEN>" .../admin_keys
|
| 8 |
# STATE_BACKUP_REPO — приватный репозиторий для бэкапов, например S1lverElixir/Lumen-state
|
| 9 |
# STATE_BACKUP_TOKEN — fine-grained PAT с Contents: read+write только на STATE_BACKUP_REPO
|
| 10 |
+
# Опционально (алерт о провале, аудит M11):
|
| 11 |
+
# STATE_ALERT_TOKEN — токен бота-сканера (lumen_smoke_bot), без прав админа
|
| 12 |
+
# STATE_ALERT_CHAT — личный chat_id владельца с этим ботом
|
| 13 |
+
# Без них провал виден только в сводке Actions.
|
| 14 |
#
|
| 15 |
# ПРИВАТНОСТЬ (инцидент, сентябрь 2026): раньше файл заливался артефактом
|
| 16 |
# Actions, а артефакты публичного репозитория может скачать любой. Теперь
|
|
|
|
| 67 |
git -c "http.https://github.com/.extraheader=AUTHORIZATION: basic $(printf 'x-access-token:%s' "${STATE_BACKUP_TOKEN}" | base64 -w0)" \
|
| 68 |
push origin HEAD:main
|
| 69 |
|
| 70 |
+
- name: Alert backup failure to Telegram
|
| 71 |
+
# Бэкап — единственный резерв истории чатов, и раньше его провал жил только
|
| 72 |
+
# в логах Actions (аудит M11, 10.2026). Состояние выводится из секретов:
|
| 73 |
+
# без них шаг тихо пропускается и падение всё равно уходит в сводку ниже.
|
| 74 |
+
# STATE_ALERT_TOKEN — токен бота-сканера (лumen_smoke_bot), без прав админа
|
| 75 |
+
# STATE_ALERT_CHAT — личный chat_id владельца с этим ботом
|
| 76 |
+
# Токен не печатаем и не кладём в URL: он в extraheader-подобном Bearer.
|
| 77 |
+
if: failure()
|
| 78 |
+
env:
|
| 79 |
+
STATE_ALERT_TOKEN: ${{ secrets.STATE_ALERT_TOKEN }}
|
| 80 |
+
STATE_ALERT_CHAT: ${{ secrets.STATE_ALERT_CHAT }}
|
| 81 |
+
run: |
|
| 82 |
+
if [ -z "${STATE_ALERT_TOKEN}" ] || [ -z "${STATE_ALERT_CHAT}" ]; then
|
| 83 |
+
echo "alert secrets not set — skipping Telegram alert" >> "$GITHUB_STEP_SUMMARY"
|
| 84 |
+
exit 0
|
| 85 |
+
fi
|
| 86 |
+
curl -sf --retry 2 --max-time 20 -X POST \
|
| 87 |
+
"https://api.telegram.org/bot${STATE_ALERT_TOKEN}/sendMessage" \
|
| 88 |
+
-H "Content-Type: application/json" \
|
| 89 |
+
-d "$(jq -nc --arg c "$STATE_ALERT_CHAT" \
|
| 90 |
+
--arg t "Lumen: ежедневный бэкап состояния ПРОВАЛИЛСЯ. Проверь вкладку Actions." \
|
| 91 |
+
'{chat_id:$c, text:$t}')" \
|
| 92 |
+
|| echo "Telegram alert failed" >> "$GITHUB_STEP_SUMMARY"
|
| 93 |
+
|
| 94 |
- name: Report backup failure
|
|
|
|
|
|
|
| 95 |
if: failure()
|
| 96 |
run: |
|
| 97 |
echo "## State backup FAILED — проверьте вкладку Actions" >> "$GITHUB_STEP_SUMMARY"
|