# How to Contribute to Google Home UI Automator

We'd love to accept your patches and contributions to Google Home UI Automator.

## Table of contents

*   [General information](#general-information)
    *   [Contributor License Agreement](#contributor-license-agreement)
    *   [Code reviews](#code-reviews)
    *   [Community guidelines](#community-guidelines)
*   [Contributor workflow](#contributor-workflow)

## General information

### Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution;
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.

You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.

### 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.

### Community guidelines

This project follows [Google's Open Source Community Guidelines](https://opensource.google/conduct/).

## Contributor workflow

We are happy to accept contributions and guide you through the process. \
The contributor workflow has not been fully ironed out yet, so make sure to
start by sending an email to google-home-testsuite+ui-automator@google.com
with an outline of your planned change. \
We will review your proposal and advise on the next steps you will need to take.

1.  [Sign a Contributor License Agreement](https://cla.developers.google.com/)
    if you haven't done so already. This only needs to be done once.
1.  Open a pull request and add [timmatt-lee](https://github.com/timmatt-lee)
    as a reviewer.

