<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.triggers.html">triggers</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(projectId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new `BuildTrigger`.</p>
<p class="toc_element">
  <code><a href="#delete">delete(projectId, triggerId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a `BuildTrigger` by its project ID and trigger ID.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, triggerId, x__xgafv=None)</a></code></p>
<p class="firstline">Returns information about a `BuildTrigger`.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists existing `BuildTrigger`s.</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="#patch">patch(projectId, triggerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a `BuildTrigger` by its project ID and trigger ID.</p>
<p class="toc_element">
  <code><a href="#run">run(projectId, triggerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Runs a `BuildTrigger` at a particular source revision.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(projectId, body=None, x__xgafv=None)</code>
  <pre>Creates a new `BuildTrigger`.

This API is experimental.

Args:
  projectId: string, Required. ID of the project for which to configure automatic builds. (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration for an automated build in response to source repository
      # changes.
    &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
        # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
        # keys in bindings.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
        # 
        # Branch and tag names in trigger templates are interpreted as regular
        # expressions. Any branch or tag change that matches that regular expression
        # will trigger a build.
        # 
        # Mutually exclusive with `github`.
      &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
    &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
          #
          # 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.
      },
    &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
        # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
        # 
        # If ignored_files and changed files are both empty, then they are
        # not used to determine whether or not to trigger a build.
        # 
        # If ignored_files is not empty, then we ignore any files that match
        # any of the ignored_file globs. If the change has no files that are
        # outside of the ignored_files globs, then we do not trigger a build.
      &quot;A String&quot;,
    ],
    &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
        # template.
    &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
    &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
        # Trigger names must meet the following requirements:
        # 
        # + They must contain only alphanumeric characters and dashes.
        # + They can be 1-64 characters long.
        # + They must begin and end with an alphanumeric character.
    &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
      &quot;A String&quot;,
    ],
    &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
        # a build whenever a GitHub event is received.
        # 
        # Mutually exclusive with `trigger_template`.
        # build whenever a GitHub event is received.
        #
        # This message is experimental.
      &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
      &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
          # Requests.
        &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
            # comment `/gcbrun`.
        &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
          # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
      &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
          # https://github.com/googlecloudplatform/cloud-builders is
          # &quot;googlecloudplatform&quot;.
      &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
        &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
            # git_ref regex.
        &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
    &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
        # filter and included_files is empty, then as far as this filter is
        # concerned, we should trigger the build.
        # 
        # If any of the files altered in the commit pass the ignored_files
        # filter and included_files is not empty, then we make sure that at
        # least one of those files matches a included_files glob. If not,
        # then we do not trigger a build.
      &quot;A String&quot;,
    ],
    &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
  }

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

Returns:
  An object of the form:

    { # Configuration for an automated build in response to source repository
        # changes.
      &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
          # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
          # keys in bindings.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
          #
          # Branch and tag names in trigger templates are interpreted as regular
          # expressions. Any branch or tag change that matches that regular expression
          # will trigger a build.
          #
          # Mutually exclusive with `github`.
        &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
      &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
            #
            # 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.
        },
      &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
          # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
          #
          # If ignored_files and changed files are both empty, then they are
          # not used to determine whether or not to trigger a build.
          #
          # If ignored_files is not empty, then we ignore any files that match
          # any of the ignored_file globs. If the change has no files that are
          # outside of the ignored_files globs, then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
          # template.
      &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
      &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
          # Trigger names must meet the following requirements:
          #
          # + They must contain only alphanumeric characters and dashes.
          # + They can be 1-64 characters long.
          # + They must begin and end with an alphanumeric character.
      &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
        &quot;A String&quot;,
      ],
      &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
          # a build whenever a GitHub event is received.
          #
          # Mutually exclusive with `trigger_template`.
          # build whenever a GitHub event is received.
          #
          # This message is experimental.
        &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
        &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
            # Requests.
          &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
              # comment `/gcbrun`.
          &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
        },
        &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
            # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
        &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
            # https://github.com/googlecloudplatform/cloud-builders is
            # &quot;googlecloudplatform&quot;.
        &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
          &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
              # git_ref regex.
          &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
      &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is empty, then as far as this filter is
          # concerned, we should trigger the build.
          #
          # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is not empty, then we make sure that at
          # least one of those files matches a included_files glob. If not,
          # then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(projectId, triggerId, x__xgafv=None)</code>
  <pre>Deletes a `BuildTrigger` by its project ID and trigger ID.

