# How to Contribute

We'd love to receive your patches and contributions. Please keep your PRs as draft until such time that you would like us to review them.

## Setup

Install system dependencies:

[just](https://just.systems/man/en/pre-built-binaries.html#pre-built-binaries)

```shell
uv tool install -U rust-just
```

To see all available commands, run

```shell
just
```

## Test

Run linting and formatting:

```shell
just lint
```

This will also run auto-fixes and linting. We recommend that you commit your changes first.

Run level 0 tests:

```shell
just test
```

Test levels (`--levels`):

0. Smoke tests. Requires >=1 GPU.
1. Partial E2E tests. Requires >= 8 GPUs.
2. Full E2E tests. Requires >= 8 GPUs.

Test outputs are saved to `outputs/pytest/<test_name>`. To monitor a test, open `console.log`/`debug.log`.

List all tests:

```shell
just test-list
```

Run a single test:

```shell
just test-single <test_name> [--pdb]

# Example
just test-single "tests/assets_test.py::test_inference_assets[base]"
```

Generate coverage report:

```shell
just test-coverage
just run coverage html
```

## Code Reviews

All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.

## Signing Your Work

* We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original work, or you have rights to submit it under the same license, or a compatible license.

  * Any contribution which contains commits that are not Signed-Off will not be accepted.

* To sign off on a commit you simply use the `--signoff` (or `-s`) option when committing your changes:
  ```bash
  $ git commit -s -m "Add cool feature."
  ```
  This will append the following to your commit message:
  ```
  Signed-off-by: Your Name <your@email.com>
  ```

* Full text of the DCO:

  ```
    Developer Certificate of Origin
    Version 1.1

    Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
    1 Letterman Drive
    Suite D4700
    San Francisco, CA, 94129

    Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
  ```

  ```
    Developer's Certificate of Origin 1.1

    By making a contribution to this project, I certify that:

    (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or

    (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or

    (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.

    (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
  ```
