player/CONTRIBUTING.md
МИН 87444ee2c8 Initial public release: Rublox Player v1.0
Open-source web player for Rublox games, dual-licensed under
AGPL-3.0 + Commercial.

Highlights:
- Babylon.js 7 + React 18 + Vite 5 stack
- Self-contained engine (~46k lines): BlockManager, ModelManager,
  PlayerController, ScriptSandboxWorker, MultiplayerSync, 30+ GD
  gamemodes
- Configurable backend via VITE_API_BASE and friends — works against
  staging (dev-api.rublox.pro) out of the box
- Standalone mode (VITE_STANDALONE=true) loads a bundled sample game
  for first-run without any backend
- Full docs: README, ARCHITECTURE, CONTRIBUTING, SECURITY, CHANGELOG
- Lint + format scaffolding (ESLint + Prettier + EditorConfig)
- Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md
- Issue templates: bug_report, feature_request, security_disclosure

Removed before public release:
- frontend_deploy.py (contained production SSH credentials)
- ~27 admin endpoints (kept in private repo)
- Hard-coded internal URLs and IPs
- All previous git history (clean repo init)
2026-05-27 23:04:04 +03:00

151 lines
4.0 KiB
Markdown

# Contributing to Rublox Player
Thanks for your interest! Here's everything you need to know.
## Before your first PR
1. **Sign the [CLA](./CLA.md)** — open `https://team.rublox.pro/developer/cla` (you need a `developer` role; ask the maintainer) OR comment `/sign-cla` on your PR.
2. **Have a Gitea account** linked via OAuth to team.rublox.pro.
3. **Add your SSH key** to Gitea profile (otherwise you push by HTTPS + password).
## Workflow
```bash
# 1. Fork or clone (you can push to a feature branch directly if you have access)
git clone ssh://git@git.rublox.pro:2222/rublox/player.git
cd player
npm install
cp .env.example .env
# 2. Create a feature branch
git checkout -b feature/short-description
# 3. Make changes
npm run dev # test locally
npm run lint # check ESLint
npm run format # apply Prettier
# 4. Commit (Conventional Commits)
git commit -m "feat: add jump animation to GdBall"
# Other prefixes: fix:, chore:, docs:, refactor:, test:, perf:, ci:
# 5. Push and open PR
git push origin feature/short-description
# Open PR via https://git.rublox.pro/rublox/player
```
## Code style
We use **Prettier** (auto-format) + **ESLint** (lint). The config is committed in `.prettierrc` and `.eslintrc.json`.
Key rules:
- 2-space indent
- Single quotes (`'foo'`, not `"foo"`)
- Semicolons required
- Trailing comma in multi-line literals
- 100-char line width
- No `eval`, no `new Function`, no `innerHTML = ...`
- React: hooks rules enforced (`react-hooks/rules-of-hooks`)
Run before commit:
```bash
npm run format # auto-fixes most things
npm run lint # warns about the rest
```
A pre-commit hook (Husky, if installed) will block you if Prettier check fails.
## Branch naming
| Prefix | Use for |
|---|---|
| `feature/...` | New features |
| `fix/...` | Bug fixes |
| `chore/...` | Refactoring, deps, tooling |
| `docs/...` | Documentation only |
| `perf/...` | Performance improvements |
## Commit messages (Conventional Commits)
```
<type>: <short description>
[optional body]
[optional footer: BREAKING CHANGE / Closes #N]
```
Types: `feat`, `fix`, `chore`, `docs`, `refactor`, `test`, `perf`, `ci`, `style`.
**Good:**
- `feat: add WaveMode to GdGameModeRegistry`
- `fix: ScriptSandbox crashes on Worker timeout`
- `perf: throttle ui.set() to 250ms with diff check`
**Bad:**
- `update code`
- `wip`
- `fixed stuff`
## PR template
When you open a PR, fill in:
```markdown
## What
(1-2 sentences: what does this PR do?)
## Why
(motivation: bug report, feature request, related issue #N)
## How to test
(reproducible steps a reviewer can run)
## Screenshots / video (if UI change)
## Checklist
- [ ] `npm run lint` passes
- [ ] `npm run format:check` passes
- [ ] `npm run build` succeeds
- [ ] Tested locally with `npm run dev`
- [ ] Updated relevant docs (README / ARCHITECTURE / CHANGELOG)
- [ ] CLA signed
```
## Review process
- The repo maintainer (МИН) reviews every PR.
- Expect feedback within **48 hours** (often same day).
- Small PRs (<300 lines changed) get reviewed fast. PRs >1000 lines will be asked to split.
- After approval, **maintainer merges** (only the maintainer has merge permission).
- After merge, an automated webhook triggers production deploy.
## What we won't merge
- PRs that add new external dependencies without discussion
- PRs that touch sensitive paths (`engine/scripts/ScriptSandbox*.js`, `engine/multiplayer/*`) without security review
- PRs that break the build or lint
- PRs from contributors who haven't signed the CLA
- Massive refactors without a tracking issue discussed beforehand
## What we love
- Bug fixes with reproducible test cases
- Performance improvements with before/after metrics
- New `engine/gd/Gd*.js` gamemodes
- New script API additions (in `ScriptSandboxAPI.js`)
- Documentation improvements (especially examples)
## Security
Found a vulnerability? **Don't open a public issue.** Email `security@rublox.pro` directly. See [SECURITY.md](./SECURITY.md).
## Questions?
- Open an issue with the **Question** label
- Or hop into the `#разработка` channel at https://team.rublox.pro/chat