internal: overhaul CONTRIBUTING.md

- Add a few missing instructions, e.g. enabling APIs, adding API keys, etc
- Clarify several instructions
- Disambiguate between firestore and general project
- Subdivide the Setup steps
- Use backticks instead of bold for env vars
- Align text to standard 120 char

Change-Id: Ie369ae96f9d5dc0f33db5a4e9dadc7a95880f57f
Reviewed-on: https://code-review.googlesource.com/c/34491
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Eno Compton <enocom@google.com>
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4e70c5d..af46c13 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,121 +1,177 @@
 # Contributing
 
 1. Sign one of the contributor license agreements below.
-1. `go get golang.org/x/review/git-codereview` to install the code reviewing tool.
+1. `go get golang.org/x/review/git-codereview` to install the code reviewing
+tool.
     1. You will need to ensure that your `GOBIN` directory (by default
-       `$GOPATH/bin`) is in your `PATH` so that git can find the command.
+    `$GOPATH/bin`) is in your `PATH` so that git can find the command.
     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.
+    such that `git codereview change` becomes `git change`. See the
+    [godoc](https://godoc.org/golang.org/x/review/git-codereview) for details.
     1. 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.
+    that all error messages will assume that you have set up these aliases.
 1. Get the cloud package by running `go get -d cloud.google.com/go`.
-    1. If you have already checked out the source, make sure that the remote git
-       origin is https://code.googlesource.com/gocloud:
+    1. If you have already checked out the source, make sure that the remote
+    git origin is https://code.googlesource.com/gocloud:
 
-            git remote set-url origin https://code.googlesource.com/gocloud
+        ```
+        git remote set-url origin https://code.googlesource.com/gocloud
+        ```
+
 1. Make sure your auth is configured correctly by visiting
-   https://code.googlesource.com, clicking "Generate Password", and following
-   the directions.
+https://code.googlesource.com, clicking "Generate Password", and following the
+directions.
 1. Make changes and create a change by running `git codereview change <name>`,
 provide a commit message, and use `git codereview mail` to create a Gerrit CL.
-1. Keep amending to the change with `git codereview change` and mail as your receive
-feedback. Each new mailed amendment will create a new patch set for your change in Gerrit.
+1. Keep amending to the change with `git codereview change` and mail as your
+receive feedback. Each new mailed amendment will create a new patch set for
+your change in Gerrit.
 
 ## Integration Tests
 
-In addition to the unit tests, you may run the integration test suite.
+In addition to the unit tests, you may run the integration test suite. These
+directions describe setting up your environment to run integration tests for
+_all_ packages: note that many of these instructions may be redundant if you
+intend only to run integration tests on a single package.
 
-To run the integrations tests, creating and configuration of a project in the
-Google Developers Console is required.
+#### GCP Setup
 
-After creating a project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount).
-Ensure the project-level **Owner**
-[IAM role](console.cloud.google.com/iam-admin/iam/project) role is added to the
-service account. Alternatively, the account can be granted all of the following roles:
-- **Editor**
-- **Logs Configuration Writer**
-- **PubSub Admin**
+To run the integrations tests, creation and configuration of two projects in
+the Google Developers Console is required: one specifically for Firestore
+integration tests, and another for all other integration tests. We'll refer to
+these projects as "general project" and "Firestore project".
 
-Once you create a project, set the following environment variables to be able to
-run the against the actual APIs.
+After creating each project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount)
+for each project. Ensure the project-level **Owner**
+[IAM role](console.cloud.google.com/iam-admin/iam/project) role is added to
+each service account. During the creation of the service account, you should
+download the JSON credential file for use later.
 
-- **GCLOUD_TESTS_GOLANG_PROJECT_ID**: Developers Console project's ID (e.g. bamboo-shift-455)
-- **GCLOUD_TESTS_GOLANG_KEY**: The path to the JSON key file.
+Next, ensure the following APIs are enabled in the general project:
 
-Some packages require additional environment variables to be set:
+- BigQuery API
+- BigQuery Data Transfer API
+- Cloud Dataproc API
+- Cloud Dataproc Control API Private
+- Cloud Datastore API
+- Cloud Firestore API
+- Cloud Key Management Service (KMS) API
+- Cloud Natural Language API
+- Cloud OS Login API
+- Cloud Pub/Sub API
+- Cloud Resource Manager API
+- Cloud Spanner API
+- Cloud Speech API
+- Cloud Translation API
+- Cloud Video Intelligence API
+- Cloud Vision API
+- Compute Engine API
+- Compute Engine Instance Group Manager API
+- Container Registry API
+- Firebase Rules API
+- Google Cloud APIs
+- Google Cloud Deployment Manager V2 API
+- Google Cloud SQL
+- Google Cloud Storage
+- Google Cloud Storage JSON API
+- Google Compute Engine Instance Group Updater API
+- Google Compute Engine Instance Groups API
+- Kubernetes Engine API
+- Stackdriver Error Reporting API
 
-- firestore
-  - **GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID**: project ID for Firestore.
-  - **GCLOUD_TESTS_GOLANG_FIRESTORE_KEY**: The path to the JSON key file.
-- storage
-  - **GCLOUD_TESTS_GOLANG_KEYRING**: The full name of the keyring for the tests, in the
-    form "projects/P/locations/L/keyRings/R".
-- translate
-  - **GCLOUD_TESTS_API_KEY**: API key for using the Translate API.
-- profiler
-  - **GCLOUD_TESTS_GOLANG_ZONE**: Compute Engine zone.
+Next, create a Datastore database in the general project, and a Firestore
+database in the Firestore project.
 