This API is experimental.

Args:
  projectId: string, Required. ID of the project that owns the trigger. (required)
  triggerId: string, Required. ID of the `BuildTrigger` to delete. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

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

This API is experimental.

Args:
  projectId: string, Required. ID of the project that owns the trigger. (required)
  triggerId: string, Required. Identifier (`id` or `name`) of the `BuildTrigger` to get. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Configuration for an automated build in response to source repository
        # changes.
      &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
          # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
          # keys in bindings.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
          #
          # Branch and tag names in trigger templates are interpreted as regular
          # expressions. Any branch or tag change that matches that regular expression
          # will trigger a build.
          #
          # Mutually exclusive with `github`.
        &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
      &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
            #
            # 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.
        },
      &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
          # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
          #
          # If ignored_files and changed files are both empty, then they are
          # not used to determine whether or not to trigger a build.
          #
          # If ignored_files is not empty, then we ignore any files that match
          # any of the ignored_file globs. If the change has no files that are
          # outside of the ignored_files globs, then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
          # template.
      &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
      &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
          # Trigger names must meet the following requirements:
          #
          # + They must contain only alphanumeric characters and dashes.
          # + They can be 1-64 characters long.
          # + They must begin and end with an alphanumeric character.
      &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
        &quot;A String&quot;,
      ],
      &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
          # a build whenever a GitHub event is received.
          #
          # Mutually exclusive with `trigger_template`.
          # build whenever a GitHub event is received.
          #
          # This message is experimental.
        &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
        &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
            # Requests.
          &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
              # comment `/gcbrun`.
          &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
        },
        &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
            # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
        &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
            # https://github.com/googlecloudplatform/cloud-builders is
            # &quot;googlecloudplatform&quot;.
        &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
          &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
              # git_ref regex.
          &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
      &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is empty, then as far as this filter is
          # concerned, we should trigger the build.
          #
          # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is not empty, then we make sure that at
          # least one of those files matches a included_files glob. If not,
          # then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists existing `BuildTrigger`s.

This API is experimental.

Args:
  projectId: string, Required. ID of the project for which to list BuildTriggers. (required)
  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 containing existing `BuildTriggers`.
    &quot;triggers&quot;: [ # `BuildTriggers` for the project, sorted by `create_time` descending.
      { # Configuration for an automated build in response to source repository
            # changes.
          &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
              # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
              # keys in bindings.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
              #
              # Branch and tag names in trigger templates are interpreted as regular
              # expressions. Any branch or tag change that matches that regular expression
              # will trigger a build.
              #
              # Mutually exclusive with `github`.
            &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
          &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
                #
                # 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.
            },
          &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
              # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
              #
              # If ignored_files and changed files are both empty, then they are
              # not used to determine whether or not to trigger a build.
              #
              # If ignored_files is not empty, then we ignore any files that match
              # any of the ignored_file globs. If the change has no files that are
              # outside of the ignored_files globs, then we do not trigger a build.
            &quot;A String&quot;,
          ],
          &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
              # template.
          &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
          &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
              # Trigger names must meet the following requirements:
              #
              # + They must contain only alphanumeric characters and dashes.
              # + They can be 1-64 characters long.
              # + They must begin and end with an alphanumeric character.
          &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
            &quot;A String&quot;,
          ],
          &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
              # a build whenever a GitHub event is received.
              #
              # Mutually exclusive with `trigger_template`.
              # build whenever a GitHub event is received.
              #
              # This message is experimental.
            &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
            &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
                # Requests.
              &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
                  #
                  # The syntax of the regular expressions accepted is the syntax accepted by
                  # RE2 and described at https://github.com/google/re2/wiki/Syntax
              &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
                  # comment `/gcbrun`.
              &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
            },
            &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
                # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
            &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
                # https://github.com/googlecloudplatform/cloud-builders is
                # &quot;googlecloudplatform&quot;.
            &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
              &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
                  # git_ref regex.
              &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
          &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
              # filter and included_files is empty, then as far as this filter is
              # concerned, we should trigger the build.
              #
              # If any of the files altered in the commit pass the ignored_files
              # filter and included_files is not empty, then we make sure that at
              # least one of those files matches a included_files glob. If not,
              # then we do not trigger a build.
            &quot;A String&quot;,
          ],
          &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to receive the next page of results.
  }</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="patch">patch(projectId, triggerId, body=None, x__xgafv=None)</code>
  <pre>Updates a `BuildTrigger` by its project ID and trigger ID.

