# ARK C++ SDK Board Support Contribution Guidelines
## Contribution Steps
1) Determine what's needed.
2) Open an Issue in the relevant Repo (either or both C++ SDK repos).
- Include the Requirements/Milestones.
3) Once discussed and approved, PR's should target a designated branch off `develop` created by the team.
- branch naming:
- `github.com/cpp-xxxxx/feat/boards/esp32`
4) Update the designated branch as needed.
5) Once the final code is ready, open a PR to merge the designated branch to the primary repo's `develop` branch.
## Milestones
A checklist of requirements needed to consider the implementation complete.
- [ ] [Board Information](#Board-Information)
- [ ] [External Libraries](#External-Libraries)
- [ ] [C++ SDK Building and Flashing](#C-SDK-Building-and-Flashing)
- [ ] [Unit Testing](#Unit-Testing)
- [ ] [CI Support](#CI-Support)
- [ ] [Example Sketch](#Example-Sketch)
- [ ] [Documentation](#Documentation)
Add any additional requirements or considerations to the ones listed above as-needed.
---
example:
```
- [x] ESP32
- [x] Milestones
- [x] External Libraries
- [x] <Cross Platform Library>
- [x] <Some Library>
- [x] PlatformIO
- [x] Arduino IDE
- [x] <Some Other Library>
- [x] Linux/macOS/Windows
- [x] C++ SDK Building and Flashing
- [x] Building
- [x] Flashing
- [x] Unit Testing
- [x] Full Tests
- [ ] Partial Tests
- [x] CI Support
- [x] PlatformIO
- [x] Arduino IDE
- [x] Example Sketch
- [x] Documentation
```
---
### Board Information
List the architecture/board as well as its specs.
example:
```
ESP32
- dev: Adafruit HUZZAH32 Feather
- cpu: 240 MHz dual core
- mem: 520 KB SRAM | 4 MByte flash
- comm: USB, WiFi, BlueTooth, SPI, I2C, SDIO
```
---
### External Libraries
If required.
For IoT libraries, they must be accessible to the PlatformIO and Arduino IDE library managers.
Installation of the library must also be tied to a release tag.
> _**Are any additional libraries needed?**_
> _**If so, which libraries?**_
> _**Is the additional library Cross Platform?**_
> _**If not, which platform does it target?**_
> _**Is the library available via the PIO and Arduino Library Managers?**_
> _**Is the library integration tied to a release version?**_
example:
```
<Some Library>
- Required for:
- [x] PlatformIO
- [x] Arduino IDE
- Available via:
- [x] PlatformIO Library Manager
- [x] Arduino IDE Library Manager
```
### C++ SDK Building and Flashing
> _**Does the binary build successfully for the target platform?**_
> _**Does the binary flast successfully to the target platform/does it fit?**_
---
### Unit Testing
> _**Does this work with our Unit tests as is?**_
> _**If not, does it require new unit tests?**_
> _**...does it only work with some of the unit tests?**_
This step is considered complete when test cases have been discussed, and all unit tests are passing successfully on the device.
---
### CI Support
> _**Does it pass the Arduino IDE workflow successfully?**_
> _**Does it pass the PlatformIO workflow successfully?**_
> _**Are any additional workflows needed?**_
---
### Example Sketch
> _**Has a sketch been created?**_
> _**Does it build for the target platform?**_
> _**Does it flash to the target platform?**_
> _**Does the example sketch run successfully on the target platform?**_
---
### Documentation
> _**Has the relevant documentation been updated?**_
> _e.g. requirements, building, flashing, running, etc._
The final PR to merge the designated feature branch into `develop` should also include updates to the Changelog.