<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="cloudbuild_v1.html">Cloud Build API</a> . <a href="cloudbuild_v1.projects.html">projects</a> . <a href="cloudbuild_v1.projects.builds.html">builds</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#cancel">cancel(projectId, id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels a build in progress.</p>
<p class="toc_element">
  <code><a href="#create">create(projectId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Starts a build with the specified configuration.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Returns information about a previously requested build.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists previously requested builds.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#retry">retry(projectId, id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new build based on the specified build.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="cancel">cancel(projectId, id, body=None, x__xgafv=None)</code>
  <pre>Cancels a build in progress.

Args:
  projectId: string, Required. ID of the project. (required)
  id: string, Required. ID of the build. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to cancel an ongoing build.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A build resource in the Cloud Build API.
        #
        # At a high level, a `Build` describes where to find source code, how to build
        # it (for example, the builder image to run on the source), and where to store
        # the built artifacts.
        #
        # Fields can include the following variables, which will be expanded when the
        # build is created:
        #
        # - $PROJECT_ID: the project ID of the build.
        # - $BUILD_ID: the autogenerated ID of the build.
        # - $REPO_NAME: the source repository name specified by RepoSource.
        # - $BRANCH_NAME: the branch name specified by RepoSource.
        # - $TAG_NAME: the tag name specified by RepoSource.
        # - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or
        #   resolved from the specified branch or tag.
        # - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA.
      &quot;queueTtl&quot;: &quot;A String&quot;, # TTL in queue for this build. If provided and the build is enqueued longer
          # than this value, the build will expire and the build status will be
          # `EXPIRED`.
          #
          # The TTL starts ticking from create_time.
      &quot;statusDetail&quot;: &quot;A String&quot;, # Output only. Customer-readable message about the current status.
      &quot;sourceProvenance&quot;: { # Provenance of the source. Ways to find the original source, or verify that # Output only. A permanent fixed identifier for source.
          # some source was used for this build.
        &quot;resolvedRepoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # A copy of the build&#x27;s `source.repo_source`, if exists, with any
            # revisions resolved.
          &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step&#x27;s `dir` is specified and is an
              # absolute path, this value is ignored for that step&#x27;s execution.
          &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
              # Should only be used with RunBuildTrigger
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
          &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
          &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
              # regex.
          &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
        },
        &quot;resolvedStorageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build&#x27;s `source.storage_source`, if exists, with any
            # generations resolved.
          &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
        },
        &quot;fileHashes&quot;: { # Output only. Hash(es) of the build source, which can be used to verify that
            # the original source integrity was maintained in the build. Note that
            # `FileHashes` will only be populated if `BuildOptions` has requested a
            # `SourceProvenanceHash`.
            #
            # The keys to this map are file paths used as build source and the values
            # contain the hash values for those files.
            #
            # If the build source came in a single package such as a gzipped tarfile
            # (`.tar.gz`), the `FileHash` will be for the single path to that file.
          &quot;a_key&quot;: { # Container message for hashes of byte content of files, used in
              # SourceProvenance messages to verify integrity of source input to the build.
            &quot;fileHash&quot;: [ # Collection of file hashes.
              { # Container message for hash values.
                &quot;value&quot;: &quot;A String&quot;, # The hash value.
                &quot;type&quot;: &quot;A String&quot;, # The type of hash that was performed.
              },
            ],
          },
        },
      },
      &quot;secrets&quot;: [ # Secrets to decrypt using Cloud Key Management Service.
        { # Pairs a set of secret environment variables containing encrypted
            # values with the Cloud KMS key to use to decrypt the value.
          &quot;kmsKeyName&quot;: &quot;A String&quot;, # Cloud KMS key name to use to decrypt these envs.
          &quot;secretEnv&quot;: { # Map of environment variable name to its encrypted value.
              #
              # Secret environment variables must be unique across all of a build&#x27;s
              # secrets, and must be used by at least one build step. Values can be at most
              # 64 KB in size. There can be at most 100 secret values across all of a
              # build&#x27;s secrets.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
      &quot;results&quot;: { # Artifacts created by the build pipeline. # Output only. Results of the build.
        &quot;numArtifacts&quot;: &quot;A String&quot;, # Number of artifacts uploaded. Only populated when artifacts are uploaded.
        &quot;buildStepImages&quot;: [ # List of build step digests, in the order corresponding to build step
            # indices.
          &quot;A String&quot;,
        ],
        &quot;artifactTiming&quot;: { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
        &quot;artifactManifest&quot;: &quot;A String&quot;, # Path to the artifact manifest. Only populated when artifacts are uploaded.
        &quot;images&quot;: [ # Container images that were built as a part of the build.
          { # An image built by the pipeline.
            &quot;digest&quot;: &quot;A String&quot;, # Docker Registry 2.0 digest.
            &quot;name&quot;: &quot;A String&quot;, # Name used to push the container image to Google Container Registry, as
                # presented to `docker push`.
            &quot;pushTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
              &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
              &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
            },
          },
        ],
        &quot;buildStepOutputs&quot;: [ # List of build step outputs, produced by builder images, in the order
            # corresponding to build step indices.
            #
            # [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders)
            # can produce this output by writing to `$BUILDER_OUTPUT/output`.
            # Only the first 4KB of data is stored.
          &quot;A String&quot;,
        ],
      },
      &quot;logUrl&quot;: &quot;A String&quot;, # Output only. URL to logs for this build in Google Cloud Console.
      &quot;timing&quot;: { # Output only. Stores timing information for phases of the build. Valid keys
          # are:
          #
          # * BUILD: time to execute all build steps
          # * PUSH: time to push all specified images.
          # * FETCHSOURCE: time to fetch source.
          #
          # If the build does not specify source or images,
          # these keys will not be included.
        &quot;a_key&quot;: { # Start and end times for a build execution phase.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
      },
      &quot;finishTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was finished.
          #
          # The difference between finish_time and start_time is the duration of the
          # build&#x27;s execution.
      &quot;buildTriggerId&quot;: &quot;A String&quot;, # Output only. The ID of the `BuildTrigger` that triggered this build, if it
          # was triggered automatically.
      &quot;timeout&quot;: &quot;A String&quot;, # Amount of time that this build should be allowed to run, to second
          # granularity. If this amount of time elapses, work on the build will cease
          # and the build status will be `TIMEOUT`.
          #
          # `timeout` starts ticking from `startTime`.
          #
          # Default time is ten minutes.
      &quot;artifacts&quot;: { # Artifacts produced by a build that should be uploaded upon # Artifacts produced by the build that should be uploaded upon
          # successful completion of all build steps.
          # successful completion of all build steps.
        &quot;objects&quot;: { # Files in the workspace to upload to Cloud Storage upon successful # A list of objects to be uploaded to Cloud Storage upon successful
            # completion of all build steps.
            #
            # Files in the workspace matching specified paths globs will be uploaded to
            # the specified Cloud Storage location using the builder service account&#x27;s
            # credentials.
            #
            # The location and generation of the uploaded objects will be stored in the
            # Build resource&#x27;s results field.
            #
            # If any objects fail to be pushed, the build is marked FAILURE.
            # completion of all build steps.
          &quot;location&quot;: &quot;A String&quot;, # Cloud Storage bucket and optional object path, in the form
              # &quot;gs://bucket/path/to/somewhere/&quot;. (see [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              #
              # Files in the workspace matching any path pattern will be uploaded to
              # Cloud Storage with this location as a prefix.
          &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
          &quot;paths&quot;: [ # Path globs used to match files in the build&#x27;s workspace.
            &quot;A String&quot;,
          ],
        },
        &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
            # steps.
            #
            # The images will be pushed using the builder service account&#x27;s credentials.
            #
            # The digests of the pushed images will be stored in the Build resource&#x27;s
            # results field.
            #
            # If any of the images fail to be pushed, the build is marked FAILURE.
          &quot;A String&quot;,
        ],
      },
      &quot;logsBucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket where logs should be written (see
          # [Bucket Name
          # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
      &quot;steps&quot;: [ # Required. The operations to be performed on the workspace.
        { # A step in the build pipeline.
          &quot;args&quot;: [ # A list of arguments that will be presented to the step when it is started.
              #
              # If the image used to run the step&#x27;s container has an entrypoint, the `args`
              # are used as arguments to that entrypoint. If the image does not define
              # an entrypoint, the first element in args is used as the entrypoint,
              # and the remainder will be used as arguments.
            &quot;A String&quot;,
          ],
          &quot;entrypoint&quot;: &quot;A String&quot;, # Entrypoint to be used instead of the build step image&#x27;s default entrypoint.
              # If unset, the image&#x27;s default entrypoint is used.
          &quot;secretEnv&quot;: [ # A list of environment variables which are encrypted using a Cloud Key
              # Management Service crypto key. These values must be specified in the
              # build&#x27;s `Secret`.
            &quot;A String&quot;,
          ],
          &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build step. At this time, build step status is
              # only updated on build completion; step status is not updated in real-time
              # as the build progresses.
          &quot;volumes&quot;: [ # List of volumes to mount into the build step.
              #
              # Each volume is created as an empty volume prior to execution of the
              # build step. Upon completion of the build, volumes and their contents are
              # discarded.
              #
              # Using a named volume in only one step is not valid as it is indicative
              # of a build request with an incorrect configuration.
            { # Volume describes a Docker container volume which is mounted into build steps
                # in order to persist files across build step execution.
              &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                  #
                  # Paths must be absolute and cannot conflict with other volume paths on the
                  # same build step or with certain reserved volume paths.
              &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                  #
                  # Volume names must be unique per build step and must be valid names for
                  # Docker volumes. Each named volume must be used by at least two build steps.
            },
          ],
          &quot;timeout&quot;: &quot;A String&quot;, # Time limit for executing this build step. If not defined, the step has no
              # time limit and will be allowed to continue to run until either it completes
              # or the build itself times out.
          &quot;dir&quot;: &quot;A String&quot;, # Working directory to use when running this step&#x27;s container.
              #
              # If this value is a relative path, it is relative to the build&#x27;s working
              # directory. If this value is absolute, it may be outside the build&#x27;s working
              # directory, in which case the contents of the path may not be persisted
              # across build step executions, unless a `volume` for that path is specified.
              #
              # If the build specifies a `RepoSource` with `dir` and a step with a `dir`,
              # which specifies an absolute path, the `RepoSource` `dir` is ignored for
              # the step&#x27;s execution.
          &quot;id&quot;: &quot;A String&quot;, # Unique identifier for this build step, used in `wait_for` to
              # reference this build step as a dependency.
          &quot;env&quot;: [ # A list of environment variable definitions to be used when running a step.
              #
              # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
              # being given the value &quot;VALUE&quot;.
            &quot;A String&quot;,
          ],
          &quot;waitFor&quot;: [ # The ID(s) of the step(s) that this build step depends on.
              # This build step will not start until all the build steps in `wait_for`
              # have completed successfully. If `wait_for` is empty, this build step will
              # start when all previous build steps in the `Build.Steps` list have
              # completed successfully.
            &quot;A String&quot;,
          ],
          &quot;name&quot;: &quot;A String&quot;, # Required. The name of the container image that will run this particular
              # build step.
              #
              # If the image is available in the host&#x27;s Docker daemon&#x27;s cache, it
              # will be run directly. If not, the host will attempt to pull the image
              # first, using the builder service account&#x27;s credentials if necessary.
              #
              # The Docker daemon&#x27;s cache will already have the latest versions of all of
              # the officially supported build steps
              # ([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).
              # The Docker daemon will also have cached many of the layers for some popular
              # images, like &quot;ubuntu&quot;, &quot;debian&quot;, but they will be refreshed at the time you
              # attempt to use them.
              #
              # If you built an image in a previous build step, it will be stored in the
              # host&#x27;s Docker daemon&#x27;s cache and is available to use as the name for a
              # later build step.
          &quot;pullTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step&#x27;s
              # builder image only.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
          &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the build.
      &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build.
      &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images are pushed using the builder service account&#x27;s credentials.
          #
          # The digests of the pushed images will be stored in the `Build` resource&#x27;s
          # results field.
          #
          # If any of the images fail to be pushed, the build status is marked
          # `FAILURE`.
        &quot;A String&quot;,
      ],
      &quot;projectId&quot;: &quot;A String&quot;, # Output only. ID of the project.
      &quot;source&quot;: { # Location of the source in a supported storage service. # The location of the source files to build.
        &quot;storageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
          &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
        },
        &quot;repoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
            # Repository.
          &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step&#x27;s `dir` is specified and is an
              # absolute path, this value is ignored for that step&#x27;s execution.
          &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
              # Should only be used with RunBuildTrigger
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
          &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
          &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
              # regex.
          &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
        },
      },
      &quot;tags&quot;: [ # Tags for annotation of a `Build`. These are not docker tags.
        &quot;A String&quot;,
      ],
      &quot;options&quot;: { # Optional arguments to enable specific features of builds. # Special options for this build.
        &quot;volumes&quot;: [ # Global list of volumes to mount for ALL build steps
            #
            # Each volume is created as an empty volume prior to starting the build
            # process. Upon completion of the build, volumes and their contents are
            # discarded. Global volume names and paths cannot conflict with the volumes
            # defined a build step.
            #
            # Using a global volume in a build with only one step is not valid as
            # it is indicative of a build request with an incorrect configuration.
          { # Volume describes a Docker container volume which is mounted into build steps
              # in order to persist files across build step execution.
            &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                #
                # Paths must be absolute and cannot conflict with other volume paths on the
                # same build step or with certain reserved volume paths.
            &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                #
                # Volume names must be unique per build step and must be valid names for
                # Docker volumes. Each named volume must be used by at least two build steps.
          },
        ],
        &quot;env&quot;: [ # A list of global environment variable definitions that will exist for all
            # build steps in this build. If a variable is defined in both globally and in
            # a build step, the variable will use the build step value.
            #
            # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
            # being given the value &quot;VALUE&quot;.
          &quot;A String&quot;,
        ],
        &quot;sourceProvenanceHash&quot;: [ # Requested hash for SourceProvenance.
          &quot;A String&quot;,
        ],
        &quot;machineType&quot;: &quot;A String&quot;, # Compute Engine machine type on which to run the build.
        &quot;logStreamingOption&quot;: &quot;A String&quot;, # Option to define build log streaming behavior to Google Cloud
            # Storage.
        &quot;requestedVerifyOption&quot;: &quot;A String&quot;, # Requested verifiability options.
        &quot;substitutionOption&quot;: &quot;A String&quot;, # Option to specify behavior when there is an error in the substitution
            # checks.
            #
            # NOTE: this is always set to ALLOW_LOOSE for triggered builds and cannot
            # be overridden in the build configuration file.
        &quot;diskSizeGb&quot;: &quot;A String&quot;, # Requested disk size for the VM that runs the build. Note that this is *NOT*
            # &quot;disk free&quot;; some of the space will be used by the operating system and
            # build utilities. Also note that this is the minimum disk size that will be
            # allocated for the build -- the build may run with a larger disk than
            # requested. At present, the maximum disk size is 1000GB; builds that request
            # more than the maximum are rejected with an error.
        &quot;workerPool&quot;: &quot;A String&quot;, # Option to specify a `WorkerPool` for the build.
            # Format: projects/{project}/workerPools/{workerPool}
            #
            # This field is experimental.
        &quot;logging&quot;: &quot;A String&quot;, # Option to specify the logging mode, which determines if and where build
            # logs are stored.
        &quot;secretEnv&quot;: [ # A list of global environment variables, which are encrypted using a Cloud
            # Key Management Service crypto key. These values must be specified in the
            # build&#x27;s `Secret`. These variables will be available to all build steps
            # in this build.
          &quot;A String&quot;,
        ],
        &quot;dynamicSubstitutions&quot;: True or False, # Option to specify whether or not to apply bash style string
            # operations to the substitutions.
            #
            # NOTE: this is always enabled for triggered builds and cannot be
            # overridden in the build configuration file.
      },
      &quot;substitutions&quot;: { # Substitutions data for `Build` resource.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the build was received.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was started.
    }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(projectId, body=None, x__xgafv=None)</code>
  <pre>Starts a build with the specified configuration.

This method returns a long-running `Operation`, which includes the build
ID. Pass the build ID to `GetBuild` to determine the build status (such as
`SUCCESS` or `FAILURE`).

Args:
  projectId: string, Required. ID of the project. (required)
  body: object, The request body.
    The object takes the form of:

{ # A build resource in the Cloud Build API.
      # 
      # At a high level, a `Build` describes where to find source code, how to build
      # it (for example, the builder image to run on the source), and where to store
      # the built artifacts.
      # 
      # Fields can include the following variables, which will be expanded when the
      # build is created:
      # 
      # - $PROJECT_ID: the project ID of the build.
      # - $BUILD_ID: the autogenerated ID of the build.
      # - $REPO_NAME: the source repository name specified by RepoSource.
      # - $BRANCH_NAME: the branch name specified by RepoSource.
      # - $TAG_NAME: the tag name specified by RepoSource.
      # - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or
      #   resolved from the specified branch or tag.
      # - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA.
    &quot;queueTtl&quot;: &quot;A String&quot;, # TTL in queue for this build. If provided and the build is enqueued longer
        # than this value, the build will expire and the build status will be
        # `EXPIRED`.
        # 
        # The TTL starts ticking from create_time.
    &quot;statusDetail&quot;: &quot;A String&quot;, # Output only. Customer-readable message about the current status.
    &quot;sourceProvenance&quot;: { # Provenance of the source. Ways to find the original source, or verify that # Output only. A permanent fixed identifier for source.
        # some source was used for this build.
      &quot;resolvedRepoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # A copy of the build&#x27;s `source.repo_source`, if exists, with any
          # revisions resolved.
        &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step&#x27;s `dir` is specified and is an
            # absolute path, this value is ignored for that step&#x27;s execution.
        &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
            # Should only be used with RunBuildTrigger
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
        &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
        &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
            # regex.
        &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
      },
      &quot;resolvedStorageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build&#x27;s `source.storage_source`, if exists, with any
          # generations resolved.
        &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
      },
      &quot;fileHashes&quot;: { # Output only. Hash(es) of the build source, which can be used to verify that
          # the original source integrity was maintained in the build. Note that
          # `FileHashes` will only be populated if `BuildOptions` has requested a
          # `SourceProvenanceHash`.
          #
          # The keys to this map are file paths used as build source and the values
          # contain the hash values for those files.
          #
          # If the build source came in a single package such as a gzipped tarfile
          # (`.tar.gz`), the `FileHash` will be for the single path to that file.
        &quot;a_key&quot;: { # Container message for hashes of byte content of files, used in
            # SourceProvenance messages to verify integrity of source input to the build.
          &quot;fileHash&quot;: [ # Collection of file hashes.
            { # Container message for hash values.
              &quot;value&quot;: &quot;A String&quot;, # The hash value.
              &quot;type&quot;: &quot;A String&quot;, # The type of hash that was performed.
            },
          ],
        },
      },
    },
    &quot;secrets&quot;: [ # Secrets to decrypt using Cloud Key Management Service.
      { # Pairs a set of secret environment variables containing encrypted
          # values with the Cloud KMS key to use to decrypt the value.
        &quot;kmsKeyName&quot;: &quot;A String&quot;, # Cloud KMS key name to use to decrypt these envs.
        &quot;secretEnv&quot;: { # Map of environment variable name to its encrypted value.
            #
            # Secret environment variables must be unique across all of a build&#x27;s
            # secrets, and must be used by at least one build step. Values can be at most
            # 64 KB in size. There can be at most 100 secret values across all of a
            # build&#x27;s secrets.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
    ],
    &quot;results&quot;: { # Artifacts created by the build pipeline. # Output only. Results of the build.
      &quot;numArtifacts&quot;: &quot;A String&quot;, # Number of artifacts uploaded. Only populated when artifacts are uploaded.
      &quot;buildStepImages&quot;: [ # List of build step digests, in the order corresponding to build step
          # indices.
        &quot;A String&quot;,
      ],
      &quot;artifactTiming&quot;: { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
        &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
        &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
      },
      &quot;artifactManifest&quot;: &quot;A String&quot;, # Path to the artifact manifest. Only populated when artifacts are uploaded.
      &quot;images&quot;: [ # Container images that were built as a part of the build.
        { # An image built by the pipeline.
          &quot;digest&quot;: &quot;A String&quot;, # Docker Registry 2.0 digest.
          &quot;name&quot;: &quot;A String&quot;, # Name used to push the container image to Google Container Registry, as
              # presented to `docker push`.
          &quot;pushTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
        },
      ],
      &quot;buildStepOutputs&quot;: [ # List of build step outputs, produced by builder images, in the order
          # corresponding to build step indices.
          #
          # [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders)
          # can produce this output by writing to `$BUILDER_OUTPUT/output`.
          # Only the first 4KB of data is stored.
        &quot;A String&quot;,
      ],
    },
    &quot;logUrl&quot;: &quot;A String&quot;, # Output only. URL to logs for this build in Google Cloud Console.
    &quot;timing&quot;: { # Output only. Stores timing information for phases of the build. Valid keys
        # are:
        # 
        # * BUILD: time to execute all build steps
        # * PUSH: time to push all specified images.
        # * FETCHSOURCE: time to fetch source.
        # 
        # If the build does not specify source or images,
        # these keys will not be included.
      &quot;a_key&quot;: { # Start and end times for a build execution phase.
        &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
        &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
      },
    },
    &quot;finishTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was finished.
        # 
        # The difference between finish_time and start_time is the duration of the
        # build&#x27;s execution.
    &quot;buildTriggerId&quot;: &quot;A String&quot;, # Output only. The ID of the `BuildTrigger` that triggered this build, if it
        # was triggered automatically.
    &quot;timeout&quot;: &quot;A String&quot;, # Amount of time that this build should be allowed to run, to second
        # granularity. If this amount of time elapses, work on the build will cease
        # and the build status will be `TIMEOUT`.
        # 
        # `timeout` starts ticking from `startTime`.
        # 
        # Default time is ten minutes.
    &quot;artifacts&quot;: { # Artifacts produced by a build that should be uploaded upon # Artifacts produced by the build that should be uploaded upon
        # successful completion of all build steps.
        # successful completion of all build steps.
      &quot;objects&quot;: { # Files in the workspace to upload to Cloud Storage upon successful # A list of objects to be uploaded to Cloud Storage upon successful
          # completion of all build steps.
          #
          # Files in the workspace matching specified paths globs will be uploaded to
          # the specified Cloud Storage location using the builder service account&#x27;s
          # credentials.
          #
          # The location and generation of the uploaded objects will be stored in the
          # Build resource&#x27;s results field.
          #
          # If any objects fail to be pushed, the build is marked FAILURE.
          # completion of all build steps.
        &quot;location&quot;: &quot;A String&quot;, # Cloud Storage bucket and optional object path, in the form
            # &quot;gs://bucket/path/to/somewhere/&quot;. (see [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
            #
            # Files in the workspace matching any path pattern will be uploaded to
            # Cloud Storage with this location as a prefix.
        &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
        &quot;paths&quot;: [ # Path globs used to match files in the build&#x27;s workspace.
          &quot;A String&quot;,
        ],
      },
      &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images will be pushed using the builder service account&#x27;s credentials.
          #
          # The digests of the pushed images will be stored in the Build resource&#x27;s
          # results field.
          #
          # If any of the images fail to be pushed, the build is marked FAILURE.
        &quot;A String&quot;,
      ],
    },
    &quot;logsBucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket where logs should be written (see
        # [Bucket Name
        # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
    &quot;steps&quot;: [ # Required. The operations to be performed on the workspace.
      { # A step in the build pipeline.
        &quot;args&quot;: [ # A list of arguments that will be presented to the step when it is started.
            #
            # If the image used to run the step&#x27;s container has an entrypoint, the `args`
            # are used as arguments to that entrypoint. If the image does not define
            # an entrypoint, the first element in args is used as the entrypoint,
            # and the remainder will be used as arguments.
          &quot;A String&quot;,
        ],
        &quot;entrypoint&quot;: &quot;A String&quot;, # Entrypoint to be used instead of the build step image&#x27;s default entrypoint.
            # If unset, the image&#x27;s default entrypoint is used.
        &quot;secretEnv&quot;: [ # A list of environment variables which are encrypted using a Cloud Key
            # Management Service crypto key. These values must be specified in the
            # build&#x27;s `Secret`.
          &quot;A String&quot;,
        ],
        &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build step. At this time, build step status is
            # only updated on build completion; step status is not updated in real-time
            # as the build progresses.
        &quot;volumes&quot;: [ # List of volumes to mount into the build step.
            #
            # Each volume is created as an empty volume prior to execution of the
            # build step. Upon completion of the build, volumes and their contents are
            # discarded.
            #
            # Using a named volume in only one step is not valid as it is indicative
            # of a build request with an incorrect configuration.
          { # Volume describes a Docker container volume which is mounted into build steps
              # in order to persist files across build step execution.
            &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                #
                # Paths must be absolute and cannot conflict with other volume paths on the
                # same build step or with certain reserved volume paths.
            &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                #
                # Volume names must be unique per build step and must be valid names for
                # Docker volumes. Each named volume must be used by at least two build steps.
          },
        ],
        &quot;timeout&quot;: &quot;A String&quot;, # Time limit for executing this build step. If not defined, the step has no
            # time limit and will be allowed to continue to run until either it completes
            # or the build itself times out.
        &quot;dir&quot;: &quot;A String&quot;, # Working directory to use when running this step&#x27;s container.
            #
            # If this value is a relative path, it is relative to the build&#x27;s working
            # directory. If this value is absolute, it may be outside the build&#x27;s working
            # directory, in which case the contents of the path may not be persisted
            # across build step executions, unless a `volume` for that path is specified.
            #
            # If the build specifies a `RepoSource` with `dir` and a step with a `dir`,
            # which specifies an absolute path, the `RepoSource` `dir` is ignored for
            # the step&#x27;s execution.
        &quot;id&quot;: &quot;A String&quot;, # Unique identifier for this build step, used in `wait_for` to
            # reference this build step as a dependency.
        &quot;env&quot;: [ # A list of environment variable definitions to be used when running a step.
            #
            # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
            # being given the value &quot;VALUE&quot;.
          &quot;A String&quot;,
        ],
        &quot;waitFor&quot;: [ # The ID(s) of the step(s) that this build step depends on.
            # This build step will not start until all the build steps in `wait_for`
            # have completed successfully. If `wait_for` is empty, this build step will
            # start when all previous build steps in the `Build.Steps` list have
            # completed successfully.
          &quot;A String&quot;,
        ],
        &quot;name&quot;: &quot;A String&quot;, # Required. The name of the container image that will run this particular
            # build step.
            #
            # If the image is available in the host&#x27;s Docker daemon&#x27;s cache, it
            # will be run directly. If not, the host will attempt to pull the image
            # first, using the builder service account&#x27;s credentials if necessary.
            #
            # The Docker daemon&#x27;s cache will already have the latest versions of all of
            # the officially supported build steps
            # ([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).
            # The Docker daemon will also have cached many of the layers for some popular
            # images, like &quot;ubuntu&quot;, &quot;debian&quot;, but they will be refreshed at the time you
            # attempt to use them.
            #
            # If you built an image in a previous build step, it will be stored in the
            # host&#x27;s Docker daemon&#x27;s cache and is available to use as the name for a
            # later build step.
        &quot;pullTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step&#x27;s
            # builder image only.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
        &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
      },
    ],
    &quot;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the build.
    &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build.
    &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
        # steps.
        # 
        # The images are pushed using the builder service account&#x27;s credentials.
        # 
        # The digests of the pushed images will be stored in the `Build` resource&#x27;s
        # results field.
        # 
        # If any of the images fail to be pushed, the build status is marked
        # `FAILURE`.
      &quot;A String&quot;,
    ],
    &quot;projectId&quot;: &quot;A String&quot;, # Output only. ID of the project.
    &quot;source&quot;: { # Location of the source in a supported storage service. # The location of the source files to build.
      &quot;storageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
        &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
      },
      &quot;repoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
          # Repository.
        &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step&#x27;s `dir` is specified and is an
            # absolute path, this value is ignored for that step&#x27;s execution.
        &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
            # Should only be used with RunBuildTrigger
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
        &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
        &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
            # regex.
        &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
      },
    },
    &quot;tags&quot;: [ # Tags for annotation of a `Build`. These are not docker tags.
      &quot;A String&quot;,
    ],
    &quot;options&quot;: { # Optional arguments to enable specific features of builds. # Special options for this build.
      &quot;volumes&quot;: [ # Global list of volumes to mount for ALL build steps
          #
          # Each volume is created as an empty volume prior to starting the build
          # process. Upon completion of the build, volumes and their contents are
          # discarded. Global volume names and paths cannot conflict with the volumes
          # defined a build step.
          #
          # Using a global volume in a build with only one step is not valid as
          # it is indicative of a build request with an incorrect configuration.
        { # Volume describes a Docker container volume which is mounted into build steps
            # in order to persist files across build step execution.
          &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
              #
              # Paths must be absolute and cannot conflict with other volume paths on the
              # same build step or with certain reserved volume paths.
          &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
              #
              # Volume names must be unique per build step and must be valid names for
              # Docker volumes. Each named volume must be used by at least two build steps.
        },
      ],
      &quot;env&quot;: [ # A list of global environment variable definitions that will exist for all
          # build steps in this build. If a variable is defined in both globally and in
          # a build step, the variable will use the build step value.
          #
          # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
          # being given the value &quot;VALUE&quot;.
        &quot;A String&quot;,
      ],
      &quot;sourceProvenanceHash&quot;: [ # Requested hash for SourceProvenance.
        &quot;A String&quot;,
      ],
      &quot;machineType&quot;: &quot;A String&quot;, # Compute Engine machine type on which to run the build.
      &quot;logStreamingOption&quot;: &quot;A String&quot;, # Option to define build log streaming behavior to Google Cloud
          # Storage.
      &quot;requestedVerifyOption&quot;: &quot;A String&quot;, # Requested verifiability options.
      &quot;substitutionOption&quot;: &quot;A String&quot;, # Option to specify behavior when there is an error in the substitution
          # checks.
          #
          # NOTE: this is always set to ALLOW_LOOSE for triggered builds and cannot
          # be overridden in the build configuration file.
      &quot;diskSizeGb&quot;: &quot;A String&quot;, # Requested disk size for the VM that runs the build. Note that this is *NOT*
          # &quot;disk free&quot;; some of the space will be used by the operating system and
          # build utilities. Also note that this is the minimum disk size that will be
          # allocated for the build -- the build may run with a larger disk than
          # requested. At present, the maximum disk size is 1000GB; builds that request
          # more than the maximum are rejected with an error.
      &quot;workerPool&quot;: &quot;A String&quot;, # Option to specify a `WorkerPool` for the build.
          # Format: projects/{project}/workerPools/{workerPool}
          #
          # This field is experimental.
      &quot;logging&quot;: &quot;A String&quot;, # Option to specify the logging mode, which determines if and where build
          # logs are stored.
      &quot;secretEnv&quot;: [ # A list of global environment variables, which are encrypted using a Cloud
          # Key Management Service crypto key. These values must be specified in the
          # build&#x27;s `Secret`. These variables will be available to all build steps
          # in this build.
        &quot;A String&quot;,
      ],
      &quot;dynamicSubstitutions&quot;: True or False, # Option to specify whether or not to apply bash style string
          # operations to the substitutions.
          #
          # NOTE: this is always enabled for triggered builds and cannot be
          # overridden in the build configuration file.
    },
    &quot;substitutions&quot;: { # Substitutions data for `Build` resource.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the build was received.
    &quot;startTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was started.
  }

  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.
    &quot;response&quot;: { # 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`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # 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.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # 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}`.
    &quot;error&quot;: { # 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).
      &quot;message&quot;: &quot;A String&quot;, # 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.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;done&quot;: 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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, id, x__xgafv=None)</code>
  <pre>Returns information about a previously requested build.

The `Build` that is returned includes its status (such as `SUCCESS`,
`FAILURE`, or `WORKING`), and timing information.

Args:
  projectId: string, Required. ID of the project. (required)
  id: string, Required. ID of the build. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A build resource in the Cloud Build API.
        #
        # At a high level, a `Build` describes where to find source code, how to build
        # it (for example, the builder image to run on the source), and where to store
        # the built artifacts.
        #
        # Fields can include the following variables, which will be expanded when the
        # build is created:
        #
        # - $PROJECT_ID: the project ID of the build.
        # - $BUILD_ID: the autogenerated ID of the build.
        # - $REPO_NAME: the source repository name specified by RepoSource.
        # - $BRANCH_NAME: the branch name specified by RepoSource.
        # - $TAG_NAME: the tag name specified by RepoSource.
        # - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or
        #   resolved from the specified branch or tag.
        # - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA.
      &quot;queueTtl&quot;: &quot;A String&quot;, # TTL in queue for this build. If provided and the build is enqueued longer
          # than this value, the build will expire and the build status will be
          # `EXPIRED`.
          #
          # The TTL starts ticking from create_time.
      &quot;statusDetail&quot;: &quot;A String&quot;, # Output only. Customer-readable message about the current status.
      &quot;sourceProvenance&quot;: { # Provenance of the source. Ways to find the original source, or verify that # Output only. A permanent fixed identifier for source.
          # some source was used for this build.
        &quot;resolvedRepoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # A copy of the build&#x27;s `source.repo_source`, if exists, with any
            # revisions resolved.
          &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step&#x27;s `dir` is specified and is an
              # absolute path, this value is ignored for that step&#x27;s execution.
          &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
              # Should only be used with RunBuildTrigger
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
          &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
          &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
              # regex.
          &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
        },
        &quot;resolvedStorageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build&#x27;s `source.storage_source`, if exists, with any
            # generations resolved.
          &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
        },
        &quot;fileHashes&quot;: { # Output only. Hash(es) of the build source, which can be used to verify that
            # the original source integrity was maintained in the build. Note that
            # `FileHashes` will only be populated if `BuildOptions` has requested a
            # `SourceProvenanceHash`.
            #
            # The keys to this map are file paths used as build source and the values
            # contain the hash values for those files.
            #
            # If the build source came in a single package such as a gzipped tarfile
            # (`.tar.gz`), the `FileHash` will be for the single path to that file.
          &quot;a_key&quot;: { # Container message for hashes of byte content of files, used in
              # SourceProvenance messages to verify integrity of source input to the build.
            &quot;fileHash&quot;: [ # Collection of file hashes.
              { # Container message for hash values.
                &quot;value&quot;: &quot;A String&quot;, # The hash value.
                &quot;type&quot;: &quot;A String&quot;, # The type of hash that was performed.
              },
            ],
          },
        },
      },
      &quot;secrets&quot;: [ # Secrets to decrypt using Cloud Key Management Service.
        { # Pairs a set of secret environment variables containing encrypted
            # values with the Cloud KMS key to use to decrypt the value.
          &quot;kmsKeyName&quot;: &quot;A String&quot;, # Cloud KMS key name to use to decrypt these envs.
          &quot;secretEnv&quot;: { # Map of environment variable name to its encrypted value.
              #
              # Secret environment variables must be unique across all of a build&#x27;s
              # secrets, and must be used by at least one build step. Values can be at most
              # 64 KB in size. There can be at most 100 secret values across all of a
              # build&#x27;s secrets.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
      &quot;results&quot;: { # Artifacts created by the build pipeline. # Output only. Results of the build.
        &quot;numArtifacts&quot;: &quot;A String&quot;, # Number of artifacts uploaded. Only populated when artifacts are uploaded.
        &quot;buildStepImages&quot;: [ # List of build step digests, in the order corresponding to build step
            # indices.
          &quot;A String&quot;,
        ],
        &quot;artifactTiming&quot;: { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
        &quot;artifactManifest&quot;: &quot;A String&quot;, # Path to the artifact manifest. Only populated when artifacts are uploaded.
        &quot;images&quot;: [ # Container images that were built as a part of the build.
          { # An image built by the pipeline.
            &quot;digest&quot;: &quot;A String&quot;, # Docker Registry 2.0 digest.
            &quot;name&quot;: &quot;A String&quot;, # Name used to push the container image to Google Container Registry, as
                # presented to `docker push`.
            &quot;pushTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
              &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
              &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
            },
          },
        ],
        &quot;buildStepOutputs&quot;: [ # List of build step outputs, produced by builder images, in the order
            # corresponding to build step indices.
            #
            # [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders)
            # can produce this output by writing to `$BUILDER_OUTPUT/output`.
            # Only the first 4KB of data is stored.
          &quot;A String&quot;,
        ],
      },
      &quot;logUrl&quot;: &quot;A String&quot;, # Output only. URL to logs for this build in Google Cloud Console.
      &quot;timing&quot;: { # Output only. Stores timing information for phases of the build. Valid keys
          # are:
          #
          # * BUILD: time to execute all build steps
          # * PUSH: time to push all specified images.
          # * FETCHSOURCE: time to fetch source.
          #
          # If the build does not specify source or images,
          # these keys will not be included.
        &quot;a_key&quot;: { # Start and end times for a build execution phase.
          &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
          &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
        },
      },
      &quot;finishTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was finished.
          #
          # The difference between finish_time and start_time is the duration of the
          # build&#x27;s execution.
      &quot;buildTriggerId&quot;: &quot;A String&quot;, # Output only. The ID of the `BuildTrigger` that triggered this build, if it
          # was triggered automatically.
      &quot;timeout&quot;: &quot;A String&quot;, # Amount of time that this build should be allowed to run, to second
          # granularity. If this amount of time elapses, work on the build will cease
          # and the build status will be `TIMEOUT`.
          #
          # `timeout` starts ticking from `startTime`.
          #
          # Default time is ten minutes.
      &quot;artifacts&quot;: { # Artifacts produced by a build that should be uploaded upon # Artifacts produced by the build that should be uploaded upon
          # successful completion of all build steps.
          # successful completion of all build steps.
        &quot;objects&quot;: { # Files in the workspace to upload to Cloud Storage upon successful # A list of objects to be uploaded to Cloud Storage upon successful
            # completion of all build steps.
            #
            # Files in the workspace matching specified paths globs will be uploaded to
            # the specified Cloud Storage location using the builder service account&#x27;s
            # credentials.
            #
            # The location and generation of the uploaded objects will be stored in the
            # Build resource&#x27;s results field.
            #
            # If any objects fail to be pushed, the build is marked FAILURE.
            # completion of all build steps.
          &quot;location&quot;: &quot;A String&quot;, # Cloud Storage bucket and optional object path, in the form
              # &quot;gs://bucket/path/to/somewhere/&quot;. (see [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              #
              # Files in the workspace matching any path pattern will be uploaded to
              # Cloud Storage with this location as a prefix.
          &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
          &quot;paths&quot;: [ # Path globs used to match files in the build&#x27;s workspace.
            &quot;A String&quot;,
          ],
        },
        &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
            # steps.
            #
            # The images will be pushed using the builder service account&#x27;s credentials.
            #
            # The digests of the pushed images will be stored in the Build resource&#x27;s
            # results field.
            #
            # If any of the images fail to be pushed, the build is marked FAILURE.
          &quot;A String&quot;,
        ],
      },
      &quot;logsBucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket where logs should be written (see
          # [Bucket Name
          # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
      &quot;steps&quot;: [ # Required. The operations to be performed on the workspace.
        { # A step in the build pipeline.
          &quot;args&quot;: [ # A list of arguments that will be presented to the step when it is started.
              #
              # If the image used to run the step&#x27;s container has an entrypoint, the `args`
              # are used as arguments to that entrypoint. If the image does not define
              # an entrypoint, the first element in args is used as the entrypoint,
              # and the remainder will be used as arguments.
            &quot;A String&quot;,
          ],
          &quot;entrypoint&quot;: &quot;A String&quot;, # Entrypoint to be used instead of the build step image&#x27;s default entrypoint.
              # If unset, the image&#x27;s default entrypoint is used.
          &quot;secretEnv&quot;: [ # A list of environment variables which are encrypted using a Cloud Key
              # Management Service crypto key. These values must be specified in the
              # build&#x27;s `Secret`.
            &quot;A String&quot;,
          ],
          &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build step. At this time, build step status is
              # only updated on build completion; step status is not updated in real-time
              # as the build progresses.
          &quot;volumes&quot;: [ # List of volumes to mount into the build step.
              #
              # Each volume is created as an empty volume prior to execution of the
              # build step. Upon completion of the build, volumes and their contents are
              # discarded.
              #
              # Using a named volume in only one step is not valid as it is indicative
              # of a build request with an incorrect configuration.
            { # Volume describes a Docker container volume which is mounted into build steps
                # in order to persist files across build step execution.
              &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                  #
                  # Paths must be absolute and cannot conflict with other volume paths on the
                  # same build step or with certain reserved volume paths.
              &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                  #
                  # Volume names must be unique per build step and must be valid names for
                  # Docker volumes. Each named volume must be used by at least two build steps.
            },
          ],
          &quot;timeout&quot;: &quot;A String&quot;, # Time limit for executing this build step. If not defined, the step has no
              # time limit and will be allowed to continue to run until either it completes
              # or the build itself times out.
          &quot;dir&quot;: &quot;A String&quot;, # Working directory to use when running this step&#x27;s container.
              #
              # If this value is a relative path, it is relative to the build&#x27;s working
              # directory. If this value is absolute, it may be outside the build&#x27;s working
              # directory, in which case the contents of the path may not be persisted
              # across build step executions, unless a `volume` for that path is specified.
              #
              # If the build specifies a `RepoSource` with `dir` and a step with a `dir`,
              # which specifies an absolute path, the `RepoSource` `dir` is ignored for
              # the step&#x27;s execution.
          &quot;id&quot;: &quot;A String&quot;, # Unique identifier for this build step, used in `wait_for` to
              # reference this build step as a dependency.
          &quot;env&quot;: [ # A list of environment variable definitions to be used when running a step.
              #
              # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
              # being given the value &quot;VALUE&quot;.
            &quot;A String&quot;,
          ],
          &quot;waitFor&quot;: [ # The ID(s) of the step(s) that this build step depends on.
              # This build step will not start until all the build steps in `wait_for`
              # have completed successfully. If `wait_for` is empty, this build step will
              # start when all previous build steps in the `Build.Steps` list have
              # completed successfully.
            &quot;A String&quot;,
          ],
          &quot;name&quot;: &quot;A String&quot;, # Required. The name of the container image that will run this particular
              # build step.
              #
              # If the image is available in the host&#x27;s Docker daemon&#x27;s cache, it
              # will be run directly. If not, the host will attempt to pull the image
              # first, using the builder service account&#x27;s credentials if necessary.
              #
              # The Docker daemon&#x27;s cache will already have the latest versions of all of
              # the officially supported build steps
              # ([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).
              # The Docker daemon will also have cached many of the layers for some popular
              # images, like &quot;ubuntu&quot;, &quot;debian&quot;, but they will be refreshed at the time you
              # attempt to use them.
              #
              # If you built an image in a previous build step, it will be stored in the
              # host&#x27;s Docker daemon&#x27;s cache and is available to use as the name for a
              # later build step.
          &quot;pullTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step&#x27;s
              # builder image only.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
          &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
            &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
            &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
          },
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the build.
      &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build.
      &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images are pushed using the builder service account&#x27;s credentials.
          #
          # The digests of the pushed images will be stored in the `Build` resource&#x27;s
          # results field.
          #
          # If any of the images fail to be pushed, the build status is marked
          # `FAILURE`.
        &quot;A String&quot;,
      ],
      &quot;projectId&quot;: &quot;A String&quot;, # Output only. ID of the project.
      &quot;source&quot;: { # Location of the source in a supported storage service. # The location of the source files to build.
        &quot;storageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
          &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
        },
        &quot;repoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
            # Repository.
          &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step&#x27;s `dir` is specified and is an
              # absolute path, this value is ignored for that step&#x27;s execution.
          &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
              # Should only be used with RunBuildTrigger
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
          &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
          &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
              # regex.
          &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
        },
      },
      &quot;tags&quot;: [ # Tags for annotation of a `Build`. These are not docker tags.
        &quot;A String&quot;,
      ],
      &quot;options&quot;: { # Optional arguments to enable specific features of builds. # Special options for this build.
        &quot;volumes&quot;: [ # Global list of volumes to mount for ALL build steps
            #
            # Each volume is created as an empty volume prior to starting the build
            # process. Upon completion of the build, volumes and their contents are
            # discarded. Global volume names and paths cannot conflict with the volumes
            # defined a build step.
            #
            # Using a global volume in a build with only one step is not valid as
            # it is indicative of a build request with an incorrect configuration.
          { # Volume describes a Docker container volume which is mounted into build steps
              # in order to persist files across build step execution.
            &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                #
                # Paths must be absolute and cannot conflict with other volume paths on the
                # same build step or with certain reserved volume paths.
            &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                #
                # Volume names must be unique per build step and must be valid names for
                # Docker volumes. Each named volume must be used by at least two build steps.
          },
        ],
        &quot;env&quot;: [ # A list of global environment variable definitions that will exist for all
            # build steps in this build. If a variable is defined in both globally and in
            # a build step, the variable will use the build step value.
            #
            # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
            # being given the value &quot;VALUE&quot;.
          &quot;A String&quot;,
        ],
        &quot;sourceProvenanceHash&quot;: [ # Requested hash for SourceProvenance.
          &quot;A String&quot;,
        ],
        &quot;machineType&quot;: &quot;A String&quot;, # Compute Engine machine type on which to run the build.
        &quot;logStreamingOption&quot;: &quot;A String&quot;, # Option to define build log streaming behavior to Google Cloud
            # Storage.
        &quot;requestedVerifyOption&quot;: &quot;A String&quot;, # Requested verifiability options.
        &quot;substitutionOption&quot;: &quot;A String&quot;, # Option to specify behavior when there is an error in the substitution
            # checks.
            #
            # NOTE: this is always set to ALLOW_LOOSE for triggered builds and cannot
            # be overridden in the build configuration file.
        &quot;diskSizeGb&quot;: &quot;A String&quot;, # Requested disk size for the VM that runs the build. Note that this is *NOT*
            # &quot;disk free&quot;; some of the space will be used by the operating system and
            # build utilities. Also note that this is the minimum disk size that will be
            # allocated for the build -- the build may run with a larger disk than
            # requested. At present, the maximum disk size is 1000GB; builds that request
            # more than the maximum are rejected with an error.
        &quot;workerPool&quot;: &quot;A String&quot;, # Option to specify a `WorkerPool` for the build.
            # Format: projects/{project}/workerPools/{workerPool}
            #
            # This field is experimental.
        &quot;logging&quot;: &quot;A String&quot;, # Option to specify the logging mode, which determines if and where build
            # logs are stored.
        &quot;secretEnv&quot;: [ # A list of global environment variables, which are encrypted using a Cloud
            # Key Management Service crypto key. These values must be specified in the
            # build&#x27;s `Secret`. These variables will be available to all build steps
            # in this build.
          &quot;A String&quot;,
        ],
        &quot;dynamicSubstitutions&quot;: True or False, # Option to specify whether or not to apply bash style string
            # operations to the substitutions.
            #
            # NOTE: this is always enabled for triggered builds and cannot be
            # overridden in the build configuration file.
      },
      &quot;substitutions&quot;: { # Substitutions data for `Build` resource.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the build was received.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was started.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists previously requested builds.

Previously requested builds may still be in-progress, or may have finished
successfully or unsuccessfully.

Args:
  projectId: string, Required. ID of the project. (required)
  filter: string, The raw filter text to constrain the results.
  pageToken: string, Token to provide to skip to a particular spot in the list.
  pageSize: integer, Number of results to return in the list.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response including listed builds.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to receive the next page of results.
    &quot;builds&quot;: [ # Builds will be sorted by `create_time`, descending.
      { # A build resource in the Cloud Build API.
            #
            # At a high level, a `Build` describes where to find source code, how to build
            # it (for example, the builder image to run on the source), and where to store
            # the built artifacts.
            #
            # Fields can include the following variables, which will be expanded when the
            # build is created:
            #
            # - $PROJECT_ID: the project ID of the build.
            # - $BUILD_ID: the autogenerated ID of the build.
            # - $REPO_NAME: the source repository name specified by RepoSource.
            # - $BRANCH_NAME: the branch name specified by RepoSource.
            # - $TAG_NAME: the tag name specified by RepoSource.
            # - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or
            #   resolved from the specified branch or tag.
            # - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA.
          &quot;queueTtl&quot;: &quot;A String&quot;, # TTL in queue for this build. If provided and the build is enqueued longer
              # than this value, the build will expire and the build status will be
              # `EXPIRED`.
              #
              # The TTL starts ticking from create_time.
          &quot;statusDetail&quot;: &quot;A String&quot;, # Output only. Customer-readable message about the current status.
          &quot;sourceProvenance&quot;: { # Provenance of the source. Ways to find the original source, or verify that # Output only. A permanent fixed identifier for source.
              # some source was used for this build.
            &quot;resolvedRepoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # A copy of the build&#x27;s `source.repo_source`, if exists, with any
                # revisions resolved.
              &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
                  #
                  # The syntax of the regular expressions accepted is the syntax accepted by
                  # RE2 and described at https://github.com/google/re2/wiki/Syntax
              &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
                  #
                  # This must be a relative path. If a step&#x27;s `dir` is specified and is an
                  # absolute path, this value is ignored for that step&#x27;s execution.
              &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
                  # Should only be used with RunBuildTrigger
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
              &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
              &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
                  # regex.
              &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
                  #
                  # The syntax of the regular expressions accepted is the syntax accepted by
                  # RE2 and described at https://github.com/google/re2/wiki/Syntax
              &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
                  # project ID requesting the build is assumed.
            },
            &quot;resolvedStorageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build&#x27;s `source.storage_source`, if exists, with any
                # generations resolved.
              &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
                  # omitted, the latest generation will be used.
              &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
                  # [Bucket Name
                  # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
                  #
                  # This object must be a gzipped archive file (`.tar.gz`) containing source to
                  # build.
            },
            &quot;fileHashes&quot;: { # Output only. Hash(es) of the build source, which can be used to verify that
                # the original source integrity was maintained in the build. Note that
                # `FileHashes` will only be populated if `BuildOptions` has requested a
                # `SourceProvenanceHash`.
                #
                # The keys to this map are file paths used as build source and the values
                # contain the hash values for those files.
                #
                # If the build source came in a single package such as a gzipped tarfile
                # (`.tar.gz`), the `FileHash` will be for the single path to that file.
              &quot;a_key&quot;: { # Container message for hashes of byte content of files, used in
                  # SourceProvenance messages to verify integrity of source input to the build.
                &quot;fileHash&quot;: [ # Collection of file hashes.
                  { # Container message for hash values.
                    &quot;value&quot;: &quot;A String&quot;, # The hash value.
                    &quot;type&quot;: &quot;A String&quot;, # The type of hash that was performed.
                  },
                ],
              },
            },
          },
          &quot;secrets&quot;: [ # Secrets to decrypt using Cloud Key Management Service.
            { # Pairs a set of secret environment variables containing encrypted
                # values with the Cloud KMS key to use to decrypt the value.
              &quot;kmsKeyName&quot;: &quot;A String&quot;, # Cloud KMS key name to use to decrypt these envs.
              &quot;secretEnv&quot;: { # Map of environment variable name to its encrypted value.
                  #
                  # Secret environment variables must be unique across all of a build&#x27;s
                  # secrets, and must be used by at least one build step. Values can be at most
                  # 64 KB in size. There can be at most 100 secret values across all of a
                  # build&#x27;s secrets.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
            },
          ],
          &quot;results&quot;: { # Artifacts created by the build pipeline. # Output only. Results of the build.
            &quot;numArtifacts&quot;: &quot;A String&quot;, # Number of artifacts uploaded. Only populated when artifacts are uploaded.
            &quot;buildStepImages&quot;: [ # List of build step digests, in the order corresponding to build step
                # indices.
              &quot;A String&quot;,
            ],
            &quot;artifactTiming&quot;: { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
              &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
              &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
            },
            &quot;artifactManifest&quot;: &quot;A String&quot;, # Path to the artifact manifest. Only populated when artifacts are uploaded.
            &quot;images&quot;: [ # Container images that were built as a part of the build.
              { # An image built by the pipeline.
                &quot;digest&quot;: &quot;A String&quot;, # Docker Registry 2.0 digest.
                &quot;name&quot;: &quot;A String&quot;, # Name used to push the container image to Google Container Registry, as
                    # presented to `docker push`.
                &quot;pushTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
                  &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
                  &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
                },
              },
            ],
            &quot;buildStepOutputs&quot;: [ # List of build step outputs, produced by builder images, in the order
                # corresponding to build step indices.
                #
                # [Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders)
                # can produce this output by writing to `$BUILDER_OUTPUT/output`.
                # Only the first 4KB of data is stored.
              &quot;A String&quot;,
            ],
          },
          &quot;logUrl&quot;: &quot;A String&quot;, # Output only. URL to logs for this build in Google Cloud Console.
          &quot;timing&quot;: { # Output only. Stores timing information for phases of the build. Valid keys
              # are:
              #
              # * BUILD: time to execute all build steps
              # * PUSH: time to push all specified images.
              # * FETCHSOURCE: time to fetch source.
              #
              # If the build does not specify source or images,
              # these keys will not be included.
            &quot;a_key&quot;: { # Start and end times for a build execution phase.
              &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
              &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
            },
          },
          &quot;finishTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was finished.
              #
              # The difference between finish_time and start_time is the duration of the
              # build&#x27;s execution.
          &quot;buildTriggerId&quot;: &quot;A String&quot;, # Output only. The ID of the `BuildTrigger` that triggered this build, if it
              # was triggered automatically.
          &quot;timeout&quot;: &quot;A String&quot;, # Amount of time that this build should be allowed to run, to second
              # granularity. If this amount of time elapses, work on the build will cease
              # and the build status will be `TIMEOUT`.
              #
              # `timeout` starts ticking from `startTime`.
              #
              # Default time is ten minutes.
          &quot;artifacts&quot;: { # Artifacts produced by a build that should be uploaded upon # Artifacts produced by the build that should be uploaded upon
              # successful completion of all build steps.
              # successful completion of all build steps.
            &quot;objects&quot;: { # Files in the workspace to upload to Cloud Storage upon successful # A list of objects to be uploaded to Cloud Storage upon successful
                # completion of all build steps.
                #
                # Files in the workspace matching specified paths globs will be uploaded to
                # the specified Cloud Storage location using the builder service account&#x27;s
                # credentials.
                #
                # The location and generation of the uploaded objects will be stored in the
                # Build resource&#x27;s results field.
                #
                # If any objects fail to be pushed, the build is marked FAILURE.
                # completion of all build steps.
              &quot;location&quot;: &quot;A String&quot;, # Cloud Storage bucket and optional object path, in the form
                  # &quot;gs://bucket/path/to/somewhere/&quot;. (see [Bucket Name
                  # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
                  #
                  # Files in the workspace matching any path pattern will be uploaded to
                  # Cloud Storage with this location as a prefix.
              &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
                &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
                &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
              },
              &quot;paths&quot;: [ # Path globs used to match files in the build&#x27;s workspace.
                &quot;A String&quot;,
              ],
            },
            &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
                # steps.
                #
                # The images will be pushed using the builder service account&#x27;s credentials.
                #
                # The digests of the pushed images will be stored in the Build resource&#x27;s
                # results field.
                #
                # If any of the images fail to be pushed, the build is marked FAILURE.
              &quot;A String&quot;,
            ],
          },
          &quot;logsBucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket where logs should be written (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
          &quot;steps&quot;: [ # Required. The operations to be performed on the workspace.
            { # A step in the build pipeline.
              &quot;args&quot;: [ # A list of arguments that will be presented to the step when it is started.
                  #
                  # If the image used to run the step&#x27;s container has an entrypoint, the `args`
                  # are used as arguments to that entrypoint. If the image does not define
                  # an entrypoint, the first element in args is used as the entrypoint,
                  # and the remainder will be used as arguments.
                &quot;A String&quot;,
              ],
              &quot;entrypoint&quot;: &quot;A String&quot;, # Entrypoint to be used instead of the build step image&#x27;s default entrypoint.
                  # If unset, the image&#x27;s default entrypoint is used.
              &quot;secretEnv&quot;: [ # A list of environment variables which are encrypted using a Cloud Key
                  # Management Service crypto key. These values must be specified in the
                  # build&#x27;s `Secret`.
                &quot;A String&quot;,
              ],
              &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build step. At this time, build step status is
                  # only updated on build completion; step status is not updated in real-time
                  # as the build progresses.
              &quot;volumes&quot;: [ # List of volumes to mount into the build step.
                  #
                  # Each volume is created as an empty volume prior to execution of the
                  # build step. Upon completion of the build, volumes and their contents are
                  # discarded.
                  #
                  # Using a named volume in only one step is not valid as it is indicative
                  # of a build request with an incorrect configuration.
                { # Volume describes a Docker container volume which is mounted into build steps
                    # in order to persist files across build step execution.
                  &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                      #
                      # Paths must be absolute and cannot conflict with other volume paths on the
                      # same build step or with certain reserved volume paths.
                  &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                      #
                      # Volume names must be unique per build step and must be valid names for
                      # Docker volumes. Each named volume must be used by at least two build steps.
                },
              ],
              &quot;timeout&quot;: &quot;A String&quot;, # Time limit for executing this build step. If not defined, the step has no
                  # time limit and will be allowed to continue to run until either it completes
                  # or the build itself times out.
              &quot;dir&quot;: &quot;A String&quot;, # Working directory to use when running this step&#x27;s container.
                  #
                  # If this value is a relative path, it is relative to the build&#x27;s working
                  # directory. If this value is absolute, it may be outside the build&#x27;s working
                  # directory, in which case the contents of the path may not be persisted
                  # across build step executions, unless a `volume` for that path is specified.
                  #
                  # If the build specifies a `RepoSource` with `dir` and a step with a `dir`,
                  # which specifies an absolute path, the `RepoSource` `dir` is ignored for
                  # the step&#x27;s execution.
              &quot;id&quot;: &quot;A String&quot;, # Unique identifier for this build step, used in `wait_for` to
                  # reference this build step as a dependency.
              &quot;env&quot;: [ # A list of environment variable definitions to be used when running a step.
                  #
                  # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
                  # being given the value &quot;VALUE&quot;.
                &quot;A String&quot;,
              ],
              &quot;waitFor&quot;: [ # The ID(s) of the step(s) that this build step depends on.
                  # This build step will not start until all the build steps in `wait_for`
                  # have completed successfully. If `wait_for` is empty, this build step will
                  # start when all previous build steps in the `Build.Steps` list have
                  # completed successfully.
                &quot;A String&quot;,
              ],
              &quot;name&quot;: &quot;A String&quot;, # Required. The name of the container image that will run this particular
                  # build step.
                  #
                  # If the image is available in the host&#x27;s Docker daemon&#x27;s cache, it
                  # will be run directly. If not, the host will attempt to pull the image
                  # first, using the builder service account&#x27;s credentials if necessary.
                  #
                  # The Docker daemon&#x27;s cache will already have the latest versions of all of
                  # the officially supported build steps
                  # ([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).
                  # The Docker daemon will also have cached many of the layers for some popular
                  # images, like &quot;ubuntu&quot;, &quot;debian&quot;, but they will be refreshed at the time you
                  # attempt to use them.
                  #
                  # If you built an image in a previous build step, it will be stored in the
                  # host&#x27;s Docker daemon&#x27;s cache and is available to use as the name for a
                  # later build step.
              &quot;pullTiming&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step&#x27;s
                  # builder image only.
                &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
                &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
              },
              &quot;timing&quot;: { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
                &quot;startTime&quot;: &quot;A String&quot;, # Start of time span.
                &quot;endTime&quot;: &quot;A String&quot;, # End of time span.
              },
            },
          ],
          &quot;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the build.
          &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the build.
          &quot;images&quot;: [ # A list of images to be pushed upon the successful completion of all build
              # steps.
              #
              # The images are pushed using the builder service account&#x27;s credentials.
              #
              # The digests of the pushed images will be stored in the `Build` resource&#x27;s
              # results field.
              #
              # If any of the images fail to be pushed, the build status is marked
              # `FAILURE`.
            &quot;A String&quot;,
          ],
          &quot;projectId&quot;: &quot;A String&quot;, # Output only. ID of the project.
          &quot;source&quot;: { # Location of the source in a supported storage service. # The location of the source files to build.
            &quot;storageSource&quot;: { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
              &quot;generation&quot;: &quot;A String&quot;, # Google Cloud Storage generation for the object. If the generation is
                  # omitted, the latest generation will be used.
              &quot;bucket&quot;: &quot;A String&quot;, # Google Cloud Storage bucket containing the source (see
                  # [Bucket Name
                  # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              &quot;object&quot;: &quot;A String&quot;, # Google Cloud Storage object containing the source.
                  #
                  # This object must be a gzipped archive file (`.tar.gz`) containing source to
                  # build.
            },
            &quot;repoSource&quot;: { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
                # Repository.
              &quot;tagName&quot;: &quot;A String&quot;, # Regex matching tags to build.
                  #
                  # The syntax of the regular expressions accepted is the syntax accepted by
                  # RE2 and described at https://github.com/google/re2/wiki/Syntax
              &quot;dir&quot;: &quot;A String&quot;, # Directory, relative to the source root, in which to run the build.
                  #
                  # This must be a relative path. If a step&#x27;s `dir` is specified and is an
                  # absolute path, this value is ignored for that step&#x27;s execution.
              &quot;substitutions&quot;: { # Substitutions to use in a triggered build.
                  # Should only be used with RunBuildTrigger
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;repoName&quot;: &quot;A String&quot;, # Required. Name of the Cloud Source Repository.
              &quot;commitSha&quot;: &quot;A String&quot;, # Explicit commit SHA to build.
              &quot;invertRegex&quot;: True or False, # Only trigger a build if the revision regex does NOT match the revision
                  # regex.
              &quot;branchName&quot;: &quot;A String&quot;, # Regex matching branches to build.
                  #
                  # The syntax of the regular expressions accepted is the syntax accepted by
                  # RE2 and described at https://github.com/google/re2/wiki/Syntax
              &quot;projectId&quot;: &quot;A String&quot;, # ID of the project that owns the Cloud Source Repository. If omitted, the
                  # project ID requesting the build is assumed.
            },
          },
          &quot;tags&quot;: [ # Tags for annotation of a `Build`. These are not docker tags.
            &quot;A String&quot;,
          ],
          &quot;options&quot;: { # Optional arguments to enable specific features of builds. # Special options for this build.
            &quot;volumes&quot;: [ # Global list of volumes to mount for ALL build steps
                #
                # Each volume is created as an empty volume prior to starting the build
                # process. Upon completion of the build, volumes and their contents are
                # discarded. Global volume names and paths cannot conflict with the volumes
                # defined a build step.
                #
                # Using a global volume in a build with only one step is not valid as
                # it is indicative of a build request with an incorrect configuration.
              { # Volume describes a Docker container volume which is mounted into build steps
                  # in order to persist files across build step execution.
                &quot;path&quot;: &quot;A String&quot;, # Path at which to mount the volume.
                    #
                    # Paths must be absolute and cannot conflict with other volume paths on the
                    # same build step or with certain reserved volume paths.
                &quot;name&quot;: &quot;A String&quot;, # Name of the volume to mount.
                    #
                    # Volume names must be unique per build step and must be valid names for
                    # Docker volumes. Each named volume must be used by at least two build steps.
              },
            ],
            &quot;env&quot;: [ # A list of global environment variable definitions that will exist for all
                # build steps in this build. If a variable is defined in both globally and in
                # a build step, the variable will use the build step value.
                #
                # The elements are of the form &quot;KEY=VALUE&quot; for the environment variable &quot;KEY&quot;
                # being given the value &quot;VALUE&quot;.
              &quot;A String&quot;,
            ],
            &quot;sourceProvenanceHash&quot;: [ # Requested hash for SourceProvenance.
              &quot;A String&quot;,
            ],
            &quot;machineType&quot;: &quot;A String&quot;, # Compute Engine machine type on which to run the build.
            &quot;logStreamingOption&quot;: &quot;A String&quot;, # Option to define build log streaming behavior to Google Cloud
                # Storage.
            &quot;requestedVerifyOption&quot;: &quot;A String&quot;, # Requested verifiability options.
            &quot;substitutionOption&quot;: &quot;A String&quot;, # Option to specify behavior when there is an error in the substitution
                # checks.
                #
                # NOTE: this is always set to ALLOW_LOOSE for triggered builds and cannot
                # be overridden in the build configuration file.
            &quot;diskSizeGb&quot;: &quot;A String&quot;, # Requested disk size for the VM that runs the build. Note that this is *NOT*
                # &quot;disk free&quot;; some of the space will be used by the operating system and
                # build utilities. Also note that this is the minimum disk size that will be
                # allocated for the build -- the build may run with a larger disk than
                # requested. At present, the maximum disk size is 1000GB; builds that request
                # more than the maximum are rejected with an error.
            &quot;workerPool&quot;: &quot;A String&quot;, # Option to specify a `WorkerPool` for the build.
                # Format: projects/{project}/workerPools/{workerPool}
                #
                # This field is experimental.
            &quot;logging&quot;: &quot;A String&quot;, # Option to specify the logging mode, which determines if and where build
                # logs are stored.
            &quot;secretEnv&quot;: [ # A list of global environment variables, which are encrypted using a Cloud
                # Key Management Service crypto key. These values must be specified in the
                # build&#x27;s `Secret`. These variables will be available to all build steps
                # in this build.
              &quot;A String&quot;,
            ],
            &quot;dynamicSubstitutions&quot;: True or False, # Option to specify whether or not to apply bash style string
                # operations to the substitutions.
                #
                # NOTE: this is always enabled for triggered builds and cannot be
                # overridden in the build configuration file.
          },
          &quot;substitutions&quot;: { # Substitutions data for `Build` resource.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the request to create the build was received.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. Time at which execution of the build was started.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="retry">retry(projectId, id, body=None, x__xgafv=None)</code>
  <pre>Creates a new build based on the specified build.

This method creates a new build using the original build request, which may
or may not result in an identical build.

For triggered builds:

* Triggered builds resolve to a precise revision; therefore a retry of a
triggered build will result in a build that uses the same revision.

For non-triggered builds that specify `RepoSource`:

* If the original build built from the tip of a branch, the retried build
will build from the tip of that branch, which may not be the same revision
as the original build.
* If the original build specified a commit sha or revision ID, the retried
build will use the identical source.

For builds that specify `StorageSource`:

* If the original build pulled source from Google Cloud Storage without
specifying the generation of the object, the new build will use the current
object, which may be different from the original build source.
* If the original build pulled source from Cloud Storage and specified the
generation of the object, the new build will attempt to use the same
object, which may or may not be available depending on the bucket&#x27;s
lifecycle management settings.

Args:
  projectId: string, Required. ID of the project. (required)
  id: string, Required. Build ID of the original build. (required)
  body: object, The request body.
    The object takes the form of:

{ # Specifies a build to retry.
  }

  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.
    &quot;response&quot;: { # 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`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # 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.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # 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}`.
    &quot;error&quot;: { # 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).
      &quot;message&quot;: &quot;A String&quot;, # 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.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;done&quot;: 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.
  }</pre>
</div>

</body></html>