studio/docs/ONBOARDING.md
МИН 61fba4e174
Some checks failed
CI / Lint + Format (push) Failing after 32s
CI / Build (push) Failing after 37s
CI / Secret scan (push) Failing after 37s
CI / PR size check (push) Has been skipped
fix: починка билда + studio.rublox.pro инфра
Большой консолидирующий коммит после поднятия studio.rublox.pro (28 мая 2026).
Содержит изменения которые делались в процессе подготовки прод-окружения:

Фиксы импортов после выноса из minecraftia:
- Массовая замена путей ../../components → ../components (40+ файлов в src/community/, src/admin-preview/)
- Замена ../KubikonEditor/ → ../editor/, ../KubikonStudio/ → ../community/, ../AdminPreview/ → ../admin-preview/
- API.js скопирован из минки целиком (было 8 экспортов, стало 312)
- Добавлены PLAYER_URL, MyButton_1, недостающие компоненты
- Заменены require() на статические ES-imports в BabylonScene, PrimitiveManager, GameRuntime (Vite не поддерживает CJS require)

Структура ассетов:
- public/kubikon-templates/ → public/assets/kubikon-templates/
- public/kubikon-learn/ → public/assets/kubikon-learn/
- (код искал в /assets/, файлы лежали без /assets/)

Навигация роутов внутри студии:
- /kubikon-studio/docs → /docs (90+ навигационных вызовов sed-replaced)
- /kubikon-editor/X → /edit/X, /kubikon/play/X → /play/X, /kubikon/gd/X → /gd/X

