26 lines
1.5 KiB
Markdown
26 lines
1.5 KiB
Markdown
# ADR-002: Асинхронный событийный индексатор поверх GitHub Releases
|
||
|
||
Дата: 2026-09-06
|
||
Статус: Принято
|
||
|
||
## Контекст
|
||
Нужен дешёвый и устойчивый к лимитам GitHub способ индексировать моды. Хранить `.jar` у себя дорого, проксировать трафик - упрёмся в bandwidth и rate limits.
|
||
|
||
## Решение
|
||
Бэкенд не хранит артефакты. GitHub Releases CDN - источник правды для файлов. Мы только:
|
||
- принимаем webhook `release.published` (HMAC + queue + 202),
|
||
- воркер читает zip central directory через Range Request,
|
||
- парсит манифест (`fabric.mod.json` и т.д.),
|
||
- пишет метаданные в Postgres,
|
||
- отдаёт прямые `download_url` на `objects.githubusercontent.com`.
|
||
|
||
Подробнее в `docs/architecture.md`.
|
||
|
||
## Последствия
|
||
- Плюс: минимальный storage, нет egress costs, +5k–12.5k RPH через GitHub App.
|
||
- Минус: зависимость от доступности GitHub CDN (приемлемо - моды и так там).
|
||
- Вынесен malware-скан и SHA-256 сверка как обязательные.
|
||
|
||
## Альтернативы
|
||
- Хранить файлы у себя (S3) - отклонено: дорого, дублирование.
|
||
- Полный pull `.jar` на каждый релиз - отклонено: трафик, медленно.
|