# 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/` — новая фича - `fix/` — багфикс - `chore/` — рефакторинг, документация ### 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 и поехали.