chore: add CI, lint config, login rate limit and split large modules

- Rate-limit failed logins (8 per 15 min per IP or username, 429 + Retry-After)
- Add ruff/mypy config and GitHub Actions workflow (ruff, pytest, tsc, tests, build)
- Apply ruff autofixes (import order, pyupgrade)
- Extract rpy_helpers.py, engine-util.ts, TranslationParts.tsx and
  translation-types.ts from oversized modules
- Add dependency-free React UI tests
- Refresh README and ARCHITECTURE (Naninovel/Tomie, status and plans)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Sonnet 5.5 committed 2026-10-25 11:23:22 +03:00
1 parent 57a4edcbfd
commit bbbcc6a5d8
42 files changed
+678 -391

No files matched your search

+18 -3
View File
@@ -1,8 +1,9 @@
# PGames — локальная библиотека визуальных новелл
Загружаете архив с игрой на Ren'Py — сервер распаковывает его, переводит
Загружаете архив с игрой на Ren'Py или Unity-игру на Naninovel (включая
отдельный адаптер Tomie) — сервер распаковывает его, переводит
скрипты и ассеты в собственный формат **PGVN** (JSON-скрипты, WebP, Opus, WebM)
и удаляет исходники. Играете в браузере во встроенном плеере. У каждой игры
и удаляет исходники. Игры других движков отклоняются на входе. Играете в браузере во встроенном плеере. У каждой игры
может быть несколько версий (форков) от разных пользователей; версии делят
общие ассеты, поэтому форк почти не занимает места.
@@ -81,11 +82,23 @@ docker compose run --rm -v /srv/games:/games:ro backend \
`reset` — удалить стенд вместе с данными, `logs` — логи бэкенда и воркера.
```bash
cd backend && pip install -r requirements.txt pytest && python -m pytest
cd backend && pip install -r requirements-dev.txt ruff && ruff check . && python -m pytest
cd frontend && npm install && npm run dev # проксирует /api на :8000
cd frontend && npm run typecheck && npm test
python -m tests.make_sample sample.zip # тестовая игра (из backend/)
```
Тесты конвертера требуют `ffmpeg` в `PATH`. Те же проверки (ruff, pytest,
`tsc`, тесты и сборка фронтенда) выполняет GitHub Actions
(`.github/workflows/ci.yml`); `mypy` запускается там как справочная проверка.
Каталоги `data/` и `data-test/` содержат библиотеку и тестовый стенд (гигабайты),
они в `.gitignore` — не добавляйте их в коммиты и в образы Docker.
Вход ограничен по числу неудачных попыток: 8 ошибок за 15 минут по IP или по
логину блокируют вход на оставшееся время (ответ 429 с `Retry-After`). Счётчик
хранится в памяти процесса и сбрасывается при перезапуске backend.
## Что поддерживает конвертер Ren'Py
`label`, реплики (в т.ч. атрибуты, `extend`, `centered`, NVL), `scene/show/hide`
@@ -101,6 +114,8 @@ python -m tests.make_sample sample.zip # тестовая игра (из ba
каналы (`register_channel`), `pause`, `.rpa`, `.rpyc` (через unrpyc),
автоопределение картинок из `images/`, GUI-текстбокс и шрифты игры.
Для Naninovel/Tomie см. [docs/IMPORT.md](docs/IMPORT.md).
Пока **не** поддерживается: `screen`-язык (кастомные экраны, карты,
мини-игры), движение и твины в ATL, функции/классы в `python` и картинки,
которые игра вычисляет своими функциями. Такие места перечислены в отчёте