| # Contributing | |
| 1. [Install Go](https://golang.org/dl/). | |
| 1. Ensure that your `GOBIN` directory (by default `$(go env GOPATH)/bin`) | |
| is in your `PATH`. | |
| 1. Check it's working by running `go version`. | |
| * If it doesn't work, check the install location, usually | |
| `/usr/local/go`, is on your `PATH`. | |
| 1. Sign one of the | |
| [contributor license agreements](#contributor-license-agreements) below. | |
| 1. Run `go get golang.org/x/review/git-codereview` to install the code reviewing tool. | |
| 1. Ensure it's working by running `git codereview` (check your `PATH` if | |
| not). | |
| 1. If you would like, you may want to set up aliases for `git-codereview`, | |
| such that `git codereview change` becomes `git change`. See the | |
| [godoc](https://godoc.org/golang.org/x/review/git-codereview) for details. | |
| * Should you run into issues with the `git-codereview` tool, please note | |
| that all error messages will assume that you have set up these aliases. | |
| 1. Change to a directory of your choosing and clone the repo. | |
| ``` | |
| cd ~/code | |
| git clone https://code.googlesource.com/google-api-go-client | |
| ``` | |
| * If you have already checked out the source, make sure that the remote | |
| `git` `origin` is https://code.googlesource.com/google-api-go-client: | |
| ``` | |
| git remote -v | |
| # ... | |
| git remote set-url origin https://code.googlesource.com/google-api-go-client | |
| ``` | |
| * The project uses [Go Modules](https://blog.golang.org/using-go-modules) | |
| for dependency management See | |
| [`gopls`](https://github.com/golang/go/wiki/gopls) for making your editor | |
| work with modules. | |
| 1. Change to the project directory: | |
| ``` | |
| cd ~/code/google-api-go-client | |
| ``` | |
| 1. Make sure your `git` auth is configured correctly by visiting | |
| https://code.googlesource.com, clicking "Generate Password" at the top-right, | |
| and following the directions. Otherwise, `git codereview mail` in the next step | |
| will fail. | |
| 1. Now you are ready to make changes. Don't create a new branch or make commits in the traditional | |
| way. Use the following`git codereview` commands to create a commit and create a Gerrit CL: | |
| ``` | |
| git codereview change <branch-name> # Use this instead of git checkout -b <branch-name> | |
| # Make changes. | |
| git add ... | |
| git codereview change # Use this instead of git commit | |
| git codereview mail # If this fails, the error message will contain instructions to fix it. | |
| ``` | |
| * This will create a new `git` branch for you to develop on. Once your | |
| change is merged, you can delete this branch. | |
| 1. As you make changes for code review, ammend the commit and re-mail the | |
| change: | |
| ``` | |
| # Make more changes. | |
| git add ... | |
| git codereview change | |
| git codereview mail | |
| ``` | |
| * **Warning**: do not change the `Change-Id` at the bottom of the commit | |
| message - it's how Gerrit knows which change this is (or if it's new). | |
| * When you fixes issues from code review, respond to each code review | |
| message then click **Reply** at the top of the page. | |
| * Each new mailed amendment will create a new patch set for | |
| your change in Gerrit. Patch sets can be compared and reviewed. | |
| * **Note**: if your change includes a breaking change, our breaking change | |
| detector will cause CI/CD to fail. If your breaking change is acceptable | |
| in some way, add a `BREAKING_CHANGE_ACCEPTABLE=<reason>` line to the commit | |
| message to cause the detector not to be run and to make it clear why that is | |
| acceptable. | |
| 1. Finally, add reviewers to your CL when it's ready for review. Reviewers will | |
| not be added automatically. If you're not sure who to add for your code review, | |
| add deklerk@, tbp@, cbro@, and codyoss@. | |
| ## Contributor License Agreements | |
| Before we can accept your pull requests you'll need to sign a Contributor | |
| License Agreement (CLA): | |
| - **If you are an individual writing original source code** and **you own the | |
| intellectual property**, then you'll need to sign an [individual CLA][indvcla]. | |
| - **If you work for a company that wants to allow you to contribute your | |
| work**, then you'll need to sign a [corporate CLA][corpcla]. | |
| You can sign these electronically (just scroll to the bottom). After that, | |
| we'll be able to accept your pull requests. | |
| ## Contributor Code of Conduct | |
| As contributors and maintainers of this project, | |
| and in the interest of fostering an open and welcoming community, | |
| we pledge to respect all people who contribute through reporting issues, | |
| posting feature requests, updating documentation, | |
| submitting pull requests or patches, and other activities. | |
| We are committed to making participation in this project | |
| a harassment-free experience for everyone, | |
| regardless of level of experience, gender, gender identity and expression, | |
| sexual orientation, disability, personal appearance, | |
| body size, race, ethnicity, age, religion, or nationality. | |
| Examples of unacceptable behavior by participants include: | |
| * The use of sexualized language or imagery | |
| * Personal attacks | |
| * Trolling or insulting/derogatory comments | |
| * Public or private harassment | |
| * Publishing other's private information, | |
| such as physical or electronic | |
| addresses, without explicit permission | |
| * Other unethical or unprofessional conduct. | |
| Project maintainers have the right and responsibility to remove, edit, or reject | |
| comments, commits, code, wiki edits, issues, and other contributions | |
| that are not aligned to this Code of Conduct. | |
| By adopting this Code of Conduct, | |
| project maintainers commit themselves to fairly and consistently | |
| applying these principles to every aspect of managing this project. | |
| Project maintainers who do not follow or enforce the Code of Conduct | |
| may be permanently removed from the project team. | |
| This code of conduct applies both within project spaces and in public spaces | |
| when an individual is representing the project or its community. | |
| Instances of abusive, harassing, or otherwise unacceptable behavior | |
| may be reported by opening an issue | |
| or contacting one or more of the project maintainers. | |
| This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, | |
| available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) | |
| [indvcla]: https://developers.google.com/open-source/cla/individual | |
| [corpcla]: https://developers.google.com/open-source/cla/corporate |