|
|
Contributing
|
|
|
============
|
|
|
|
|
|
1. **Please sign one of the contributor license agreements [below][6].**
|
|
|
1. [File an issue][9] to notify the maintainers about what you're working on.
|
|
|
1. [Fork the repo][10], develop and [test][11] your code changes, add docs.
|
|
|
1. Make sure that your commit messages clearly describe the changes.
|
|
|
1. [Send][12] a pull request.
|
|
|
|
|
|
Here are some guidelines for hacking on `oauth2client`.
|
|
|
|
|
|
Before writing code, file an issue
|
|
|
----------------------------------
|
|
|
|
|
|
Use the [issue tracker][7] to start the discussion. It is possible that someone
|
|
|
else is already working on your idea, your approach is not quite right, or that
|
|
|
the functionality exists already. The ticket you file in the issue tracker will
|
|
|
be used to hash that all out.
|
|
|
|
|
|
Fork `oauth2client`
|
|
|
-------------------
|
|
|
|
|
|
We will use GitHub's mechanism for [forking][8] repositories and making pull
|
|
|
requests. Fork the repository, and make your changes in the forked repository.
|
|
|
|
|
|
Include tests
|
|
|
-------------
|
|
|
|
|
|
Be sure to add the relevant tests before making the pull request. Docs will be
|
|
|
updated automatically when we merge to `master`, but you should also build
|
|
|
the docs yourself via `tox -e docs` and make sure they're readable.
|
|
|
|
|
|
Make the pull request
|
|
|
---------------------
|
|
|
|
|
|
Once you have made all your changes, tests, and updated the documentation,
|
|
|
make a pull request to move everything back into the main `oauth2client`
|
|
|
repository. Be sure to reference the original issue in the pull request.
|
|
|
Expect some back-and-forth with regards to style and compliance of these
|
|
|
rules. In particular:
|
|
|
* `oauth2client` follows the [Google Python Style Guide][GooglePythonStyle].
|
|
|
* Follow [these guidelines][GitCommitRules] when authoring your commit message.
|
|
|
|
|
|
Using a Development Checkout
|
|
|
----------------------------
|
|
|
|
|
|
You’ll have to create a development environment to hack on
|
|
|
`oauth2client`, using a Git checkout:
|
|
|
|
|
|
- While logged into your GitHub account, navigate to the `oauth2client`
|
|
|
[repo][1] on GitHub.
|
|
|
- Fork and clone the `oauth2client` repository to your GitHub account
|
|
|
by clicking the "Fork" button.
|
|
|
- Clone your fork of `oauth2client` from your GitHub account to your
|
|
|
local computer, substituting your account username and specifying
|
|
|
the destination as `hack-on-oauth2client`. For example:
|
|
|
|
|
|
```bash
|
|
|
$ cd ${HOME}
|
|
|
$ git clone git@github.com:USERNAME/oauth2client.git hack-on-oauth2client
|
|
|
$ cd hack-on-oauth2client
|
|
|
$ # Configure remotes such that you can pull changes from the oauth2client
|
|
|
$ # repository into your local repository.
|
|
|
$ git remote add upstream https://github.com:google/oauth2client
|
|
|
$ # fetch and merge changes from upstream into master
|
|
|
$ git fetch upstream
|
|
|
$ git merge upstream/master
|
|
|
```
|
|
|
|
|
|
Now your local repo is set up such that you will push changes to your
|
|
|
GitHub repo, from which you can submit a pull request.
|
|
|
|
|
|
- Create a virtualenv in which to install `oauth2client`:
|
|
|
|
|
|
```bash
|
|
|
$ cd ~/hack-on-oauth2client
|
|
|
$ virtualenv -ppython2.7 env
|
|
|
```
|
|
|
|
|
|
Note that very old versions of virtualenv (virtualenv versions
|
|
|
below, say, 1.10 or thereabouts) require you to pass a
|
|
|
`--no-site-packages` flag to get a completely isolated environment.
|
|
|
|
|
|
You can choose which Python version you want to use by passing a
|
|
|
`-p` flag to `virtualenv`. For example, `virtualenv -ppython2.7`
|
|
|
chooses the Python 2.7 interpreter to be installed.
|
|
|
|
|
|
From here on in within these instructions, the
|
|
|
`~/hack-on-oauth2client/env` virtual environment you created above will be
|
|
|
referred to as `$VENV`. To use the instructions in the steps that
|
|
|
follow literally, use the `export VENV=~/hack-on-oauth2client/env`
|
|
|
command.
|
|
|
|
|
|
- Install `oauth2client` from the checkout into the virtualenv using
|
|
|
`setup.py develop`. Running `setup.py develop` **must** be done while
|
|
|
the current working directory is the `oauth2client` checkout
|
|
|
directory:
|
|
|
|
|
|
```bash
|
|
|
$ cd ~/hack-on-oauth2client
|
|
|
$ $VENV/bin/python setup.py develop
|
|
|
```
|
|
|
|
|
|
Running Tests
|
|
|
--------------
|
|
|
|
|
|
- To run all tests for `oauth2client` on a single Python version, run
|
|
|
`nosetests` from your development virtualenv (See
|
|
|
**Using a Development Checkout** above).
|
|
|
|
|
|
- To run the full set of `oauth2client` tests on all platforms, install
|
|
|
[`tox`][2] into a system Python. The `tox` console script will be
|
|
|
installed into the scripts location for that Python. While in the
|
|
|
`oauth2client` checkout root directory (it contains `tox.ini`),
|
|
|
invoke the `tox` console script. This will read the `tox.ini` file and
|
|
|
execute the tests on multiple Python versions and platforms; while it runs,
|
|
|
it creates a virtualenv for each version/platform combination. For
|
|
|
example:
|
|
|
|
|
|
```bash
|
|
|
$ sudo pip install tox
|
|
|
$ cd ~/hack-on-oauth2client
|
|
|
$ tox
|
|
|
```
|
|
|
|
|
|
- In order to run the `pypy` environment (in `tox`) you'll need at
|
|
|
least version 2.6 of `pypy` installed. See the [docs][13] for
|
|
|
more information.
|
|
|
|
|
|
- **Note** that `django` related tests are turned off for Python 2.6
|
|
|
and 3.3. This is because `django` dropped support for
|
|
|
[2.6 in `django==1.7`][14] and for [3.3 in `django==1.9`][15].
|
|
|
|
|
|
Running System Tests
|
|
|
--------------------
|
|
|
|
|
|
- To run system tests you can execute:
|
|
|
|
|
|
```bash
|
|
|
$ tox -e system-tests
|
|
|
$ tox -e system-tests3
|
|
|
```
|
|
|
|
|
|
This alone will not run the tests. You'll need to change some local
|
|
|
auth settings and download some service account configuration files
|
|
|
from your project to run all the tests.
|
|
|
|
|
|
- System tests will be run against an actual project and so you'll need to
|
|
|
provide some environment variables to facilitate this.
|
|
|
|
|
|
- `OAUTH2CLIENT_TEST_JSON_KEY_PATH`: The path to a service account JSON
|
|
|
key file; see `tests/data/gcloud/application_default_credentials.json`
|
|
|
as an example. Such a file can be downloaded directly from the
|
|
|
developer's console by clicking "Generate new JSON key". See private
|
|
|
key [docs][3] for more details.
|
|
|
- `OAUTH2CLIENT_TEST_P12_KEY_PATH`: The path to a service account
|
|
|
P12/PKCS12 key file. You can download this in the same way as a JSON
|
|
|
key, just select "P12 Key" as your "Key type" when downloading.
|
|
|
- `OAUTH2CLIENT_TEST_P12_KEY_EMAIL`: The service account email
|
|
|
corresponding to the P12/PKCS12 key file.
|
|
|
- `OAUTH2CLIENT_TEST_USER_KEY_PATH`: The path to a JSON key file for a
|
|
|
user. If this is not set, the file created by running
|
|
|
`gcloud auth login` will be used. See
|
|
|
`tests/data/gcloud/application_default_credentials_authorized_user.json`
|
|
|
for an example.
|
|
|
- `OAUTH2CLIENT_TEST_USER_KEY_EMAIL`: The user account email
|
|
|
corresponding to the user JSON key file.
|
|
|
|
|
|
- Examples of these can be found in `scripts/local_test_setup.sample`. We
|
|
|
recommend copying this to `scripts/local_test_setup`, editing the values
|
|
|
and sourcing them into your environment:
|
|
|
|
|
|
```bash
|
|
|
$ source scripts/local_test_setup
|
|
|
```
|
|
|
|
|
|
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][4].
|
|
|
- **If you work for a company that wants to allow you to contribute your
|
|
|
work**, then you'll need to sign a [corporate CLA][5].
|
|
|
|
|
|
You can sign these electronically (just scroll to the bottom). After that,
|
|
|
we'll be able to accept your pull requests.
|
|
|
|
|
|
[1]: https://github.com/google/oauth2client
|
|
|
[2]: https://tox.readthedocs.io/en/latest/
|
|
|
[3]: https://cloud.google.com/storage/docs/authentication#generating-a-private-key
|
|
|
[4]: https://developers.google.com/open-source/cla/individual
|
|
|
[5]: https://developers.google.com/open-source/cla/corporate
|
|
|
[6]: #contributor-license-agreements
|
|
|
[7]: https://github.com/google/oauth2client/issues
|
|
|
[8]: https://help.github.com/articles/fork-a-repo/
|
|
|
[9]: #before-writing-code-file-an-issue
|
|
|
[10]: #fork-oauth2client
|
|
|
[11]: #include-tests
|
|
|
[12]: #make-the-pull-request
|
|
|
[13]: https://oauth2client.readthedocs.io/en/latest/#using-pypy
|
|
|
[14]: https://docs.djangoproject.com/en/1.7/faq/install/#what-python-version-can-i-use-with-django
|
|
|
[15]: https://docs.djangoproject.com/en/1.9/faq/install/#what-python-version-can-i-use-with-django
|
|
|
[GooglePythonStyle]: https://google.github.io/styleguide/pyguide.html
|
|
|
[GitCommitRules]: http://chris.beams.io/posts/git-commit/#seven-rules
|