# Туториал: твой первый Pull Request за 30 минут

Гайд для нового контрибьютора плеера Рублокса. Закончив, у тебя будет смерженный PR и зачисленные баллы разработчика.

## Что нужно перед началом

1. **Аккаунт в Gitea**: войди в https://team.rublox.pro и кликни «Войти через team» в Gitea (https://git.rublox.pro). OAuth создаст тебе профиль с ник = твой `firstName` из team.
2. **Роль `developer`**: попроси Лида выдать через https://team.rublox.pro/developer (или через API `POST /api-team/developer/grant/<твой-uid>`).
3. **CLA подписан**: открой https://team.rublox.pro/developer, вкладка «CLA», кнопка «Я согласен, подписать».
4. **SSH-ключ в Gitea**: вкладка «SSH-ключи». Если ключа нет — создай: `ssh-keygen -t ed25519 -C "твой-email"` и скопируй содержимое `~/.ssh/id_ed25519.pub`.
5. **Node.js 18+**: `node --version` должно показать `v18.x` или выше.

## Шаг 1: Клонируй репо (2 минуты)

```bash
git clone ssh://git@git.rublox.pro:2222/rublox/player.git
cd player
```

Если ssh не работает (нет ключа в Gitea) — используй HTTPS:
```bash
git clone https://git.rublox.pro/rublox/player.git
```

## Шаг 2: Запусти локально (3 минуты)

```bash
npm install                  # ~250 МБ, занимает 1-2 мин
cp .env.example .env         # дефолты подходят
npm run dev
```

Открой http://localhost:5173 — увидишь приветственный экран. Без JWT/ticket'a реальные игры не загрузятся, но мы будем тестить через standalone-режим.

## Шаг 3: Standalone-режим для разработки (1 минута)

```bash
echo "VITE_STANDALONE=true" >> .env
# Перезапусти npm run dev (Ctrl+C → npm run dev снова)
```

Открой http://localhost:5173/sample — загрузится демо-игра из `src/fixtures/sample-game.json`. Игрок-куб на зелёном поле, 4 стены, красная сфера.

## Шаг 4: Сделай маленькое улучшение

Хороший первый PR — что-то маленькое и видимое. Варианты:

- **Опечатка в README** или CHANGELOG (всегда найдётся!).
- **Новый цвет** для одного из примитивов в `src/fixtures/sample-game.json` — поменяй пол с зелёного на красный.
- **Подпись `subText`** в `src/App.jsx:IndexRoute` сделай красивее.

Пример: поменяем цвет пола в sample-game.

Открой `src/fixtures/sample-game.json`, найди:
```json
{"id":"floor","type":"box","x":0,"y":-0.5,"z":0,"sx":20,"sy":1,"sz":20,"color":"#3a8a3a"}
```
Поменяй `#3a8a3a` (зелёный) на свой любимый цвет, например `#7c3aed` (фиолетовый).

Перезагрузи http://localhost:5173/sample — пол стал фиолетовый!

## Шаг 5: Проверь стиль кода

```bash
npm run lint        # ESLint
npm run format      # Prettier (автоформатирует)
```

Оба должны пройти без ошибок. Если ESLint что-то жалуется — исправь.

## Шаг 6: Запушь и открой PR

```bash
git checkout -b feature/cool-floor-color
git add src/fixtures/sample-game.json
git commit -m "feat: фиолетовый пол в sample-game"
git push origin feature/cool-floor-color
```

Перейди по ссылке которую печатает git (или открой https://git.rublox.pro/rublox/player/pulls и кнопка «New Pull Request»). Опиши что и зачем поменял.

## Шаг 7: Дождись CI

После открытия PR автоматически запустятся проверки:
- `Lint + Format` — твой код стилистически чистый
- `Build` — vite build проходит без ошибок
- `Secret scan` — нет утечек паролей/токенов
- `PR size check` — PR не слишком большой

Если что-то падает — исправь, сделай новый commit, запушь — CI перезапустится.

## Шаг 8: Дождись ревью

Лид (МИН) ревьюит каждый PR в течение 48 часов (обычно гораздо быстрее). Если он попросит изменения — поправь, запушь снова в ту же ветку.

После approve Лид сам нажмёт Merge → webhook задеплоит изменения на staging, а тебе зачислятся **+5 баллов разработчика** + бонусы за объём изменений.

## Поздравляем!

Ты сделал первый PR. Дальше — выбирай задачу из issues с тегом `good-first-issue` или предлагай свою.

## Что почитать дальше

- [ARCHITECTURE.md](../ARCHITECTURE.md) — как устроен плеер изнутри
- [CONTRIBUTING.md](../CONTRIBUTING.md) — детально про стиль и процесс
- [SECURITY.md](../SECURITY.md) — что делать если нашёл уязвимость
- [TUTORIAL_DEBUG_BABYLON.md](./TUTORIAL_DEBUG_BABYLON.md) — отладка 3D-сцены
- [TUTORIAL_ADD_SCRIPT_API.md](./TUTORIAL_ADD_SCRIPT_API.md) — как расширить API для игровых скриптов

## Если что-то пошло не так

- **`npm install` упал** — проверь Node.js версию (нужно 18+), удали `node_modules` и `package-lock.json`, запусти заново.
- **Браузер показывает белый экран** — открой DevTools (F12) → Console, увидишь ошибку. Скорее всего сломанный импорт или typo.
- **CI упал** — кликни по красному крестику в PR, увидишь логи. Обычно это format/lint — `npm run format` + `git commit --amend` чинит.
- **Push в Gitea просит пароль** — добавь SSH-ключ в профиль Gitea (см. /developer/keys).

Вопросы — в канал `#разработка` на team.rublox.pro.