This API is experimental.

Args:
  projectId: string, Required. ID of the project that owns the trigger. (required)
  triggerId: string, Required. ID of the `BuildTrigger` to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Configuration for an automated build in response to source repository
      # changes.
    &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
        # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
        # keys in bindings.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
        # 
        # Branch and tag names in trigger templates are interpreted as regular
        # expressions. Any branch or tag change that matches that regular expression
        # will trigger a build.
        # 
        # Mutually exclusive with `github`.
      &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
    &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
          #
          # 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.
      },
    &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
        # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
        # 
        # If ignored_files and changed files are both empty, then they are
        # not used to determine whether or not to trigger a build.
        # 
        # If ignored_files is not empty, then we ignore any files that match
        # any of the ignored_file globs. If the change has no files that are
        # outside of the ignored_files globs, then we do not trigger a build.
      &quot;A String&quot;,
    ],
    &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
        # template.
    &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
    &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
        # Trigger names must meet the following requirements:
        # 
        # + They must contain only alphanumeric characters and dashes.
        # + They can be 1-64 characters long.
        # + They must begin and end with an alphanumeric character.
    &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
      &quot;A String&quot;,
    ],
    &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
        # a build whenever a GitHub event is received.
        # 
        # Mutually exclusive with `trigger_template`.
        # build whenever a GitHub event is received.
        #
        # This message is experimental.
      &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
      &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
          # Requests.
        &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
            #
            # The syntax of the regular expressions accepted is the syntax accepted by
            # RE2 and described at https://github.com/google/re2/wiki/Syntax
        &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
            # comment `/gcbrun`.
        &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
          # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
      &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
          # https://github.com/googlecloudplatform/cloud-builders is
          # &quot;googlecloudplatform&quot;.
      &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
        &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
            # git_ref regex.
        &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
    &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
        # filter and included_files is empty, then as far as this filter is
        # concerned, we should trigger the build.
        # 
        # If any of the files altered in the commit pass the ignored_files
        # filter and included_files is not empty, then we make sure that at
        # least one of those files matches a included_files glob. If not,
        # then we do not trigger a build.
      &quot;A String&quot;,
    ],
    &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
  }

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

