| # How to Contribute |
| |
| We'd love to accept your patches and contributions to this project. There are |
| just a few small guidelines you need to follow. |
| |
| ## 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.com/conduct/). |
| |
| ## Building the project |
| |
| To build, package, and run all unit tests run the command |
| |
| ``` |
| mvn clean verify |
| ``` |
| |
| ### Running Integration tests |
| |
| To include integration tests when building the project, you need access to |
| a GCP Project with a valid service account. |
| |
| For instructions on how to generate a service account and corresponding |
| credentials JSON see: [Creating a Service Account][1]. |
| |
| Then run the following to build, package, run all unit tests and run all |
| integration tests. |
| |
| ```bash |
| export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account.json |
| mvn -Penable-integration-tests clean verify |
| ``` |
| |
| ## Code Samples |
| |
| All code samples must be in compliance with the [java sample formatting guide][3]. |
| Code Samples must be bundled in separate Maven modules. |
| |
| The samples must be separate from the primary project for a few reasons: |
| 1. Primary projects have a minimum Java version of Java 8 whereas samples can have |
| Java version of Java 11. Due to this we need the ability to |
| selectively exclude samples from a build run. |
| 2. Many code samples depend on external GCP services and need |
| credentials to access the service. |
| 3. Code samples are not released as Maven artifacts and must be excluded from |
| release builds. |
| |
| ### Building |
| |
| ```bash |
| mvn clean verify |
| ``` |
| |
| Some samples require access to GCP services and require a service account: |
| |
| ```bash |
| export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account.json |
| mvn clean verify |
| ``` |
| |
| ### Code Formatting |
| |
| Code in this repo is formatted with |
| [google-java-format](https://github.com/google/google-java-format). |
| To run formatting on your project, you can run: |
| ``` |
| mvn com.coveo:fmt-maven-plugin:format |
| ``` |
| |
| [1]: https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account |
| [2]: https://maven.apache.org/settings.html#Active_Profiles |
| [3]: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/main/SAMPLE_FORMAT.md |