Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/cloudshell_v1alpha1.users.environments.html b/docs/dyn/cloudshell_v1alpha1.users.environments.html
new file mode 100644
index 0000000..f215a96
--- /dev/null
+++ b/docs/dyn/cloudshell_v1alpha1.users.environments.html
@@ -0,0 +1,360 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudshell_v1alpha1.html">Cloud Shell API</a> . <a href="cloudshell_v1alpha1.users.html">users</a> . <a href="cloudshell_v1alpha1.users.environments.html">environments</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="cloudshell_v1alpha1.users.environments.publicKeys.html">publicKeys()</a></code>
+</p>
+<p class="firstline">Returns the publicKeys Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#authorize">authorize(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Sends OAuth credentials to a running environment on behalf of a user. When</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets an environment. Returns NOT_FOUND if the environment does not exist.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing environment.</p>
+<p class="toc_element">
+  <code><a href="#start">start(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Starts an existing environment, allowing clients to connect to it. The</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="authorize">authorize(name, body, x__xgafv=None)</code>
+  <pre>Sends OAuth credentials to a running environment on behalf of a user. When
+this completes, the environment will be authorized to run various Google
+Cloud command line tools without requiring the user to manually
+authenticate.
+
+Args:
+  name: string, Name of the resource that should receive the credentials, for example
+`users/me/environments/default` or
+`users/someone@example.com/environments/default`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for AuthorizeEnvironment.
+    "expireTime": "A String", # The time when the credentials expire. If not set, defaults to one hour from
+        # when the server received the request.
+    "idToken": "A String", # The OAuth ID token that should be sent to the environment.
+    "accessToken": "A String", # The OAuth access token that should be sent to the environment.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets an environment. Returns NOT_FOUND if the environment does not exist.
+
+Args:
+  name: string, Name of the requested resource, for example `users/me/environments/default`
+or `users/someone@example.com/environments/default`. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A Cloud Shell environment, which is defined as the combination of a Docker
+        # image specifying what is installed on the environment and a home directory
+        # containing the user's data that will remain across sessions. Each user has a
+        # single environment with the ID "default".
+      "name": "A String", # Output only. Full name of this resource, in the format
+          # `users/{owner_email}/environments/{environment_id}`. `{owner_email}` is the
+          # email address of the user to whom this environment belongs, and
+          # `{environment_id}` is the identifier of this environment. For example,
+          # `users/someone@example.com/environments/default`.
+      "dockerImage": "A String", # Required. Full path to the Docker image used to run this environment, e.g.
+          # "gcr.io/dev-con/cloud-devshell:latest".
+      "publicKeys": [ # Output only. Public keys associated with the environment. Clients can
+          # connect to this environment via SSH only if they possess a private key
+          # corresponding to at least one of these public keys. Keys can be added to or
+          # removed from the environment using the CreatePublicKey and DeletePublicKey
+          # methods.
+        { # A public SSH key, corresponding to a private SSH key held by the client.
+          "name": "A String", # Output only. Full name of this resource, in the format
+              # `users/{owner_email}/environments/{environment_id}/publicKeys/{key_id}`.
+              # `{owner_email}` is the email address of the user to whom the key belongs.
+              # `{environment_id}` is the identifier of the environment to which the key
+              # grants access. `{key_id}` is the unique identifier of the key. For example,
+              # `users/someone@example.com/environments/default/publicKeys/myKey`.
+          "key": "A String", # Required. Content of this key.
+          "format": "A String", # Required. Format of this key's content.
+        },
+      ],
+      "state": "A String", # Output only. Current execution state of this environment.
+      "sshHost": "A String", # Output only. Host to which clients can connect to initiate SSH sessions
+          # with the environment.
+      "sshPort": 42, # Output only. Port to which clients can connect to initiate SSH sessions
+          # with the environment.
+      "sshUsername": "A String", # Output only. Username that clients should use when initiating SSH sessions
+          # with the environment.
+      "id": "A String", # Output only. The environment's identifier, which is always "default".
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates an existing environment.
+
+Args:
+  name: string, Name of the resource to be updated, for example
+`users/me/environments/default` or
+`users/someone@example.com/environments/default`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Cloud Shell environment, which is defined as the combination of a Docker
+      # image specifying what is installed on the environment and a home directory
+      # containing the user's data that will remain across sessions. Each user has a
+      # single environment with the ID "default".
+    "name": "A String", # Output only. Full name of this resource, in the format
+        # `users/{owner_email}/environments/{environment_id}`. `{owner_email}` is the
+        # email address of the user to whom this environment belongs, and
+        # `{environment_id}` is the identifier of this environment. For example,
+        # `users/someone@example.com/environments/default`.
+    "dockerImage": "A String", # Required. Full path to the Docker image used to run this environment, e.g.
+        # "gcr.io/dev-con/cloud-devshell:latest".
+    "publicKeys": [ # Output only. Public keys associated with the environment. Clients can
+        # connect to this environment via SSH only if they possess a private key
+        # corresponding to at least one of these public keys. Keys can be added to or
+        # removed from the environment using the CreatePublicKey and DeletePublicKey
+        # methods.
+      { # A public SSH key, corresponding to a private SSH key held by the client.
+        "name": "A String", # Output only. Full name of this resource, in the format
+            # `users/{owner_email}/environments/{environment_id}/publicKeys/{key_id}`.
+            # `{owner_email}` is the email address of the user to whom the key belongs.
+            # `{environment_id}` is the identifier of the environment to which the key
+            # grants access. `{key_id}` is the unique identifier of the key. For example,
+            # `users/someone@example.com/environments/default/publicKeys/myKey`.
+        "key": "A String", # Required. Content of this key.
+        "format": "A String", # Required. Format of this key's content.
+      },
+    ],
+    "state": "A String", # Output only. Current execution state of this environment.
+    "sshHost": "A String", # Output only. Host to which clients can connect to initiate SSH sessions
+        # with the environment.
+    "sshPort": 42, # Output only. Port to which clients can connect to initiate SSH sessions
+        # with the environment.
+    "sshUsername": "A String", # Output only. Username that clients should use when initiating SSH sessions
+        # with the environment.
+    "id": "A String", # Output only. The environment's identifier, which is always "default".
+  }
+
+  updateMask: string, Mask specifying which fields in the environment should be updated.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A Cloud Shell environment, which is defined as the combination of a Docker
+        # image specifying what is installed on the environment and a home directory
+        # containing the user's data that will remain across sessions. Each user has a
+        # single environment with the ID "default".
+      "name": "A String", # Output only. Full name of this resource, in the format
+          # `users/{owner_email}/environments/{environment_id}`. `{owner_email}` is the
+          # email address of the user to whom this environment belongs, and
+          # `{environment_id}` is the identifier of this environment. For example,
+          # `users/someone@example.com/environments/default`.
+      "dockerImage": "A String", # Required. Full path to the Docker image used to run this environment, e.g.
+          # "gcr.io/dev-con/cloud-devshell:latest".
+      "publicKeys": [ # Output only. Public keys associated with the environment. Clients can
+          # connect to this environment via SSH only if they possess a private key
+          # corresponding to at least one of these public keys. Keys can be added to or
+          # removed from the environment using the CreatePublicKey and DeletePublicKey
+          # methods.
+        { # A public SSH key, corresponding to a private SSH key held by the client.
+          "name": "A String", # Output only. Full name of this resource, in the format
+              # `users/{owner_email}/environments/{environment_id}/publicKeys/{key_id}`.
+              # `{owner_email}` is the email address of the user to whom the key belongs.
+              # `{environment_id}` is the identifier of the environment to which the key
+              # grants access. `{key_id}` is the unique identifier of the key. For example,
+              # `users/someone@example.com/environments/default/publicKeys/myKey`.
+          "key": "A String", # Required. Content of this key.
+          "format": "A String", # Required. Format of this key's content.
+        },
+      ],
+      "state": "A String", # Output only. Current execution state of this environment.
+      "sshHost": "A String", # Output only. Host to which clients can connect to initiate SSH sessions
+          # with the environment.
+      "sshPort": 42, # Output only. Port to which clients can connect to initiate SSH sessions
+          # with the environment.
+      "sshUsername": "A String", # Output only. Username that clients should use when initiating SSH sessions
+          # with the environment.
+      "id": "A String", # Output only. The environment's identifier, which is always "default".
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="start">start(name, body, x__xgafv=None)</code>
+  <pre>Starts an existing environment, allowing clients to connect to it. The
+returned operation will contain an instance of StartEnvironmentMetadata in
+its metadata field. Users can wait for the environment to start by polling
+this operation via GetOperation. Once the environment has finished starting
+and is ready to accept connections, the operation will contain a
+StartEnvironmentResponse in its response field.
+
+Args:
+  name: string, Name of the resource that should be started, for example
+`users/me/environments/default` or
+`users/someone@example.com/environments/default`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for StartEnvironment.
+    "accessToken": "A String", # The initial access token passed to the environment. If this is present and
+        # valid, the environment will be pre-authenticated with gcloud so that the
+        # user can run gcloud commands in Cloud Shell without having to log in. This
+        # code can be updated later by calling AuthorizeEnvironment.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a
+      # network API call.
+    "response": { # The normal response of the operation in case of success.  If the original
+        # method returns no data on success, such as `Delete`, the response is
+        # `google.protobuf.Empty`.  If the original method is standard
+        # `Get`/`Create`/`Update`, the response should be the resource.  For other
+        # methods, the response should have the type `XxxResponse`, where `Xxx`
+        # is the original method name.  For example, if the original method name
+        # is `TakeSnapshot()`, the inferred response type is
+        # `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @type with type URL.
+    },
+    "metadata": { # Service-specific metadata associated with the operation.  It typically
+        # contains progress information and common metadata such as create time.
+        # Some services might not provide such metadata.  Any method that returns a
+        # long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @type with type URL.
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress.
+        # If `true`, the operation is completed, and either `error` or `response` is
+        # available.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that
+        # originally returns it. If you use the default HTTP mapping, the
+        # `name` should be a resource name ending with `operations/{unique_id}`.
+    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
+        # different programming environments, including REST APIs and RPC APIs. It is
+        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
+        # three pieces of data: error code, error message, and error details.
+        #
+        # You can find out more about this error model and how to work with it in the
+        # [API Design Guide](https://cloud.google.com/apis/design/errors).
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There is a common set of
+          # message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @type with type URL.
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file