# Contributing guide

This guide mainly focuses on the steps to follow to submit an issue or a pull request.

## 1. Issues

### 1.1 Before opening an issue

Before posting an issue, please ensure:
* You are using the latest commit.
* Your issue is **not** a vulnerability. Otherwise, please refer to section [3](CONTRIBUTING.md#3-vulnerabilities) below.
* Your issue is **related to** the software provided in this repository. Otherwise, please refer to section [4](CONTRIBUTING.md#4-support-requests-and-miscellaneous) below.
* Your issue is not already reported, fixed or discussed in a previous one. Remember to browse the **closed** issues.

### 1.2 Posting the issue

When you have checked the previous points, create a new report from the **Issues** tab of this repository. A couple of templates are available [here](../../issues/new/choose).

## 2. Pull Requests

### 2.1 Before opening a pull request

STMicrolectronics is happy to receive contributions from the community, based on an initial Contributor License Agreement (CLA) procedure.

* If you are an individual writing original source code and you are sure **you own the intellectual property**, then you need to sign an **Individual** [CLA](https://cla.st.com).
* If you work for a company that wants also to allow you to contribute with your work, your company needs to provide a **Corporate** [CLA](https://cla.st.com) mentioning your GitHub account name.
* If you are not sure that a CLA (Individual or Corporate) has been signed for your GitHub account you can check the [CLA](https://cla.st.com) dedicated page.

> [!IMPORTANT]
> Please note that:
> * The Corporate CLA will always take precedence over the Individual CLA.
> * One CLA submission is sufficient, for any project proposed by STMicroelectronics.

### 2.2 How to proceed

* We recommend to engage first a communication thru an issue, in order to present your proposal, just to confirm that it corresponds to STMicroelectronics' domain or scope.
* Then fork the project to your GitHub account to further develop your contribution. Please use the latest commit version.
* Please, submit one pull request per new feature or proposal. This will ease the analysis and the final merge if accepted.

## 3. Vulnerabilities

To report a **vulnerability**, please refer to the [SECURITY.md](./SECURITY.md) file for instructions.

## 4. Support requests and miscellaneous

For support requests or any other topics not related to the content of this repository, you can submit a post to the **ST Community** on the appropriate topic [page](https://community.st.com/s/topiccatalog).
