| 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 [email protected]: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 |