studio/docs/TUTORIAL_FIRST_PR.md
МИН d5319b0f19
Some checks failed
CI / Lint + Format (push) Failing after 43s
CI / Build (push) Failing after 31s
CI / Secret scan (push) Failing after 37s
CI / PR size check (push) Has been skipped
docs: туториалы first-PR + add-block + debug Babylon + Code of Conduct
2026-05-28 00:58:53 +03:00

118 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Туториал: твой первый 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/studio.git
cd player
```
Если ssh не работает (нет ключа в Gitea) — используй HTTPS:
```bash
git clone https://git.rublox.pro/rublox/studio.git
```
## Шаг 2: Запусти локально (3 минуты)
```bash
npm install # ~250 МБ, занимает 1-2 мин
cp .env.example .env # дефолты подходят
npm run dev
```
Открой http://localhost:5174 — увидишь приветственный экран. Без JWT/ticket'a реальные игры не загрузятся, но мы будем тестить через standalone-режим.
## Шаг 3: Standalone-режим для разработки (1 минута)
```bash
echo "VITE_STANDALONE=true" >> .env
# Перезапусти npm run dev (Ctrl+C → npm run dev снова)
```
Открой http://localhost:5174/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:5174/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/studio/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.