docs: add CONTRIBUTING.md guidelines
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
# How to contribute to Reface
|
||||||
|
|
||||||
|
Thanks for showing interest in contributing to rbx-reface. This is mostly a solo developer project so any support is welcome!
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Tools are managed via [Rokit](https://github.com/rojo-rbx/rokit). Install Rokit first, then run:
|
||||||
|
|
||||||
|
```
|
||||||
|
rokit install
|
||||||
|
```
|
||||||
|
|
||||||
|
This installs [Rojo](https://rojo.space) and [Wally](https://wally.run) at the versions pinned in `rokit.toml`.
|
||||||
|
|
||||||
|
To build the package:
|
||||||
|
|
||||||
|
```
|
||||||
|
rojo build --output build/build.rbxm
|
||||||
|
```
|
||||||
|
|
||||||
|
## Working on the module
|
||||||
|
|
||||||
|
The code should be well typed, documented when needed (but as self-documenting as possible), and easy to modify. Don't be scared to break up small things into their own functions, tables, or even submodules (especially data).
|
||||||
|
|
||||||
|
A few conventions to follow:
|
||||||
|
|
||||||
|
- **Naming**: `camelCase` for functions and variables, `PascalCase` for type names.
|
||||||
|
- **Types**: all function parameters and return values should be typed. Shared types live in `typing.luau`.
|
||||||
|
- **String interpolation**: use backtick interpolation (`` `like {this}` ``) rather than `..` concatenation.
|
||||||
|
- **Errors**: use `warn()` with a `rbx-reface: ` prefix for non-fatal issues, rather than `error()` or `print()`.
|
||||||
|
-
|
||||||
|
## Working on the face databases
|
||||||
|
|
||||||
|
The face databases (`faceByBundle.luau` and `faceByMesh.luau`) are generated - don't edit them by hand.
|
||||||
|
|
||||||
|
`scripts/faces.csv` is a plain list of face asset IDs. When a new face is added or the list changes, regenerate the databases by running:
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run scripts/codegen.py
|
||||||
|
```
|
||||||
|
|
||||||
|
The script hits the Roblox catalog API to resolve each face ID to its bundle, then resolves the bundle to its head mesh asset. It writes the results directly into `src/faceByBundle.luau` and `src/faceByMesh.luau`. It includes retry logic for rate limits, but may still be slow if you're adding many faces at once.
|
||||||
|
|
||||||
|
Python 3.13+ is required. [uv](https://astral.sh/uv) handles the dependency (`requests`) automatically.
|
||||||
|
|
||||||
|
## Opening issues and pull requests
|
||||||
|
|
||||||
|
- For bugs, please include the relevant head or face asset ID.
|
||||||
|
- For larger changes (new features, restructuring), open an issue first so we can verify where we're at before you put in the work.
|
||||||
|
- For small fixes or database additions, a PR directly is fine.
|
||||||
Reference in New Issue
Block a user