Returns:
  An object of the form:

    { # Configuration for an automated build in response to source repository
        # changes.
      &quot;substitutions&quot;: { # Substitutions for Build resource. The keys must match the following
          # regular expression: `^_[A-Z0-9_]+$`.The keys cannot conflict with the
          # keys in bindings.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;triggerTemplate&quot;: { # Location of the source in a Google Cloud Source Repository. # Template describing the types of source changes to trigger a build.
          #
          # Branch and tag names in trigger templates are interpreted as regular
          # expressions. Any branch or tag change that matches that regular expression
          # will trigger a build.
          #
          # Mutually exclusive with `github`.
        &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;id&quot;: &quot;A String&quot;, # Output only. Unique identifier of the trigger.
      &quot;build&quot;: { # A build resource in the Cloud Build API. # Contents of the build template.
            #
            # 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.
        },
      &quot;ignoredFiles&quot;: [ # ignored_files and included_files are file glob matches using
          # https://golang.org/pkg/path/filepath/#Match extended with support for &quot;**&quot;.
          #
          # If ignored_files and changed files are both empty, then they are
          # not used to determine whether or not to trigger a build.
          #
          # If ignored_files is not empty, then we ignore any files that match
          # any of the ignored_file globs. If the change has no files that are
          # outside of the ignored_files globs, then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;filename&quot;: &quot;A String&quot;, # Path, from the source root, to a file whose contents is used for the
          # template.
      &quot;disabled&quot;: True or False, # If true, the trigger will never automatically execute a build.
      &quot;name&quot;: &quot;A String&quot;, # User-assigned name of the trigger. Must be unique within the project.
          # Trigger names must meet the following requirements:
          #
          # + They must contain only alphanumeric characters and dashes.
          # + They can be 1-64 characters long.
          # + They must begin and end with an alphanumeric character.
      &quot;tags&quot;: [ # Tags for annotation of a `BuildTrigger`
        &quot;A String&quot;,
      ],
      &quot;github&quot;: { # GitHubEventsConfig describes the configuration of a trigger that creates a # GitHubEventsConfig describes the configuration of a trigger that creates
          # a build whenever a GitHub event is received.
          #
          # Mutually exclusive with `trigger_template`.
          # build whenever a GitHub event is received.
          #
          # This message is experimental.
        &quot;installationId&quot;: &quot;A String&quot;, # The installationID that emits the GitHub event.
        &quot;pullRequest&quot;: { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
            # Requests.
          &quot;branch&quot;: &quot;A String&quot;, # Regex of branches to match.
              #
              # The syntax of the regular expressions accepted is the syntax accepted by
              # RE2 and described at https://github.com/google/re2/wiki/Syntax
          &quot;commentControl&quot;: &quot;A String&quot;, # Configure builds to run whether a repository owner or collaborator need to
              # comment `/gcbrun`.
          &quot;invertRegex&quot;: True or False, # If true, branches that do NOT match the git_ref will trigger a build.
        },
        &quot;name&quot;: &quot;A String&quot;, # Name of the repository. For example: The name for
            # https://github.com/googlecloudplatform/cloud-builders is &quot;cloud-builders&quot;.
        &quot;owner&quot;: &quot;A String&quot;, # Owner of the repository. For example: The owner for
            # https://github.com/googlecloudplatform/cloud-builders is
            # &quot;googlecloudplatform&quot;.
        &quot;push&quot;: { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
          &quot;branch&quot;: &quot;A String&quot;, # Regexes 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;invertRegex&quot;: True or False, # When true, only trigger a build if the revision regex does NOT match the
              # git_ref regex.
          &quot;tag&quot;: &quot;A String&quot;, # Regexes 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;createTime&quot;: &quot;A String&quot;, # Output only. Time when the trigger was created.
      &quot;includedFiles&quot;: [ # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is empty, then as far as this filter is
          # concerned, we should trigger the build.
          #
          # If any of the files altered in the commit pass the ignored_files
          # filter and included_files is not empty, then we make sure that at
          # least one of those files matches a included_files glob. If not,
          # then we do not trigger a build.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Human-readable description of this trigger.
    }</pre>
</div>

<div class="method">
    <code class="details" id="run">run(projectId, triggerId, body=None, x__xgafv=None)</code>
  <pre>Runs a `BuildTrigger` at a particular source revision.

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

{ # Location of the source in a Google 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.
}

  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>