From 0da7aa5a14aef35d17746f965387e55850a00a90 Mon Sep 17 00:00:00 2001 From: byrsapty Date: Wed, 22 Jul 2026 21:36:59 +0300 Subject: [PATCH] Document the Forgejo Actions CI setup in both READMEs Co-Authored-By: Claude Sonnet 5 --- README.md | 25 +++++++++++++++++++++++++ README.uk.md | 26 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/README.md b/README.md index 4e6c318..a001525 100644 --- a/README.md +++ b/README.md @@ -480,6 +480,31 @@ The scheduler checks every 60s, so the Discord message can take up to a minute to arrive. Check Graylog's Alerts page and the configured Discord channel. +## CI/CD via Forgejo Actions + +This project's Forgejo repo (`git.zotac.keenetic.link/zotac/graylog-deploy`) +has a manually-triggered deploy workflow: `.forgejo/workflows/deploy.yml`. +Running it (Actions tab → Deploy Graylog config → Run workflow) clones the +repo fresh and re-runs `install-graylog.sh` - the same idempotent script +described throughout this README, just automated instead of scp'd by hand. + +- **Trigger is manual on purpose** (`workflow_dispatch` only, no + `on: push`) - this repo drives a production monitoring system, so a + human reviews the diff and clicks "Run workflow" rather than every push + silently redeploying. +- **The runner lives inside the Graylog container itself** (VMID 200, + `self-hosted:host` label, installed at `/usr/local/bin/forgejo-runner`, + running as a systemd service). No new SSH keys or cross-host access were + needed - the workflow just clones the repo into `/tmp/graylog-deploy-ci` + and runs the script locally, exactly like a human operator would. +- **No `actions/checkout`** - that action needs Node.js, which this + appliance container doesn't have and shouldn't need just for CI. The + workflow does a plain `git clone --depth 1` instead. +- **Secrets** (`GRAYLOG_ADMIN_PASSWORD`, `DISCORD_WEBHOOK_URL`) are stored + as repo-level Forgejo Actions secrets, not in any tracked file. + `GRAYLOG_EXTERNAL_URI` isn't secret (it's the public Web UI address) so + it's inlined directly in the workflow. + ## What's still NOT included - **D-Link switch parsing** — no sample logs were available. diff --git a/README.uk.md b/README.uk.md index 3c994cc..c400cdb 100644 --- a/README.uk.md +++ b/README.uk.md @@ -499,6 +499,32 @@ logger -n 127.0.0.1 -P 5140 -d 'kernel: nf_conntrack: table full, dropping packe із затримкою до хвилини. Перевірте сторінку Alerts у Graylog та відповідний Discord-канал. +## CI/CD через Forgejo Actions + +Forgejo-репозиторій проєкту (`git.zotac.keenetic.link/zotac/graylog-deploy`) +має вручну-запускний деплой-workflow: `.forgejo/workflows/deploy.yml`. +Його запуск (вкладка Actions → Deploy Graylog config → Run workflow) +клонує репо наново й повторно запускає `install-graylog.sh` — той самий +ідемпотентний скрипт, описаний по всьому цьому README, просто +автоматизований замість ручного scp. + +- **Тригер навмисно ручний** (тільки `workflow_dispatch`, без + `on: push`) — це репо керує продакшн-системою моніторингу, тож людина + переглядає диф і сама натискає "Run workflow", а не кожен push тихо + передеплоює систему. +- **Раннер живе прямо всередині контейнера Graylog** (VMID 200, лейбл + `self-hosted:host`, встановлений у `/usr/local/bin/forgejo-runner`, + працює як systemd-сервіс). Нових SSH-ключів чи міжхостового доступу не + знадобилося — workflow просто клонує репо в `/tmp/graylog-deploy-ci` і + запускає скрипт локально, точно як це робив би оператор вручну. +- **Без `actions/checkout`** — ця дія вимагає Node.js, якого немає (і не + повинно бути) на цьому appliance-контейнері лише заради CI. Замість неї + workflow робить звичайний `git clone --depth 1`. +- **Секрети** (`GRAYLOG_ADMIN_PASSWORD`, `DISCORD_WEBHOOK_URL`) зберігаються + як repo-level секрети Forgejo Actions, а не в жодному відстежуваному + файлі. `GRAYLOG_EXTERNAL_URI` не є секретом (це публічна адреса Web UI), + тож вказаний прямо у workflow. + ## Що ще НЕ реалізовано - **Парсинг D-Link switch** — не було зразків логів.