| Contributing |
| ============ |
| |
| #. **Please sign one of the contributor license agreements below.** |
| #. Fork the repo, develop and test your code changes, add docs. |
| #. Make sure that your commit messages clearly describe the changes. |
| #. Send a pull request. |
| |
| Here are some guidelines for hacking on ``google-auth-library-python``. |
| |
| Making changes |
| -------------- |
| |
| A few notes on making changes to ``google-auth-library-python``. |
| |
| - If you've added a new feature or modified an existing feature, be sure to |
| add or update any applicable documentation in docstrings and in the |
| documentation (in ``docs/``). You can re-generate the reference documentation |
| using ``nox -s docgen``. |
| |
| - The change must work fully on the following CPython versions: |
| 3.6, 3.7, 3.8, 3.9 across macOS, Linux, and Windows. |
| |
| - The codebase *must* have 100% test statement coverage after each commit. |
| You can test coverage via ``nox -e cover``. |
| |
| Testing changes |
| --------------- |
| |
| To test your changes, run unit tests with ``nox``:: |
| |
| $ nox -s unit |
| |
| |
| Running system tests |
| -------------------- |
| |
| You can run the system tests with ``nox``:: |
| |
| $ nox -f system_tests/noxfile.py |
| |
| To run a single session, specify it with ``nox -s``:: |
| |
| $ nox -f system_tests/noxfile.py -s service_account |
| |
| First, set the environment variable ``GOOGLE_APPLICATION_CREDENTIALS`` to a valid service account. |
| See `Creating and Managing Service Account Keys`_ for how to obtain a service account. |
| |
| Project and Credentials Setup |
| ------------------------------- |
| |
| Enable the IAM Service Account Credentials API on the project. |
| |
| To run system tests locally, you will need to set up a data directory :: |
| |
| $ mkdir system_tests/data |
| |
| Your directory should look like this. Follow the instructions below for creating each file. :: |
| |
| system_tests/ |
| data/ |
| authorized_user.json |
| impersonated_service_account.json |
| service_account.json |
| |
| |
| ``authorized_user.json`` |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Use the `gcloud CLI`_ to get an authorized user file :: |
| |
| $ gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,openid |
| |
| You will see something like:: |
| |
| Credentials saved to file: [/usr/local/home/.config/gcloud/application_default_credentials.json] |
| |
| Copy the contents of the file to ``authorized_user.json``. |
| |
| Open the IAM page of the Google Cloud Console. Grant the user the `Service Account Token Creator Role`. |
| This will allow the user to impersonate service accounts on the project. |
| |
| .. _gcloud CLI: https://cloud.google.com/sdk/gcloud/ |
| |
| |
| ``service_account.json`` |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Follow `Creating and Managing Service Account Keys`_ to create a service account. |
| |
| Copy the credentials file to ``service_account.json``. |
| |
| Grant the account associated with ``service_account.json`` the following roles. |
| |
| - App Engine Admin (for App Engine tests) |
| - Service Account Token Creator (for impersonated credentials and workload identity federation tests) |
| - Pub/Sub Viewer (for gRPC tests) |
| - Storage Object Viewer (for impersonated credentials tests) |
| - DNS Viewer (for workload identity federation tests) |
| - GCE Storage Bucket Admin (for downscoping tests) |
| |
| ``impersonated_service_account.json`` |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Follow `Creating and Managing Service Account Keys`_ to create a service account. |
| |
| Copy the credentials file to ``impersonated_service_account.json``. |
| |
| .. _Creating and Managing Service Account Keys: https://cloud.google.com/iam/docs/creating-managing-service-account-keys |
| |
| ``setup_external_accounts`` |
| ~~~~~~~~~~~~~~~~ |
| |
| In order to run the workload identity federation tests, you will need to set up |
| a Workload Identity Pool, as well as attach relevant policy bindings for this |
| new resource to our service account. To do this, make sure you have IAM Workload |
| Identity Pool Admin and Security Admin permissions, and then run: |
| |
| $ ./scripts/setup_external_accounts.sh |
| |
| and then use the output to replace the variables near |
| the top of system_tests/system_tests_sync/test_external_accounts.py |
| |
| App Engine System Tests |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| To run the App Engine tests, you wil need to deploy a default App Engine service. |
| If you already have a default service associated with your project, you can skip this step. |
| |
| Edit ``app.yaml`` so ``service`` is ``default`` instead of ``google-auth-system-tests``. |
| From ``system_tests/app_engine_test_app`` run the following commands :: |
| |
| $ pip install --target lib -r requirements.txt |
| $ gcloud app deploy -q app.yaml |
| |
| After the app is deployed, change ``service`` in ``app.yaml`` back to ``google-auth-system-tests``. |
| You can now run the App Engine tests: :: |
| |
| $ nox -f system_tests/noxfile.py -s app_engine |
| |
| Compute Engine Tests |
| ^^^^^^^^^^^^^^^^^^^^ |
| |
| These tests cannot be run locally and will be skipped if they are run outside of Google Compute Engine. |
| |
| grpc Tests |
| ^^^^^^^^^^^^ |
| |
| These tests use the Pub/Sub API. Grant the service account specified by `GOOGLE_APPLICATION_CREDENTIALS` |
| permissions to list topics. The service account should have at least `roles/pubsub.viewer`. |
| |
| Coding Style |
| ------------ |
| |
| This library is PEP8 & Pylint compliant. Our Pylint config is defined at |
| ``pylintrc`` for package code and ``pylintrc.tests`` for test code. Use |
| ``nox`` to check for non-compliant code:: |
| |
| $ nox -s lint |
| |
| Documentation Coverage and Building HTML Documentation |
| ------------------------------------------------------ |
| |
| If you fix a bug, and the bug requires an API or behavior modification, all |
| documentation in this package which references that API or behavior must be |
| changed to reflect the bug fix, ideally in the same commit that fixes the bug |
| or adds the feature. |
| |
| To build and review docs use ``nox``:: |
| |
| $ nox -s docs |
| |
| The HTML version of the docs will be built in ``docs/_build/html`` |
| |
| Versioning |
| ---------- |
| |
| This library follows `Semantic Versioning`_. |
| |
| .. _Semantic Versioning: http://semver.org/ |
| |
| It is currently in major version zero (``0.y.z``), which means that anything |
| may change at any time and the public API should not be considered |
| stable. |
| |
| 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 <https://developers.google.com/open-source/cla/individual>`__. |
| - **If you work for a company that wants to allow you to contribute your work**, then you'll need to sign a `corporate CLA <https://developers.google.com/open-source/cla/corporate>`__. |
| |
| You can sign these electronically (just scroll to the bottom). After that, we'll be able to accept your pull requests. |