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:
1 parent
57a4edcbfd
commit
bbbcc6a5d8
42 files changed
+678
-391
No files matched your search
@@ -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` и картинки,
|
||||
которые игра вычисляет своими функциями. Такие места перечислены в отчёте
|
||||
|
||||
Reference in new issue
Block a user