| # 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 (CLA). 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. | |
| ## Checking out source | |
| ### Set up git | |
| If you haven't already, configure your git user email and name: | |
| ``` | |
| git config --global user.email "<your-email>@example.com" | |
| git config --global user.name "Your Name" | |
| ``` | |
| ### Checkout | |
| With your git configured, you can now checkout the source with: | |
| ``` | |
| git clone https://cos.googlesource.com/cos/tools && (cd tools && f=`git rev-parse --git-dir`/hooks/commit-msg ; mkdir -p $(dirname $f) ; curl -Lo $f https://gerrit-review.googlesource.com/tools/hooks/commit-msg ; chmod +x $f) | |
| ``` | |
| The last command not only clones the repository but also adds a git pre-commit | |
| hook that will be explained below in "Making changes". | |
| ### Unit Testing | |
| Install `bazel` and `mtools`, and ensure `python` is an executable in your | |
| `$PATH`, pointing to a Python 3 binary. The full suite of unit tests can be | |
| initiated with | |
| ``` | |
| bazel test ... | |
| ``` | |
| Unit tests can also be run using `run_unit_tests.sh`. The script runs all unit | |
| tests under src/pkg and src/cmd. These unit tests are a part of presubmits for | |
| changes in cos/tools. | |
| ### Integration Testing | |
| Integration tests for cos-customizer are located under `testing/`. | |
| `run_builds.sh` launches dozens of simultaneous cloud builds and waits for the | |
| status of each build and reports back failures. It is used in two ways in this | |
| repository: | |
| - To run cos-customizer integration tests (20+ concurrent builds in | |
| Cloud Build). Minimum quota requirements include ~10 K80s in us-west1. | |
| - To publish container images in src/cmd to AR (8+ concurrent builds) | |
| ``` | |
| ./run_builds.sh -p <GCP project name> -m <test|publish> | |
| ``` | |
| cos-customizer integration tests are run as postsubmits. Ensure that the | |
| postsubmits are successful after submitting a change. The postsubmit builds | |
| can be monitored on the CloudBuild [dashboard](https://pantheon.corp.google.com/cloud-build/builds?e=13803378&jsmode=o&mods=allow_workbench_image_override&project=google.com:cloud-image-docker-builder) | |
| for project `google.com:cloud-image-docker-builder`. | |
| ## Making changes | |
| The typical git workflow applies here. You can use `git checkout -b` to create a | |
| branch and `git commit` to commit local changes. The pre-commit hook that was | |
| downloaded earlier will insert a Gerrit (Gerrit is explained below) Change-Id | |
| into every local commit you make. This Change-Id is specific to Gerrit and | |
| defines a change: one change and the corresponding review in Gerrit will have | |
| one Change-Id. If a Change-Id is not provided in the commit message, Gerrit will | |
| reject the commit. While you can manually add a Change-Id later, it's strongly | |
| recommended you include it from the start, when you clone the repository. | |
| ## Code reviews | |
| All submissions, including submissions by project members, require review. We | |
| use [Gerrit](https://gerrit-review.googlesource.com/Documentation/) for this | |
| purpose. | |
| ### Register with Gerrit | |
| Before you can request code reviews, you need to register with Gerrit first. You | |
| can do that by going to <https://cos-review.googlesource.com> and clicking "Sign | |
| in" at the top right corner. | |
| ### Set up git cookies | |
| You will also need to generate and configure your git cookies in order to push | |
| changes to Gerrit. The following steps help you with that: | |
| 1. Go to https://cos-review.googlesource.com/new-password | |
| 1. Log in with your google account | |
| 1. Follow the on-screen directions page to set up/append to your | |
| `~/.gitcookies` file | |
| 1. Verify that your cookies are correctly setup: | |
| ``` | |
| git ls-remote https://cos.googlesource.com/cos/tools.git | |
| ``` | |
| ### Upload a CL | |
| ``` | |
| git push origin HEAD:refs/for/master | |
| ``` | |
| The command will print a URL to the CL that has just been uploaded. You can | |
| follow the URL to the Gerrit UI and add reviewers from there. | |
| ## Community guidelines | |
| This project follows | |
| [Google's Open Source Community Guidelines](https://opensource.google/conduct/). |