118 lines
6.6 KiB
Markdown
118 lines
6.6 KiB
Markdown
# Туториал: твой первый 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.
|