|
| 1 | +# How to Contribute |
| 2 | + |
| 3 | +We welcome any kind of contributions. Whether you are reporting a bug, coding a feature or correcting a typo. Every effort counts; and all contributions are greatly appreaciated. |
| 4 | + |
| 5 | +Another great way to contribute is to actually use rust-starter for your Open Source or Commercial projects. If you do, make sure to open an issue with a link to your project. |
| 6 | + |
| 7 | +### Testing Code |
| 8 | + |
| 9 | +To run all tests, run the following command. |
| 10 | + |
| 11 | +```sh |
| 12 | +cargo test --all |
| 13 | + |
| 14 | +``` |
| 15 | + |
| 16 | +Alternatively, if you have [`just`](https://github.com/casey/just) installed you can run the prebuilt recipes. *Not* using `just` is perfectly fine as well, it simply bundles commands automatically. |
| 17 | + |
| 18 | +For example, to test the code, as above simply run: |
| 19 | + |
| 20 | +```sh |
| 21 | +$ just run-tests |
| 22 | +``` |
| 23 | + |
| 24 | +### Linting Code |
| 25 | + |
| 26 | +### Debugging Code |
| 27 | + |
| 28 | +### Commit Messages |
| 29 | + |
| 30 | +Use a [conventional](https://github.com/ajoslin/conventional-changelog/blob/a5505865ff3dd710cf757f50530e73ef0ca641da/conventions/angular.md) changelog format so the changelog can be updated automatically using [clog](https://github.com/clog-tool/clog-cli) |
| 31 | + |
| 32 | + * Please format your commit subject line using the following format: `TYPE(COMPONENT): MESSAGE` where `TYPE` is one of the following: |
| 33 | + - `feat` - A new feature of an existing API |
| 34 | + - `imp` - An improvement to an existing feature/API |
| 35 | + - `perf` - A performance improvement |
| 36 | + - `docs` - Changes to documentation only |
| 37 | + - `tests` - Changes to the testing framework or tests only |
| 38 | + - `fix` - A bug fix |
| 39 | + - `refactor` - Code functionality doesn't change, but underlying structure may |
| 40 | + - `style` - Stylistic changes only, no functionality changes |
| 41 | + - `wip` - A work in progress commit (Should typically be `git rebase`'ed away) |
| 42 | + - `chore` - Catch all or things that have to do with the build system, etc |
| 43 | + - `examples` - Changes to existing example, or a new example |
| 44 | + * The `COMPONENT` is optional, and may be a single file, directory, or logical component. Parenthesis can be omitted if you are opting not to use the `COMPONENT`. |
| 45 | + |
| 46 | +### Tests and Documentation |
| 47 | + |
| 48 | +1. Create tests for your changes |
| 49 | +2. **Ensure the tests are passing.** Run the tests (`cargo test --all`), alternatively `just run-tests` if you have `just` installed. |
| 50 | +3. **Optional** Run the lints. |
| 51 | +4. Ensure your changes contain documentation if adding new APIs or features. |
| 52 | + |
| 53 | +### Preparing the PR |
| 54 | + |
| 55 | + |
| 56 | +1. `git rebase` into concise commits and remove `--fixup`s or `wip` commits (`git rebase -i HEAD~NUM` where `NUM` is number of commits back to start the rebase) |
| 57 | +2. Push your changes back to your fork (`git push origin $your-branch`) |
| 58 | +3. Create a pull request against `master`! (You can also create the pull request first, and we'll merge when ready. This a good way to discuss proposed changes.) |
| 59 | + |
| 60 | +### Goals |
| 61 | + |
| 62 | +* Remain backwards compatible when possible. |
| 63 | + Backward compatibility is not critical since projects do not depend on Rust Starter. But it's a good idea to have stable features and usage. |
| 64 | +* Reduce dependencies. |
| 65 | +* Follow best practices. |
| 66 | +* Ease of use and customization. |
0 commit comments