player/CONTRIBUTING.md
МИН 8428cda555 docs: переписал README/ARCHITECTURE/CONTRIBUTING/SECURITY/CHANGELOG на русский
Юзер указал что вся документация opensource-репо должна быть на русском.
Также:
- .env.example комменты на русском
- package.json description на русском
- Описания org и repo в Gitea обновлены через API
2026-05-27 23:13:28 +03:00

5.9 KiB
Raw Permalink Blame History

Контрибьютинг в плеер Рублокса

Спасибо за интерес! Всё что нужно знать.

Перед первым PR

  1. Подпиши CLA — открой https://team.rublox.pro/developer/cla (нужна роль developer — попроси у мейнтейнера) ИЛИ комментарий /sign-cla на PR.
  2. Заведи Gitea-аккаунт через OAuth-привязку к team.rublox.pro.
  3. Добавь SSH-ключ в профиль Gitea (иначе пуш по HTTPS + пароль).

Workflow

# 1. Клонируем (или форкаем — если есть доступ, можно сразу пушить в feature-ветку)
git clone ssh://git@git.rublox.pro:2222/rublox/player.git
cd player
npm install
cp .env.example .env

# 2. Создаём feature-ветку
git checkout -b feature/короткое-описание

# 3. Делаем изменения
npm run dev      # проверяем локально
npm run lint     # ESLint
npm run format   # Prettier

# 4. Коммитим (Conventional Commits)
git commit -m "feat: добавить анимацию прыжка для GdBall"
# Другие префиксы: fix:, chore:, docs:, refactor:, test:, perf:, ci:

# 5. Пушим и открываем PR
git push origin feature/короткое-описание
# Открыть PR через https://git.rublox.pro/rublox/player

Стиль кода

Используем Prettier (авто-формат) + ESLint (линт). Конфиги закоммичены в .prettierrc и .eslintrc.json.

Главные правила:

  • 2-space отступ
  • Одинарные кавычки ('foo', не "foo")
  • Точки с запятой обязательны
  • Trailing comma в многострочных литералах
  • Ширина строки 100 символов
  • Никаких eval, new Function, innerHTML = ...
  • React: hooks-правила обязательны (react-hooks/rules-of-hooks)

Запускай перед коммитом:

npm run format    # авто-фикс большинства
npm run lint      # предупреждения для остального

Pre-commit-хук (Husky, если установлен) заблокирует если Prettier-чек провален.

Именование веток

Префикс Использовать для
feature/... Новые фичи
fix/... Багфиксы
chore/... Рефакторинг, зависимости, тулинг
docs/... Только документация
perf/... Улучшения производительности

Commit-сообщения (Conventional Commits)

<тип>: <короткое описание>

[опционально тело]

[опционально футер: BREAKING CHANGE / Closes #N]

Типы: feat, fix, chore, docs, refactor, test, perf, ci, style.

Хорошо:

  • feat: добавить WaveMode в GdGameModeRegistry
  • fix: ScriptSandbox падает при таймауте Worker
  • perf: дросселировать ui.set() до 250мс с diff-проверкой

Плохо:

  • update code
  • wip
  • пофиксил всякое

Шаблон PR

При открытии PR заполни:

## Что

(1-2 предложения: что делает этот PR?)

## Зачем

(мотивация: репорт бага, фича-реквест, связанный issue #N)

## Как протестить

(воспроизводимые шаги для ревьюера)

## Скриншоты / видео (если UI-изменение)

## Чек-лист

- [ ] `npm run lint` проходит
- [ ] `npm run format:check` проходит
- [ ] `npm run build` собирается
- [ ] Протестил локально через `npm run dev`
- [ ] Обновил соответствующие доки (README / ARCHITECTURE / CHANGELOG)
- [ ] CLA подписан

Процесс ревью

  • Мейнтейнер репо (МИН) ревьюит каждый PR.
  • Ожидай фидбек в течение 48 часов (часто в тот же день).
  • Маленькие PR (<300 строк) ревьюятся быстро. PR'ы >1000 строк попросят раздробить.
  • После approval мерджит мейнтейнер (право merge только у него).
  • После merge автоматический webhook запускает деплой в прод.

Что не смерджим

  • PR с новыми внешними зависимостями без обсуждения
  • PR трогающие чувствительные пути (engine/scripts/ScriptSandbox*.js, engine/multiplayer/*) без security-ревью
  • PR ломающие сборку или линт
  • PR от контрибьюторов без подписанного CLA
  • Массивные рефакторинги без заранее обсуждённого tracking-issue

Что любим

  • Багфиксы с воспроизводимыми тест-кейсами
  • Улучшения производительности с before/after метриками
  • Новые engine/gd/Gd*.js гейммоды
  • Новые API для скриптов (в ScriptSandboxAPI.js)
  • Улучшения документации (особенно с примерами)

Безопасность

Нашёл уязвимость? Не открывай публичный issue. Пиши на security@rublox.pro напрямую. См. SECURITY.md.

Вопросы?