UI:
- Новый компонент StudioHeader (61px, как в минке) + копия favicon
- WithHeader wrapper в App.jsx для всех страниц кроме fullscreen-редактора/плеера
- SSO ticket-flow в AuthContext (auto-redeem #ticket= при загрузке)
- Тёмная тема карточек игр в ВИКИ (фон #1c2231 вместо #fff, картинка впритык)

Документация:
- docs/ONBOARDING.md — путь нового контрибьютора от нуля до PR
- docs/TUTORIAL_ADD_SCRIPT_API.md — как добавить game.* API
- API_USAGE.md — список эндпоинтов backend
- README в подпапках engine/, engine/terrain/, engine/voxel/, engine/robloxterrain/, engine/types/

.gitignore:
- public/wiki/ исключён (73МБ PNG, будут на CDN отдельной задачей)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 05:01:13 +03:00

355 lines
14 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.

# Onboarding нового разработчика — путь от нуля до первого PR
Этот документ — пошаговый сценарий **первого дня** нового контрибьютора Рублокса. От «никогда не видел проект» до «мой PR смержили».
Время — **~2-3 часа** при хорошей сети.
---
## Что мы делаем
Тебе предстоит:
1. **Создать аккаунт** в Майнкрафтии (если ещё нет).
2. **Получить роль `developer`** от Лида.
3. **Зайти в /developer** на team.rublox.pro — это твой dashboard контрибьютора.
4. **Подписать CLA** (Contributor License Agreement, одна кнопка).
5. **Добавить SSH-ключ** в Gitea.
6. **Склонировать репо** (player или studio).
7. **Поднять локальное окружение** (npm install + dev-сервер).
8. **Открыть staging** для тестов с реальными данными.
9. **Сделать ветку, изменения, коммит, push, открыть PR.**
10. **Получить ревью** и (после правок если нужно) — merge.
---
## Шаг 1. Аккаунт в Майнкрафтии
Если ещё нет:
1. Зайди на https://minecraftia-school.ru/
2. Жми «Регистрация», заполняй (email, пароль, имя).
3. Подтверди email через ссылку в письме (или через Яндекс OAuth).
Запиши свой **email** и **числовой user_id** — он будет нужен дальше. Найти его можно так: открой свой профиль (`/profile`), там в URL будет id.
---
## Шаг 2. Получить роль `developer`
Только Лид (МИН) может выдать эту роль. Напиши ему в команде, дай свой `user_id`. Он выполнит:
```bash
POST https://team.rublox.pro/api-team/developer/grant/<твой_uid>
```
После этого в team-flask твой `team_roles_extra` будет содержать `developer`, и у тебя появится доступ к `/developer`.
**Как проверить:** зайди на https://team.rublox.pro/ — в сайдбаре должен появиться пункт **«Разработка»**. Если нет — роль не выдана.
---
## Шаг 3. Зайти в /developer (твой dashboard)
URL: https://team.rublox.pro/developer
Что увидишь — 7 вкладок:
| Вкладка | Что в ней |
|---|---|
| **Обзор** | Твоя статистика (PR, merged, score) + открытые PR команды + последние коммиты |
| **Pull Requests** | Все открытые PR в org `rublox`, можно фильтровать |
| **Коммиты** | Последние 50 коммитов по всем репо |
| **Репозитории** | Карточки `rublox/player` + `rublox/studio` с командой `git clone` |
| **Топ** | Лидерборд разработчиков по score |
| **SSH-ключи** | Управление твоими SSH-ключами в Gitea |
| **CLA** | Статус подписи Contributor License Agreement |
---
## Шаг 4. Подписать CLA
CLA — это юридическое соглашение что ты передаёшь Рублоксу права на свой код (стандартная opensource-практика, как у Google CLA).
1. Открой вкладку **«CLA»**.
2. Прочитай текст соглашения.
3. Жми **«Подписать»**.
В БД создастся запись `team_cla_signatures (user_id, version, signed_at, ip, ua)` — это и есть твоя подпись.
**Без CLA твои PR смержить нельзя.** Это технически возможно (Gitea пропустит), но юридически — нет.
---
## Шаг 5. Добавить SSH-ключ в Gitea
Чтобы делать `git push` без ввода пароля.
### 5.1. Сгенерируй ключ (если нет)
В терминале:
```bash
ssh-keygen -t ed25519 -C "твой_email@example.com"
```
Жми Enter на все вопросы (без passphrase для простоты). Получится пара файлов:
- `~/.ssh/id_ed25519` — приватный (НИКОМУ не показывай)
- `~/.ssh/id_ed25519.pub` — публичный (его и загружаем)
### 5.2. Скопируй публичный ключ
```bash
cat ~/.ssh/id_ed25519.pub
```
Скопируй вывод целиком (начинается с `ssh-ed25519 AAAA...`).
### 5.3. Добавь в Gitea
В /developer открой вкладку **«SSH-ключи»** → жми «Добавить ключ» → вставь публичный ключ → название («Мой ноут»).
Это под капотом дёрнет Gitea admin API и привяжет ключ к твоему аккаунту в `git.rublox.pro`.
### 5.4. Проверь
```bash
ssh -T git@git.rublox.pro -p 2222
```
Должен ответить `Hi <твой_логин>!`. Если ругается на permission denied — ключ не привязался, проверь шаг 5.3.
---
## Шаг 6. Склонировать репо
В /developer вкладка **«Репозитории»** — выбери что хочешь:
### Player (веб-плеер, что юзеры открывают для игры)
```bash
git clone ssh://git@git.rublox.pro:2222/rublox/player.git
cd player
```
### Studio (редактор где создаются игры)
```bash
git clone ssh://git@git.rublox.pro:2222/rublox/studio.git
cd studio
```
**Что выбрать первым:** если ты frontend-разработчик React, и хочешь начать с чего-то проще — бери **player** (он меньше, ~50К строк). Studio тяжелее (~80К + Babylon-движок).
---
## Шаг 7. Поднять локальное окружение
### 7.1. Требования
- **Node.js 20+** ([nodejs.org](https://nodejs.org/))
- **npm 10+** (идёт с Node)
- **Git** ([git-scm.com](https://git-scm.com/))
- IDE — рекомендую VS Code
Проверка:
```bash
node --version # должно быть v20.x.x или выше
npm --version # должно быть 10.x.x или выше
```
### 7.2. Установить зависимости
```bash
npm install
```
Это займёт 2-5 минут. Скачает Babylon.js, React, Vite и ~200 других пакетов в `node_modules/`.
### 7.3. Запустить dev-сервер
```bash
npm run dev
```
Vite запустит локальный сервер:
- **player** — http://localhost:5173
- **studio** — http://localhost:5174
Открой URL в браузере — увидишь свою локальную копию.
**Как работает API в dev-режиме:** Vite автоматически проксирует все `/api-*` запросы на **staging-окружение** `https://dev-api.rublox.pro/` (это копия прод-БД с анонимизированными юзерами). То есть твоя локальная копия будет ходить на staging — никаких проблем с CORS, никаких опасностей задеть прод.
---
## Шаг 8. Аутентификация в dev-режиме
Локально у тебя нет JWT — окно регистрации/логина откроется.
**Два варианта:**
### Вариант A — сделать тестовый аккаунт прямо на staging
Зарегистрируйся на dev-api.rublox.pro как новый юзер (или используй один из 2487 анонимизированных, чьи пароли все сброшены на `test123`). У этих юзеров уже есть тестовые проекты в БД.
### Вариант B — STANDALONE-режим (без бэка)
Создай файл `.env.local` в корне репо:
```
VITE_STANDALONE=true
```
И перезапусти `npm run dev`. Студия/плеер запустятся в режиме «гость» — все API-запросы замокированы, можно тестировать UI без реальных данных.
---
## Шаг 9. Сделать первое изменение
Для тренировки — измени какой-нибудь видимый текст или цвет.
### 9.1. Создай ветку
```bash
git checkout -b fix/typo-on-homepage
```
Соглашение по именам:
- `feature/<short-name>` — новая фича
- `fix/<short-name>` — багфикс
- `chore/<short-name>` — рефакторинг, документация
### 9.2. Сделай изменение
Открой файл в IDE, измени что-нибудь.
Пример (для studio): открой `src/community/KubikonStudio.jsx`, найди строку `'Создавай большие игры'`, замени на что-нибудь. Сохрани — Vite сделает HMR и ты увидишь изменение в браузере мгновенно.
### 9.3. Проверь свой код
```bash
npm run lint # ESLint — проверка стиля
npm run format:check # Prettier — проверка форматирования
npm run build # Сборка должна пройти
```
Если что-то ругается — поправь.
### 9.4. Закоммить
```bash
git add .
git commit -m "fix: typo on homepage"
```
Формат commit message — **Conventional Commits**:
- `feat: добавил кнопку X`
- `fix: исправил Y`
- `chore: рефакторинг Z`
- `docs: обновил README`
### 9.5. Запушь
```bash
git push -u origin fix/typo-on-homepage
```
Gitea ответит:
```
remote: Create a new pull request for 'fix/typo-on-homepage':
remote: https://git.rublox.pro/rublox/studio/compare/main...fix/typo-on-homepage
```
---
## Шаг 10. Открыть Pull Request
### 10.1. Перейти по ссылке
Открой URL из вывода `git push`, ИЛИ зайди на https://git.rublox.pro/rublox/studio → жми «Pull Requests» → «New Pull Request».
### 10.2. Заполнить PR
**Title:** одна строка, на русском, описывает что сделано
- ✅ «fix: опечатка на главной странице студии»
- ❌ «исправление»
**Description:** что и зачем, можно добавить скриншот «до/после». Шаблон:
```markdown
## Что сделано
Исправил опечатку «Создавай большие иры» → «Создавай большие игры».
## Зачем
Юзеры жаловались, выглядит непрофессионально.
## Как проверить
1. Открой главную студии
2. В hero-баннере смотри заголовок
3. Должно быть «игры», не «иры»
```
### 10.3. Жми «Create Pull Request»
Сразу после создания запустится **CI** в Gitea Actions:
- `lint` — ESLint без warnings
- `format-check` — Prettier
- `build` — vite build проходит
- `secret-scan` — trufflehog не нашёл утечек секретов
- `size-check` — PR не больше 1000 строк (warning)
Жди ~3-5 минут пока зелёные галочки появятся. Если красная — открой лог, поправь, `git commit --amend && git push -f` или новым коммитом.
### 10.4. Жди ревью
В **/developer → Pull Requests** твой PR появится в списке. Кто-то из core-команды его посмотрит, оставит комментарии или сразу одобрит.
Если будут замечания — внеси правки, закоммить, запушь. PR автоматически обновится.
### 10.5. Merge
Когда CI зелёный и ревьюер одобрил — Лид нажмёт **«Merge»**.
После merge:
- Твои метрики обновятся: `prs_merged += 1`, `score += 5`.
- Ты появишься в **«Топе»** лидерборда (если ещё нет).
- На staging автоматически уйдёт твой код (через ~5 минут — CD не настроен, ручной редеплой).
---
## Что почитать дальше
После первого merged PR — погружайся глубже:
- [ARCHITECTURE.md](../ARCHITECTURE.md) — как устроена студия архитектурно
- [src/editor/engine/README.md](../src/editor/engine/README.md) — движок Babylon
- [TUTORIAL_ADD_BLOCK.md](./TUTORIAL_ADD_BLOCK.md) — добавить новый тип блока
- [TUTORIAL_DEBUG_BABYLON.md](./TUTORIAL_DEBUG_BABYLON.md) — отладка 3D-сцены
- [API_USAGE.md](../API_USAGE.md) — какие эндпоинты бэкенда мы дёргаем
## Куда обращаться за помощью
- **Канал #разработка** в https://team.rublox.pro — главное место для вопросов
- **Issues в Gitea** — https://git.rublox.pro/rublox/studio/issues — для багов/предложений
- **Лид (МИН)** — последняя инстанция, пингуй если ничего не работает
---
## Чек-лист готовности
Перед тем как считать что освоился:
- [ ] Аккаунт в Майнкрафтии
- [ ] Роль `developer` от Лида
- [ ] CLA подписан
- [ ] SSH-ключ в Gitea, `ssh -T git@git.rublox.pro -p 2222` работает
- [ ] Репо склонирован, `npm install` прошёл
- [ ] `npm run dev` запустил, открыл http://localhost:5173 (или 5174)
- [ ] Залогинился в локальную копию
- [ ] Сделал тестовое изменение, увидел через HMR
- [ ] Запушил, открыл PR, CI зелёный, merge получил
Прошёл всё — поздравляю, ты в команде. Дальше — выбирай задачу из issues и поехали.