# How to contribute

First of all, thanks for contributing!

This document provides some basic guidelines for contributing to this repository. To propose improvements, feel free to submit a PR.

## Reporting a Bug - Requesting a feature - GitHub Issues

* **Ensure the bug was not already reported** by searching on GitHub under [Issues][1].
* If you're unable to find an open issue addressing the problem, [open a new one][2].
  - **Fill out the issue template completely**. Label the issue properly.
    - Add `severity/` label.
    - Add `documentation` label if this issue is related to documentation changes.
* If you have a feature request, it is encouraged to [contact support][3] so the request can be prioritized and properly tracked.
* **Do not open an issue if you have a question**, instead [contact support][3].

## Suggesting an enhancements - Pull Requests

Client source code is generated using [apigentools](https://apigentools.readthedocs.io/en/latest/).
 
While you can create an issue to suggest a client enhancement, you won't be able to make a Pull Request for it.

Changes can only be made to:
- Improve tests
- Improve dev tooling
- Improve documentation. 

If that's the case, many thanks!

Read the [development guide](DEVELOPMENT.md) for more information on how to get started.

In order to ease/speed up our review, here are some items you can check/improve when submitting your PR:
* **Ensure an [Issue has been created](#reporting)**.
* Avoid changing too many things at once. Make sure that your Pull Requests only fixes one Issue at the time.
* Make sure that **all tests pass locally**.
* Summarize your PR with a **meaningful title** and **fill out the pull request description template completely!**

Your pull request must pass all CI tests. If you're seeing an error and don't think it's your fault, it may not be! 
[Join us on Slack][5] or send us an email, and together we'll get it sorted out.

### Keep it small, focused

Avoid changing too many things at once. For instance if you're fixing two different
issues at once, it makes reviewing harder and the _time-to-release_ longer.

### Commit Messages

Please don't be this person: `git commit -m "Fixed stuff"`. Take a moment to
write meaningful commit messages.

The commit message should describe the reason for the change and give extra details
that will allow someone later on to understand in 5 seconds the thing you've been
working on for a day.

### Releasing

The release procedure is managed by Datadog, instructions can be found in the [RELEASING](/RELEASING.md) document.
However, note that improvements to tests and documentation do not end up in changelogs. Only client improvements do.


## Asking a questions

Need help? Contact [Datadog support][3]

## Additional Notes

### Issue and Pull Request Labels

This section lists the labels we use to help us track and manage issues and pull requests.

| Label name                    | Usage                    | Description
|-------------------------------|--------------------------|------------------------------------------------------------
| `backward-incompatible`       | Issues and Pull Requests | Warn for backward incompatible changes.
| `changelog/Added`             | Pull Request Only        | Added features results into a minor version bump.
| `changelog/Changed`           | Pull Request Only        | Changed features results into a major version bump.
| `changelog/Deprecated`        | Pull Request Only        | Deprecated features results into a major version bump.
| `changelog/Fixed`             | Pull Request Only        | Fixed features results into a bug fix version bump.
| `changelog/no-changelog`      | Pull Request Only        | Changes don't appear in changelog.
| `changelog/Removed`           | Pull Request Only        | Deprecated features results into a major version bump.
| `changelog/Security`          | Pull Request Only        | Fixed features results into a bug fix version bump.
| `ci/skip`                     | Pull Request Only        | Skip GitHub action running tests.
| `community/help-wanted`       | Issue Only               | Community help wanted.
| `community`                   | Issues and Pull Requests | Community driven changes.
| `dev/testing`                 | Issues and Pull Requests | Tests related changes.
| `dev/tooling`                 | Issues and Pull Requests | Tooling related changes.
| `do-not-merge/HOLD`           | Pull Request Only        | Do not merge this PR.
| `do-not-merge/WIP`            | Pull Request Only        | Do not merge this PR.
| `documentation`               | Issues and Pull Requests | Documentation related changes.
| `duplicate`                   | Issue Only               | Duplicate issue.
| `invalid`                     | Issue Only               | Invalid issue.
| `kind/bug`                    | Issue Only               | Bug related issue.
| `kind/feature-request`        | Issue Only               | Feature request related issue.
| `severity/critical`           | Issue Only               | Critical severity issue.
| `severity/major`              | Issue Only               | Major severity issue.
| `severity/minor`              | Issue Only               | Minor severity issue.
| `severity/normal`             | Issue Only               | Normal severity issue.
| `stale`                       | Issues and Pull Requests | Stale - Bot reminder.
| `stale/exempt`                | Issues and Pull Requests | Exempt from being marked as stale.

[1]: https://github.com/DataDog/datadog-api-client-python/issues
[2]: https://github.com/DataDog/datadog-api-client-python/issues/new
[3]: https://docs.datadoghq.com/help
[4]: https://keepachangelog.com/en/1.0.0
[5]: https://datadoghq.slack.com