-Some packages can record the RPCs during integration tests to a file for
-subsequent replay. To record, pass the `-record` flag to `go test`. The
-recording will be saved to the _package_`.replay` file. To replay integration
-tests from a saved recording, the replay file must be present, the `-short` flag
-must be passed to `go test`, and the **GCLOUD_TESTS_GOLANG_ENABLE_REPLAY**
-environment variable must have a non-empty value.
+Finally, in the general project, create an API key for the translate API:
 
-Install the [gcloud command-line tool][gcloudcli] to your machine and use it
-to create some resources used in integration tests.
+- Go to GCP Developer Console.
+- Navigate to APIs & Services > Credentials.
+- Click Create Credentials > API Key.
+- Save this key for use in `GCLOUD_TESTS_API_KEY` as described below.
+
+#### Local Setup
+
+Once the two projects are created and configured, set the following environment
+variables:
+
+- `GCLOUD_TESTS_GOLANG_PROJECT_ID`: Developers Console project's ID (e.g.
+bamboo-shift-455) for the general project.
+- `GCLOUD_TESTS_GOLANG_KEY`: The path to the JSON key file of the general
+project's service account.
+- `GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID`: Developers Console project's ID
+(e.g. doorway-cliff-677) for the Firestore project.
+- `GCLOUD_TESTS_GOLANG_FIRESTORE_KEY`: The path to the JSON key file of the
+Firestore project's service account.
+- `GCLOUD_TESTS_GOLANG_KEYRING`: The full name of the keyring for the tests,
+in the form
+"projects/P/locations/L/keyRings/R". The creation of this is described below.
+- `GCLOUD_TESTS_API_KEY`: API key for using the Translate API.
+- `GCLOUD_TESTS_GOLANG_ZONE`: Compute Engine zone.
+
+Install the [gcloud command-line tool][gcloudcli] to your machine and use it to
+create some resources used in integration tests.
 
 From the project's root directory:
 
 ``` sh
-# Set the default project in your env.
+# Sets the default project in your env.
 $ gcloud config set project $GCLOUD_TESTS_GOLANG_PROJECT_ID
 
-# Authenticate the gcloud tool with your account.
+# Authenticates the gcloud tool with your account.
 $ gcloud auth login
 
 # Create the indexes used in the datastore integration tests.
 $ gcloud datastore create-indexes datastore/testdata/index.yaml
 
-# Create a Google Cloud storage bucket with the same name as your test project,
+# Creates a Google Cloud storage bucket with the same name as your test project,
 # and with the Stackdriver Logging service account as owner, for the sink
 # integration tests in logging.
 $ gsutil mb gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID
 $ gsutil acl ch -g cloud-logs@google.com:O gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID
 
-# Create a PubSub topic for integration tests of storage notifications.
+# Creates a PubSub topic for integration tests of storage notifications.
 $ gcloud beta pubsub topics create go-storage-notification-test
 # Next, go to the Pub/Sub dashboard in GCP console. Authorize the user
-# "service-<numberic project id>@gs-project-accounts.iam.gserviceaccount.com" as a publisher to that topic.
+# "service-<numberic project id>@gs-project-accounts.iam.gserviceaccount.com"
+# as a publisher to that topic.
 
-# Create a Spanner instance for the spanner integration tests.
+# Creates a Spanner instance for the spanner integration tests.
 $ gcloud beta spanner instances create go-integration-test --config regional-us-central1 --nodes 1 --description 'Instance for go client test'
-# NOTE: Spanner instances are priced by the node-hour, so you may want to delete
-# the instance after testing with 'gcloud beta spanner instances delete'.
+# NOTE: Spanner instances are priced by the node-hour, so you may want to
+# delete the instance after testing with 'gcloud beta spanner instances delete'.
 
-# For Storage integration tests:
-# Enable KMS for your project in the Cloud Console.
 $ export MY_KEYRING=some-keyring-name
 $ export MY_LOCATION=global
-# Create a KMS keyring, in the same location as the default location for your project's buckets.
+# Creates a KMS keyring, in the same location as the default location for your
+# project's buckets.
 $ gcloud kms keyrings create $MY_KEYRING --location $MY_LOCATION
-# Create two keys in the keyring, named key1 and key2.
+# Creates two keys in the keyring, named key1 and key2.
 $ gcloud kms keys create key1 --keyring $MY_KEYRING --location $MY_LOCATION --purpose encryption
 $ gcloud kms keys create key2 --keyring $MY_KEYRING --location $MY_LOCATION --purpose encryption
-# As mentioned above, set the GCLOUD_TESTS_GOLANG_KEYRING environment variable.
+# Sets the GCLOUD_TESTS_GOLANG_KEYRING environment variable.
 $ export GCLOUD_TESTS_GOLANG_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/$MY_LOCATION/keyRings/$MY_KEYRING
-# Authorize Google Cloud Storage to encrypt and decrypt using key1.
+# Authorizes Google Cloud Storage to encrypt and decrypt using key1.
 gsutil kms authorize -p $GCLOUD_TESTS_GOLANG_PROJECT_ID -k $GCLOUD_TESTS_GOLANG_KEYRING/cryptoKeys/key1
 ```
 
-Once you've done the necessary setup, you can run the integration tests by running:
+#### Running
+
+Once you've done the necessary setup, you can run the integration tests by
+running:
 
 ``` sh
 $ go test -v cloud.google.com/go/...
 ```
 
+#### Replay
+
+Some packages can record the RPCs during integration tests to a file for
+subsequent replay. To record, pass the `-record` flag to `go test`. The
+recording will be saved to the _package_`.replay` file. To replay integration
+tests from a saved recording, the replay file must be present, the `-short`
+flag must be passed to `go test`, and the `GCLOUD_TESTS_GOLANG_ENABLE_REPLAY`
+environment variable must have a non-empty value.
+
 ## Contributor License Agreements
 
 Before we can accept your pull requests you'll need to sign a Contributor