# Contributing to testcontainers-rs-modules
First of all, thank you for contributing to testcontainers-rs-modules-community. All contributions are welcome!
## Getting started
### The quick-wins!
- Consider giving a star to this repo and become one of our [stargazers](https://github.com/testcontainers/testcontainers-rs-modules-community/stargazers)
- Consider joining our [Rust channel](https://testcontainers.slack.com/archives/C048EPGRCER) within the [TestContainers Slack Workspace](https://testcontainers.slack.com/)
### Reporting bugs
- Check if there is an [existing issue](https://github.com/testcontainers/testcontainers-rs-modules-community/issues) first.
- You may also want to check bugs in [testcontainers-rs library](https://github.com/testcontainers/testcontainers-rs/issues) when applicable
- When in doubt whether you've found new issue/bug or not, consider discussing it with our community on Slack
### Requesting new modules
- Check if there is an [existing issue](https://github.com/testcontainers/testcontainers-rs-modules-community/issues), since your request might be tracked there.
- Feel free to reach out to our community to clarify your use case!
## Code Contributions
### Setting up local development
- Ensure you have an [up-to-date Rust toolchain](https://rustup.rs/), with `clippy` and `rustfmt` components installed
- Install the [cargo-hack](https://github.com/taiki-e/cargo-hack) subcommand (recommended)
- Fork this repository
- Optionally, if you need to run `Oracle` tests, you must setup `Oracle Client`, as indicated in the documentation of the [Rust-oracle](https://docs.rs/oracle/latest/oracle/) crate (note that ARM architecture is not supported, as there is no Oracle Database Free port for ARM chips)
### Working with existing modules
- When extending/changing existing API, ensure that any new ones are tracked on [rustdocs](https://docs.rs/testcontainers-modules/latest/testcontainers_modules/)
- When fixing an issue, consider providing a new test case for it
### Adding new modules or changing existing ones
Before adding a new module, it's recommended reviewing the
[testcontainers-rs library](https://github.com/testcontainers/testcontainers-rs)
along with existing modules that are built on top of it! In addition, pay attention to our project conventions : public APIs
are exposed through `mod.rs` files and conditionally compiled as Cargo features.
- Ensure you have a proper feature configuration on `Cargo.toml` when adding a new module
- Ensure you have declared pinned versions of Docker image tags for your module
- Consider providing a `Default` trait implementation for your `TestContainer` struct when applicable
- Consider also using the `Builder` pattern when your `TestContainer` accepts several different env vars!
- Ensure you have added proper `rustdocs` reflecting the image reference (e.g. to [docker-hub](hub.docker.com)) and examples of how to use your APIs.
- Ensure you have added tests exercising your module
- Consider also providing an example on how to use your module from an app
### Raising Pull Requests
- Ensure you'll have a green build on your commits, for instance running some of our CI checks
```bash
cargo fmt --all -- --check
cargo clippy --all-features
cargo hack test --each-feature --clean-per-run
```
- Consider following [conventional commits](https://julien.ponge.org/blog/the-power-of-conventional-commits/) when adding commits (recommended)
- Raise your PR 🔥
- Ensure you follow the [conventional commits](https://julien.ponge.org/blog/the-power-of-conventional-commits/) in your Pull Request title
- Don't forget to [link an existing issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) when applicable (fixing it or just mentioning it)
## License
Please note that all code contributed by you will follow the [MIT license](http://opensource.org/licenses/MIT),
without any additional terms.