feat: migrate to Gitea, productize Helm chart, unify version

- CI: replace GitLab pipeline with Gitea Actions (.gitea/workflows/release.yaml);
  publish .deb/image/hosted/chart to Gitea registries; gate image+hosted on .deb
  (needs + registry pre-check)
- drop connectone/Nexus; apt now from the Gitea Debian registry
- single version source (/VERSION=3.2.8); CI enforces .env/Chart consistency
- restructure: build/->packaging/deb, root Dockerfile->packaging/image,
  hosted/->packaging/hosted, .kube/->charts/freeradius
- Helm chart: documented values, DB password via Secret/$ENV, configurable
  scheduling/persistence; remove plaintext creds and hostPath PV
- gitignore *.env_cnf; docs for hosted (RU)/helm/root + agent KB sync

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Georg K
2026-06-12 05:45:10 +03:00
parent da25848bf8
commit 99e1245ed3
52 changed files with 1079 additions and 287 deletions

60
AGENTS.md Normal file
View File

@@ -0,0 +1,60 @@
# AGENTS.md
## Что это
Репозиторий упаковки и развёртывания кастомной сборки FreeRADIUS 3.2.x для
hotspot/captive-portal сценариев. Прикладного кода нет: это сборочные Dockerfile,
shell-скрипты, Helm/k8s-манифесты и
конфиги FreeRADIUS. Профиль каркаса: infra-lite.
Главный контекст: [agent/INDEX.md](agent/INDEX.md). Читать перед любыми изменениями.
Сборка и поставка - через Gitea (`git.ahax86.ru`, owner `pub`): Debian-реестр для .deb,
container registry для образа, Helm-реестр для чарта, generic-пакет для hosted-бандла.
Nexus и GitLab больше не используются.
## Порядок чтения в начале сессии
1. `AGENTS.md` (этот файл).
2. `agent/INDEX.md` - назначение, артефакты, режимы развёртывания, версии, риски.
## Структура репозитория
```
VERSION ← единый источник версии FreeRADIUS (3.2.8)
.gitea/workflows/release.yaml ← ручной релиз (Gitea Actions): prepare/build-deb/build-image/package-hosted/package-helm
packaging/
deb/ ← сборка .deb из исходников FreeRADIUS + rlm_raw, upload в Debian-реестр Gitea
image/ ← рантайм-образ (Dockerfile + entrypoint.sh + local-noble.list); ставит .deb, печёт конфиг
hosted/ ← bare-metal/VM установка (install.sh, update.sh, systemd, cron, config)
config/ ← radiusd.conf, dictionary, clients.conf, mods-enabled/*, sites-enabled/*
.env / .env_cnf* ← версия пакета и подстановки (хосты, порты, креды БД)
charts/
freeradius/ ← продуктовый Helm-чарт (Deployment, ConfigMap, Secret, PVC, Service)
```
## Инструменты и команды
- Сборка/выкладка - только через Gitea Actions (`.gitea/workflows/release.yaml`, `workflow_dispatch`).
- Версия задаётся в `VERSION`; CI выводит из неё тег/пин/appVersion и падает при рассинхроне.
- Локальная сборка .deb: `docker build packaging/deb -f packaging/deb/Dockerfile --build-arg RADIUS_TAG=release_3_2_8 --build-arg RLM_RAW_BRANCH=v3.2.4 -t freerad-builder:3.2.8`
- Локальная сборка образа: `docker build -f packaging/image/Dockerfile --build-arg PKG_VERSION=3.2.8+git -t freeradius:3.2.8 .` (контекст = корень).
- Тест hosted: `cd packaging/hosted && docker build . -t hosted:test -f Dockerfile`
- Установка на ноду (bare-metal): `packaging/hosted/install.sh` (root), обновление версии: `packaging/hosted/update.sh`.
- Чарт: `helm lint charts/freeradius --set db.password=test`, `helm template charts/freeradius --set db.password=test`.
- Линтеров/тестов кода в репозитории нет.
## Правила репо
1. Ничего не публиковать (push, PR, CI-стейдж, деплой) без явной команды пользователя.
2. `git add` строго поимённо. Никогда `git add .` или `git add -A`.
3. `.env` / `.env_cnf` не читать целиком и не коммитить - там креды БД. Проверять
переменную через grep по `^VAR=`. `.env_cnf` хранит секреты и не должен попадать в git.
4. Деструктивные действия с прод-нодами, БД и k8s - только с явного подтверждения.
5. Изменился конфиг, версия, хост или инвариант - синхронно отразить в `agent/INDEX.md`.
6. Долгоживущие решения фиксируются в `agent/INDEX.md`. Журнал сессий не ведётся по умолчанию.
7. Документация краткая и строгая: без галлюцинаций, факты берём из кода и конфигов.
## Язык
Отвечать по-русски, кратко, без длинных тире.