blob: 2de74ae434da69928315bd8ca0fc04545dd911cf [file] [log] [blame] [view]
# 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/).