<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, 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, pageSize=None, pageToken=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, 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, 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, x__xgafv=None)</code>
  <pre>Creates a new `BuildTrigger`.

This API is experimental.

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

{ # Configuration for an automated build in response to source repository
    # changes.
  "github": { # 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.
      # build whenever a GitHub event is received.
      #
      # This message is experimental.
    "name": "A String", # Name of the repository.
    "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
        # Requests.
      "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
          # collaborator.
      "branch": "A String", # 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
    },
    "owner": "A String", # Owner of the repository.
    "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
      "tag": "A String", # Regexes of tags 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
      "branch": "A String", # Regexes 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
    },
    "installationId": "A String", # The installationID that emmits the GitHub event.
    "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
        # event.
        # check suite events.
    },
  },
  "description": "A String", # Human-readable description of this trigger.
  "tags": [ # Tags for annotation of a `BuildTrigger`
    "A String",
  ],
  "ignoredFiles": [ # ignored_files and included_files are file glob matches using
      # http://godoc/pkg/path/filepath#Match extended with support for "**".
      # 
      # 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.
    "A String",
  ],
  "filename": "A String", # Path, from the source root, to a file whose contents is used for the
      # template.
  "createTime": "A String", # Output only. Time when the trigger was created.
  "substitutions": { # Substitutions data for Build resource.
    "a_key": "A String",
  },
  "disabled": True or False, # If true, the trigger will never result in a build.
  "build": { # 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.
    "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
      "buildStepOutputs": [ # 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.
        "A String",
      ],
      "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
        "endTime": "A String", # End of time span.
        "startTime": "A String", # Start of time span.
      },
      "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
      "images": [ # Container images that were built as a part of the build.
        { # An image built by the pipeline.
          "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "name": "A String", # Name used to push the container image to Google Container Registry, as
              # presented to `docker push`.
          "digest": "A String", # Docker Registry 2.0 digest.
        },
      ],
      "buildStepImages": [ # List of build step digests, in the order corresponding to build step
          # indices.
        "A String",
      ],
      "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
    },
    "sourceProvenance": { # 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.
      "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
          # revisions resolved.
        "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
        "commitSha": "A String", # Explicit commit SHA to build.
        "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
            # assumed.
        "tagName": "A String", # Name of the tag to build.
        "branchName": "A String", # Name of the branch to build.
        "dir": "A String", # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step's `dir` is specified and is an
            # absolute path, this value is ignored for that step's execution.
      },
      "fileHashes": { # 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.
        "a_key": { # Container message for hashes of byte content of files, used in
            # SourceProvenance messages to verify integrity of source input to the build.
          "fileHash": [ # Collection of file hashes.
            { # Container message for hash values.
              "type": "A String", # The type of hash that was performed.
              "value": "A String", # The hash value.
            },
          ],
        },
      },
      "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
          # generations resolved.
        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        "object": "A String", # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
        "bucket": "A String", # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
      },
    },
    "images": [ # A list of images to be pushed upon the successful completion of all build
        # steps.
        #
        # The images are pushed using the builder service account's credentials.
        #
        # The digests of the pushed images will be stored in the `Build` resource's
        # results field.
        #
        # If any of the images fail to be pushed, the build status is marked
        # `FAILURE`.
      "A String",
    ],
    "id": "A String", # Output only. Unique identifier of the build.
    "artifacts": { # 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.
      "images": [ # 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's credentials.
          #
          # The digests of the pushed images will be stored in the Build resource's
          # results field.
          #
          # If any of the images fail to be pushed, the build is marked FAILURE.
        "A String",
      ],
      "objects": { # 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's
          # credentials.
          #
          # The location and generation of the uploaded objects will be stored in the
          # Build resource's results field.
          #
          # If any objects fail to be pushed, the build is marked FAILURE.
          # completion of all build steps.
        "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "paths": [ # Path globs used to match files in the build's workspace.
          "A String",
        ],
        "location": "A String", # Cloud Storage bucket and optional object path, in the form
            # "gs://bucket/path/to/somewhere/". (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.
      },
    },
    "projectId": "A String", # Output only. ID of the project.
    "substitutions": { # Substitutions data for `Build` resource.
      "a_key": "A String",
    },
    "source": { # Location of the source in a supported storage service. # The location of the source files to build.
      "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
          # Repository.
        "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
        "commitSha": "A String", # Explicit commit SHA to build.
        "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
            # assumed.
        "tagName": "A String", # Name of the tag to build.
        "branchName": "A String", # Name of the branch to build.
        "dir": "A String", # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step's `dir` is specified and is an
            # absolute path, this value is ignored for that step's execution.
      },
      "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        "object": "A String", # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
        "bucket": "A String", # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
      },
    },
    "status": "A String", # Output only. Status of the build.
    "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
      "A String",
    ],
    "statusDetail": "A String", # Output only. Customer-readable message about the current status.
    "startTime": "A String", # Output only. Time at which execution of the build was started.
    "timing": { # 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.
      "a_key": { # Start and end times for a build execution phase.
        "endTime": "A String", # End of time span.
        "startTime": "A String", # Start of time span.
      },
    },
    "createTime": "A String", # Output only. Time at which the request to create the build was received.
    "finishTime": "A String", # 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's execution.
    "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
        # was triggered automatically.
    "secrets": [ # 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.
        "secretEnv": { # Map of environment variable name to its encrypted value.
            #
            # Secret environment variables must be unique across all of a build'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's secrets.
          "a_key": "A String",
        },
        "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
      },
    ],
    "steps": [ # Required. The operations to be performed on the workspace.
      { # A step in the build pipeline.
        "status": "A String", # 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.
        "args": [ # A list of arguments that will be presented to the step when it is started.
            #
            # If the image used to run the step'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.
          "A String",
        ],
        "env": [ # A list of environment variable definitions to be used when running a step.
            #
            # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
            # being given the value "VALUE".
          "A String",
        ],
        "waitFor": [ # 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.
          "A String",
        ],
        "timeout": "A String", # 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.
        "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
            # Management Service crypto key. These values must be specified in the
            # build's `Secret`.
          "A String",
        ],
        "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
            # If unset, the image's default entrypoint is used.
        "volumes": [ # 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.
            "path": "A String", # 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.
            "name": "A String", # 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.
          },
        ],
        "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
            # builder image only.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "id": "A String", # Unique identifier for this build step, used in `wait_for` to
            # reference this build step as a dependency.
        "dir": "A String", # Working directory to use when running this step's container.
            #
            # If this value is a relative path, it is relative to the build's working
            # directory. If this value is absolute, it may be outside the build'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's execution.
        "name": "A String", # Required. The name of the container image that will run this particular
            # build step.
            #
            # If the image is available in the host's Docker daemon's cache, it
            # will be run directly. If not, the host will attempt to pull the image
            # first, using the builder service account's credentials if necessary.
            #
            # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
            # later build step.
      },
    ],
    "timeout": "A String", # 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`.
        #
        # Default time is ten minutes.
    "logsBucket": "A String", # 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`.
    "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
      "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
          # checks.
      "logging": "A String", # Option to specify the logging mode, which determines where the logs are
          # stored.
      "volumes": [ # 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.
          "path": "A String", # 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.
          "name": "A String", # 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.
        },
      ],
      "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
          # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
          # This is an experimental field.
      "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
          # Storage.
      "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
        "A String",
      ],
      "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
          # in this build.
        "A String",
      ],
      "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
          # "disk free"; 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.
      "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
          # being given the value "VALUE".
        "A String",
      ],
      "requestedVerifyOption": "A String", # Requested verifiability options.
      "machineType": "A String", # Compute Engine machine type on which to run the build.
    },
    "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
  },
  "includedFiles": [ # 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.
    "A String",
  ],
  "triggerTemplate": { # 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.
    "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
        # project ID requesting the build is assumed.
    "commitSha": "A String", # Explicit commit SHA to build.
    "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
        # assumed.
    "tagName": "A String", # Name of the tag to build.
    "branchName": "A String", # Name of the branch to build.
    "dir": "A String", # Directory, relative to the source root, in which to run the build.
        #
        # This must be a relative path. If a step's `dir` is specified and is an
        # absolute path, this value is ignored for that step's execution.
  },
  "id": "A String", # Output only. Unique identifier of the 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.
    "github": { # 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.
        # build whenever a GitHub event is received.
        #
        # This message is experimental.
      "name": "A String", # Name of the repository.
      "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
          # Requests.
        "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
            # collaborator.
        "branch": "A String", # 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
      },
      "owner": "A String", # Owner of the repository.
      "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
        "tag": "A String", # Regexes of tags 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
        "branch": "A String", # Regexes 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
      },
      "installationId": "A String", # The installationID that emmits the GitHub event.
      "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
          # event.
          # check suite events.
      },
    },
    "description": "A String", # Human-readable description of this trigger.
    "tags": [ # Tags for annotation of a `BuildTrigger`
      "A String",
    ],
    "ignoredFiles": [ # ignored_files and included_files are file glob matches using
        # http://godoc/pkg/path/filepath#Match extended with support for "**".
        #
        # 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.
      "A String",
    ],
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "createTime": "A String", # Output only. Time when the trigger was created.
    "substitutions": { # Substitutions data for Build resource.
      "a_key": "A String",
    },
    "disabled": True or False, # If true, the trigger will never result in a build.
    "build": { # 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.
      "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
        "buildStepOutputs": [ # 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.
          "A String",
        ],
        "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
        "images": [ # Container images that were built as a part of the build.
          { # An image built by the pipeline.
            "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
              "endTime": "A String", # End of time span.
              "startTime": "A String", # Start of time span.
            },
            "name": "A String", # Name used to push the container image to Google Container Registry, as
                # presented to `docker push`.
            "digest": "A String", # Docker Registry 2.0 digest.
          },
        ],
        "buildStepImages": [ # List of build step digests, in the order corresponding to build step
            # indices.
          "A String",
        ],
        "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
      },
      "sourceProvenance": { # 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.
        "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
            # revisions resolved.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "fileHashes": { # 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.
          "a_key": { # Container message for hashes of byte content of files, used in
              # SourceProvenance messages to verify integrity of source input to the build.
            "fileHash": [ # Collection of file hashes.
              { # Container message for hash values.
                "type": "A String", # The type of hash that was performed.
                "value": "A String", # The hash value.
              },
            ],
          },
        },
        "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
            # generations resolved.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "images": [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images are pushed using the builder service account's credentials.
          #
          # The digests of the pushed images will be stored in the `Build` resource's
          # results field.
          #
          # If any of the images fail to be pushed, the build status is marked
          # `FAILURE`.
        "A String",
      ],
      "id": "A String", # Output only. Unique identifier of the build.
      "artifacts": { # 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.
        "images": [ # 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's credentials.
            #
            # The digests of the pushed images will be stored in the Build resource's
            # results field.
            #
            # If any of the images fail to be pushed, the build is marked FAILURE.
          "A String",
        ],
        "objects": { # 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's
            # credentials.
            #
            # The location and generation of the uploaded objects will be stored in the
            # Build resource's results field.
            #
            # If any objects fail to be pushed, the build is marked FAILURE.
            # completion of all build steps.
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "paths": [ # Path globs used to match files in the build's workspace.
            "A String",
          ],
          "location": "A String", # Cloud Storage bucket and optional object path, in the form
              # "gs://bucket/path/to/somewhere/". (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.
        },
      },
      "projectId": "A String", # Output only. ID of the project.
      "substitutions": { # Substitutions data for `Build` resource.
        "a_key": "A String",
      },
      "source": { # Location of the source in a supported storage service. # The location of the source files to build.
        "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
            # Repository.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "status": "A String", # Output only. Status of the build.
      "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
        "A String",
      ],
      "statusDetail": "A String", # Output only. Customer-readable message about the current status.
      "startTime": "A String", # Output only. Time at which execution of the build was started.
      "timing": { # 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.
        "a_key": { # Start and end times for a build execution phase.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
      },
      "createTime": "A String", # Output only. Time at which the request to create the build was received.
      "finishTime": "A String", # 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's execution.
      "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
          # was triggered automatically.
      "secrets": [ # 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.
          "secretEnv": { # Map of environment variable name to its encrypted value.
              #
              # Secret environment variables must be unique across all of a build'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's secrets.
            "a_key": "A String",
          },
          "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
        },
      ],
      "steps": [ # Required. The operations to be performed on the workspace.
        { # A step in the build pipeline.
          "status": "A String", # 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.
          "args": [ # A list of arguments that will be presented to the step when it is started.
              #
              # If the image used to run the step'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.
            "A String",
          ],
          "env": [ # A list of environment variable definitions to be used when running a step.
              #
              # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
              # being given the value "VALUE".
            "A String",
          ],
          "waitFor": [ # 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.
            "A String",
          ],
          "timeout": "A String", # 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.
          "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
              # Management Service crypto key. These values must be specified in the
              # build's `Secret`.
            "A String",
          ],
          "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
              # If unset, the image's default entrypoint is used.
          "volumes": [ # 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.
              "path": "A String", # 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.
              "name": "A String", # 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.
            },
          ],
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
              # builder image only.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "id": "A String", # Unique identifier for this build step, used in `wait_for` to
              # reference this build step as a dependency.
          "dir": "A String", # Working directory to use when running this step's container.
              #
              # If this value is a relative path, it is relative to the build's working
              # directory. If this value is absolute, it may be outside the build'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's execution.
          "name": "A String", # Required. The name of the container image that will run this particular
              # build step.
              #
              # If the image is available in the host's Docker daemon's cache, it
              # will be run directly. If not, the host will attempt to pull the image
              # first, using the builder service account's credentials if necessary.
              #
              # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
              # later build step.
        },
      ],
      "timeout": "A String", # 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`.
          #
          # Default time is ten minutes.
      "logsBucket": "A String", # 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`.
      "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
        "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
            # checks.
        "logging": "A String", # Option to specify the logging mode, which determines where the logs are
            # stored.
        "volumes": [ # 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.
            "path": "A String", # 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.
            "name": "A String", # 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.
          },
        ],
        "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
            # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
            # This is an experimental field.
        "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
            # Storage.
        "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
          "A String",
        ],
        "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
            # in this build.
          "A String",
        ],
        "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
            # "disk free"; 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.
        "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
            # being given the value "VALUE".
          "A String",
        ],
        "requestedVerifyOption": "A String", # Requested verifiability options.
        "machineType": "A String", # Compute Engine machine type on which to run the build.
      },
      "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
    },
    "includedFiles": [ # 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.
      "A String",
    ],
    "triggerTemplate": { # 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.
      "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
          # project ID requesting the build is assumed.
      "commitSha": "A String", # Explicit commit SHA to build.
      "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
          # assumed.
      "tagName": "A String", # Name of the tag to build.
      "branchName": "A String", # Name of the branch to build.
      "dir": "A String", # Directory, relative to the source root, in which to run the build.
          #
          # This must be a relative path. If a step's `dir` is specified and is an
          # absolute path, this value is ignored for that step's execution.
    },
    "id": "A String", # Output only. Unique identifier of the 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, ID of the project that owns the trigger. (required)
  triggerId: string, 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, ID of the project that owns the trigger. (required)
  triggerId: string, ID 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.
    "github": { # 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.
        # build whenever a GitHub event is received.
        #
        # This message is experimental.
      "name": "A String", # Name of the repository.
      "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
          # Requests.
        "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
            # collaborator.
        "branch": "A String", # 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
      },
      "owner": "A String", # Owner of the repository.
      "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
        "tag": "A String", # Regexes of tags 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
        "branch": "A String", # Regexes 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
      },
      "installationId": "A String", # The installationID that emmits the GitHub event.
      "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
          # event.
          # check suite events.
      },
    },
    "description": "A String", # Human-readable description of this trigger.
    "tags": [ # Tags for annotation of a `BuildTrigger`
      "A String",
    ],
    "ignoredFiles": [ # ignored_files and included_files are file glob matches using
        # http://godoc/pkg/path/filepath#Match extended with support for "**".
        #
        # 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.
      "A String",
    ],
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "createTime": "A String", # Output only. Time when the trigger was created.
    "substitutions": { # Substitutions data for Build resource.
      "a_key": "A String",
    },
    "disabled": True or False, # If true, the trigger will never result in a build.
    "build": { # 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.
      "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
        "buildStepOutputs": [ # 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.
          "A String",
        ],
        "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
        "images": [ # Container images that were built as a part of the build.
          { # An image built by the pipeline.
            "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
              "endTime": "A String", # End of time span.
              "startTime": "A String", # Start of time span.
            },
            "name": "A String", # Name used to push the container image to Google Container Registry, as
                # presented to `docker push`.
            "digest": "A String", # Docker Registry 2.0 digest.
          },
        ],
        "buildStepImages": [ # List of build step digests, in the order corresponding to build step
            # indices.
          "A String",
        ],
        "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
      },
      "sourceProvenance": { # 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.
        "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
            # revisions resolved.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "fileHashes": { # 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.
          "a_key": { # Container message for hashes of byte content of files, used in
              # SourceProvenance messages to verify integrity of source input to the build.
            "fileHash": [ # Collection of file hashes.
              { # Container message for hash values.
                "type": "A String", # The type of hash that was performed.
                "value": "A String", # The hash value.
              },
            ],
          },
        },
        "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
            # generations resolved.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "images": [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images are pushed using the builder service account's credentials.
          #
          # The digests of the pushed images will be stored in the `Build` resource's
          # results field.
          #
          # If any of the images fail to be pushed, the build status is marked
          # `FAILURE`.
        "A String",
      ],
      "id": "A String", # Output only. Unique identifier of the build.
      "artifacts": { # 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.
        "images": [ # 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's credentials.
            #
            # The digests of the pushed images will be stored in the Build resource's
            # results field.
            #
            # If any of the images fail to be pushed, the build is marked FAILURE.
          "A String",
        ],
        "objects": { # 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's
            # credentials.
            #
            # The location and generation of the uploaded objects will be stored in the
            # Build resource's results field.
            #
            # If any objects fail to be pushed, the build is marked FAILURE.
            # completion of all build steps.
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "paths": [ # Path globs used to match files in the build's workspace.
            "A String",
          ],
          "location": "A String", # Cloud Storage bucket and optional object path, in the form
              # "gs://bucket/path/to/somewhere/". (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.
        },
      },
      "projectId": "A String", # Output only. ID of the project.
      "substitutions": { # Substitutions data for `Build` resource.
        "a_key": "A String",
      },
      "source": { # Location of the source in a supported storage service. # The location of the source files to build.
        "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
            # Repository.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "status": "A String", # Output only. Status of the build.
      "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
        "A String",
      ],
      "statusDetail": "A String", # Output only. Customer-readable message about the current status.
      "startTime": "A String", # Output only. Time at which execution of the build was started.
      "timing": { # 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.
        "a_key": { # Start and end times for a build execution phase.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
      },
      "createTime": "A String", # Output only. Time at which the request to create the build was received.
      "finishTime": "A String", # 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's execution.
      "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
          # was triggered automatically.
      "secrets": [ # 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.
          "secretEnv": { # Map of environment variable name to its encrypted value.
              #
              # Secret environment variables must be unique across all of a build'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's secrets.
            "a_key": "A String",
          },
          "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
        },
      ],
      "steps": [ # Required. The operations to be performed on the workspace.
        { # A step in the build pipeline.
          "status": "A String", # 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.
          "args": [ # A list of arguments that will be presented to the step when it is started.
              #
              # If the image used to run the step'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.
            "A String",
          ],
          "env": [ # A list of environment variable definitions to be used when running a step.
              #
              # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
              # being given the value "VALUE".
            "A String",
          ],
          "waitFor": [ # 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.
            "A String",
          ],
          "timeout": "A String", # 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.
          "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
              # Management Service crypto key. These values must be specified in the
              # build's `Secret`.
            "A String",
          ],
          "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
              # If unset, the image's default entrypoint is used.
          "volumes": [ # 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.
              "path": "A String", # 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.
              "name": "A String", # 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.
            },
          ],
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
              # builder image only.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "id": "A String", # Unique identifier for this build step, used in `wait_for` to
              # reference this build step as a dependency.
          "dir": "A String", # Working directory to use when running this step's container.
              #
              # If this value is a relative path, it is relative to the build's working
              # directory. If this value is absolute, it may be outside the build'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's execution.
          "name": "A String", # Required. The name of the container image that will run this particular
              # build step.
              #
              # If the image is available in the host's Docker daemon's cache, it
              # will be run directly. If not, the host will attempt to pull the image
              # first, using the builder service account's credentials if necessary.
              #
              # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
              # later build step.
        },
      ],
      "timeout": "A String", # 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`.
          #
          # Default time is ten minutes.
      "logsBucket": "A String", # 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`.
      "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
        "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
            # checks.
        "logging": "A String", # Option to specify the logging mode, which determines where the logs are
            # stored.
        "volumes": [ # 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.
            "path": "A String", # 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.
            "name": "A String", # 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.
          },
        ],
        "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
            # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
            # This is an experimental field.
        "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
            # Storage.
        "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
          "A String",
        ],
        "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
            # in this build.
          "A String",
        ],
        "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
            # "disk free"; 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.
        "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
            # being given the value "VALUE".
          "A String",
        ],
        "requestedVerifyOption": "A String", # Requested verifiability options.
        "machineType": "A String", # Compute Engine machine type on which to run the build.
      },
      "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
    },
    "includedFiles": [ # 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.
      "A String",
    ],
    "triggerTemplate": { # 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.
      "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
          # project ID requesting the build is assumed.
      "commitSha": "A String", # Explicit commit SHA to build.
      "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
          # assumed.
      "tagName": "A String", # Name of the tag to build.
      "branchName": "A String", # Name of the branch to build.
      "dir": "A String", # Directory, relative to the source root, in which to run the build.
          #
          # This must be a relative path. If a step's `dir` is specified and is an
          # absolute path, this value is ignored for that step's execution.
    },
    "id": "A String", # Output only. Unique identifier of the trigger.
  }</pre>
</div>

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

This API is experimental.

Args:
  projectId: string, ID of the project for which to list BuildTriggers. (required)
  pageSize: integer, Number of results to return in the list.
  pageToken: string, Token to provide to skip to a particular spot 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`.
    "nextPageToken": "A String", # Token to receive the next page of results.
    "triggers": [ # `BuildTriggers` for the project, sorted by `create_time` descending.
      { # Configuration for an automated build in response to source repository
          # changes.
        "github": { # 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.
            # build whenever a GitHub event is received.
            #
            # This message is experimental.
          "name": "A String", # Name of the repository.
          "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
              # Requests.
            "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
                # collaborator.
            "branch": "A String", # 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
          },
          "owner": "A String", # Owner of the repository.
          "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
            "tag": "A String", # Regexes of tags 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
            "branch": "A String", # Regexes 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
          },
          "installationId": "A String", # The installationID that emmits the GitHub event.
          "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
              # event.
              # check suite events.
          },
        },
        "description": "A String", # Human-readable description of this trigger.
        "tags": [ # Tags for annotation of a `BuildTrigger`
          "A String",
        ],
        "ignoredFiles": [ # ignored_files and included_files are file glob matches using
            # http://godoc/pkg/path/filepath#Match extended with support for "**".
            #
            # 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.
          "A String",
        ],
        "filename": "A String", # Path, from the source root, to a file whose contents is used for the
            # template.
        "createTime": "A String", # Output only. Time when the trigger was created.
        "substitutions": { # Substitutions data for Build resource.
          "a_key": "A String",
        },
        "disabled": True or False, # If true, the trigger will never result in a build.
        "build": { # 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.
          "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
            "buildStepOutputs": [ # 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.
              "A String",
            ],
            "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
              "endTime": "A String", # End of time span.
              "startTime": "A String", # Start of time span.
            },
            "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
            "images": [ # Container images that were built as a part of the build.
              { # An image built by the pipeline.
                "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
                  "endTime": "A String", # End of time span.
                  "startTime": "A String", # Start of time span.
                },
                "name": "A String", # Name used to push the container image to Google Container Registry, as
                    # presented to `docker push`.
                "digest": "A String", # Docker Registry 2.0 digest.
              },
            ],
            "buildStepImages": [ # List of build step digests, in the order corresponding to build step
                # indices.
              "A String",
            ],
            "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
          },
          "sourceProvenance": { # 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.
            "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
                # revisions resolved.
              "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
                  # project ID requesting the build is assumed.
              "commitSha": "A String", # Explicit commit SHA to build.
              "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
                  # assumed.
              "tagName": "A String", # Name of the tag to build.
              "branchName": "A String", # Name of the branch to build.
              "dir": "A String", # Directory, relative to the source root, in which to run the build.
                  #
                  # This must be a relative path. If a step's `dir` is specified and is an
                  # absolute path, this value is ignored for that step's execution.
            },
            "fileHashes": { # 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.
              "a_key": { # Container message for hashes of byte content of files, used in
                  # SourceProvenance messages to verify integrity of source input to the build.
                "fileHash": [ # Collection of file hashes.
                  { # Container message for hash values.
                    "type": "A String", # The type of hash that was performed.
                    "value": "A String", # The hash value.
                  },
                ],
              },
            },
            "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
                # generations resolved.
              "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
                  # omitted, the latest generation will be used.
              "object": "A String", # Google Cloud Storage object containing the source.
                  #
                  # This object must be a gzipped archive file (`.tar.gz`) containing source to
                  # build.
              "bucket": "A String", # Google Cloud Storage bucket containing the source (see
                  # [Bucket Name
                  # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
            },
          },
          "images": [ # A list of images to be pushed upon the successful completion of all build
              # steps.
              #
              # The images are pushed using the builder service account's credentials.
              #
              # The digests of the pushed images will be stored in the `Build` resource's
              # results field.
              #
              # If any of the images fail to be pushed, the build status is marked
              # `FAILURE`.
            "A String",
          ],
          "id": "A String", # Output only. Unique identifier of the build.
          "artifacts": { # 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.
            "images": [ # 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's credentials.
                #
                # The digests of the pushed images will be stored in the Build resource's
                # results field.
                #
                # If any of the images fail to be pushed, the build is marked FAILURE.
              "A String",
            ],
            "objects": { # 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's
                # credentials.
                #
                # The location and generation of the uploaded objects will be stored in the
                # Build resource's results field.
                #
                # If any objects fail to be pushed, the build is marked FAILURE.
                # completion of all build steps.
              "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
                "endTime": "A String", # End of time span.
                "startTime": "A String", # Start of time span.
              },
              "paths": [ # Path globs used to match files in the build's workspace.
                "A String",
              ],
              "location": "A String", # Cloud Storage bucket and optional object path, in the form
                  # "gs://bucket/path/to/somewhere/". (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.
            },
          },
          "projectId": "A String", # Output only. ID of the project.
          "substitutions": { # Substitutions data for `Build` resource.
            "a_key": "A String",
          },
          "source": { # Location of the source in a supported storage service. # The location of the source files to build.
            "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
                # Repository.
              "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
                  # project ID requesting the build is assumed.
              "commitSha": "A String", # Explicit commit SHA to build.
              "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
                  # assumed.
              "tagName": "A String", # Name of the tag to build.
              "branchName": "A String", # Name of the branch to build.
              "dir": "A String", # Directory, relative to the source root, in which to run the build.
                  #
                  # This must be a relative path. If a step's `dir` is specified and is an
                  # absolute path, this value is ignored for that step's execution.
            },
            "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
              "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
                  # omitted, the latest generation will be used.
              "object": "A String", # Google Cloud Storage object containing the source.
                  #
                  # This object must be a gzipped archive file (`.tar.gz`) containing source to
                  # build.
              "bucket": "A String", # Google Cloud Storage bucket containing the source (see
                  # [Bucket Name
                  # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
            },
          },
          "status": "A String", # Output only. Status of the build.
          "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
            "A String",
          ],
          "statusDetail": "A String", # Output only. Customer-readable message about the current status.
          "startTime": "A String", # Output only. Time at which execution of the build was started.
          "timing": { # 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.
            "a_key": { # Start and end times for a build execution phase.
              "endTime": "A String", # End of time span.
              "startTime": "A String", # Start of time span.
            },
          },
          "createTime": "A String", # Output only. Time at which the request to create the build was received.
          "finishTime": "A String", # 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's execution.
          "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
              # was triggered automatically.
          "secrets": [ # 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.
              "secretEnv": { # Map of environment variable name to its encrypted value.
                  #
                  # Secret environment variables must be unique across all of a build'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's secrets.
                "a_key": "A String",
              },
              "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
            },
          ],
          "steps": [ # Required. The operations to be performed on the workspace.
            { # A step in the build pipeline.
              "status": "A String", # 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.
              "args": [ # A list of arguments that will be presented to the step when it is started.
                  #
                  # If the image used to run the step'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.
                "A String",
              ],
              "env": [ # A list of environment variable definitions to be used when running a step.
                  #
                  # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
                  # being given the value "VALUE".
                "A String",
              ],
              "waitFor": [ # 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.
                "A String",
              ],
              "timeout": "A String", # 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.
              "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
                  # Management Service crypto key. These values must be specified in the
                  # build's `Secret`.
                "A String",
              ],
              "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
                  # If unset, the image's default entrypoint is used.
              "volumes": [ # 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.
                  "path": "A String", # 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.
                  "name": "A String", # 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.
                },
              ],
              "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
                "endTime": "A String", # End of time span.
                "startTime": "A String", # Start of time span.
              },
              "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
                  # builder image only.
                "endTime": "A String", # End of time span.
                "startTime": "A String", # Start of time span.
              },
              "id": "A String", # Unique identifier for this build step, used in `wait_for` to
                  # reference this build step as a dependency.
              "dir": "A String", # Working directory to use when running this step's container.
                  #
                  # If this value is a relative path, it is relative to the build's working
                  # directory. If this value is absolute, it may be outside the build'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's execution.
              "name": "A String", # Required. The name of the container image that will run this particular
                  # build step.
                  #
                  # If the image is available in the host's Docker daemon's cache, it
                  # will be run directly. If not, the host will attempt to pull the image
                  # first, using the builder service account's credentials if necessary.
                  #
                  # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
                  # later build step.
            },
          ],
          "timeout": "A String", # 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`.
              #
              # Default time is ten minutes.
          "logsBucket": "A String", # 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`.
          "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
            "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
                # checks.
            "logging": "A String", # Option to specify the logging mode, which determines where the logs are
                # stored.
            "volumes": [ # 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.
                "path": "A String", # 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.
                "name": "A String", # 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.
              },
            ],
            "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
                # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
                # This is an experimental field.
            "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
                # Storage.
            "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
              "A String",
            ],
            "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
                # in this build.
              "A String",
            ],
            "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
                # "disk free"; 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.
            "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
                # being given the value "VALUE".
              "A String",
            ],
            "requestedVerifyOption": "A String", # Requested verifiability options.
            "machineType": "A String", # Compute Engine machine type on which to run the build.
          },
          "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
        },
        "includedFiles": [ # 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.
          "A String",
        ],
        "triggerTemplate": { # 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.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "id": "A String", # Output only. Unique identifier of the trigger.
      },
    ],
  }</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 'execute()' 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, x__xgafv=None)</code>
  <pre>Updates a `BuildTrigger` by its project ID and trigger ID.

This API is experimental.

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

{ # Configuration for an automated build in response to source repository
    # changes.
  "github": { # 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.
      # build whenever a GitHub event is received.
      #
      # This message is experimental.
    "name": "A String", # Name of the repository.
    "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
        # Requests.
      "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
          # collaborator.
      "branch": "A String", # 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
    },
    "owner": "A String", # Owner of the repository.
    "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
      "tag": "A String", # Regexes of tags 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
      "branch": "A String", # Regexes 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
    },
    "installationId": "A String", # The installationID that emmits the GitHub event.
    "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
        # event.
        # check suite events.
    },
  },
  "description": "A String", # Human-readable description of this trigger.
  "tags": [ # Tags for annotation of a `BuildTrigger`
    "A String",
  ],
  "ignoredFiles": [ # ignored_files and included_files are file glob matches using
      # http://godoc/pkg/path/filepath#Match extended with support for "**".
      # 
      # 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.
    "A String",
  ],
  "filename": "A String", # Path, from the source root, to a file whose contents is used for the
      # template.
  "createTime": "A String", # Output only. Time when the trigger was created.
  "substitutions": { # Substitutions data for Build resource.
    "a_key": "A String",
  },
  "disabled": True or False, # If true, the trigger will never result in a build.
  "build": { # 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.
    "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
      "buildStepOutputs": [ # 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.
        "A String",
      ],
      "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
        "endTime": "A String", # End of time span.
        "startTime": "A String", # Start of time span.
      },
      "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
      "images": [ # Container images that were built as a part of the build.
        { # An image built by the pipeline.
          "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "name": "A String", # Name used to push the container image to Google Container Registry, as
              # presented to `docker push`.
          "digest": "A String", # Docker Registry 2.0 digest.
        },
      ],
      "buildStepImages": [ # List of build step digests, in the order corresponding to build step
          # indices.
        "A String",
      ],
      "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
    },
    "sourceProvenance": { # 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.
      "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
          # revisions resolved.
        "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
        "commitSha": "A String", # Explicit commit SHA to build.
        "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
            # assumed.
        "tagName": "A String", # Name of the tag to build.
        "branchName": "A String", # Name of the branch to build.
        "dir": "A String", # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step's `dir` is specified and is an
            # absolute path, this value is ignored for that step's execution.
      },
      "fileHashes": { # 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.
        "a_key": { # Container message for hashes of byte content of files, used in
            # SourceProvenance messages to verify integrity of source input to the build.
          "fileHash": [ # Collection of file hashes.
            { # Container message for hash values.
              "type": "A String", # The type of hash that was performed.
              "value": "A String", # The hash value.
            },
          ],
        },
      },
      "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
          # generations resolved.
        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        "object": "A String", # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
        "bucket": "A String", # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
      },
    },
    "images": [ # A list of images to be pushed upon the successful completion of all build
        # steps.
        #
        # The images are pushed using the builder service account's credentials.
        #
        # The digests of the pushed images will be stored in the `Build` resource's
        # results field.
        #
        # If any of the images fail to be pushed, the build status is marked
        # `FAILURE`.
      "A String",
    ],
    "id": "A String", # Output only. Unique identifier of the build.
    "artifacts": { # 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.
      "images": [ # 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's credentials.
          #
          # The digests of the pushed images will be stored in the Build resource's
          # results field.
          #
          # If any of the images fail to be pushed, the build is marked FAILURE.
        "A String",
      ],
      "objects": { # 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's
          # credentials.
          #
          # The location and generation of the uploaded objects will be stored in the
          # Build resource's results field.
          #
          # If any objects fail to be pushed, the build is marked FAILURE.
          # completion of all build steps.
        "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "paths": [ # Path globs used to match files in the build's workspace.
          "A String",
        ],
        "location": "A String", # Cloud Storage bucket and optional object path, in the form
            # "gs://bucket/path/to/somewhere/". (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.
      },
    },
    "projectId": "A String", # Output only. ID of the project.
    "substitutions": { # Substitutions data for `Build` resource.
      "a_key": "A String",
    },
    "source": { # Location of the source in a supported storage service. # The location of the source files to build.
      "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
          # Repository.
        "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
            # project ID requesting the build is assumed.
        "commitSha": "A String", # Explicit commit SHA to build.
        "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
            # assumed.
        "tagName": "A String", # Name of the tag to build.
        "branchName": "A String", # Name of the branch to build.
        "dir": "A String", # Directory, relative to the source root, in which to run the build.
            #
            # This must be a relative path. If a step's `dir` is specified and is an
            # absolute path, this value is ignored for that step's execution.
      },
      "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
            # omitted, the latest generation will be used.
        "object": "A String", # Google Cloud Storage object containing the source.
            #
            # This object must be a gzipped archive file (`.tar.gz`) containing source to
            # build.
        "bucket": "A String", # Google Cloud Storage bucket containing the source (see
            # [Bucket Name
            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
      },
    },
    "status": "A String", # Output only. Status of the build.
    "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
      "A String",
    ],
    "statusDetail": "A String", # Output only. Customer-readable message about the current status.
    "startTime": "A String", # Output only. Time at which execution of the build was started.
    "timing": { # 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.
      "a_key": { # Start and end times for a build execution phase.
        "endTime": "A String", # End of time span.
        "startTime": "A String", # Start of time span.
      },
    },
    "createTime": "A String", # Output only. Time at which the request to create the build was received.
    "finishTime": "A String", # 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's execution.
    "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
        # was triggered automatically.
    "secrets": [ # 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.
        "secretEnv": { # Map of environment variable name to its encrypted value.
            #
            # Secret environment variables must be unique across all of a build'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's secrets.
          "a_key": "A String",
        },
        "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
      },
    ],
    "steps": [ # Required. The operations to be performed on the workspace.
      { # A step in the build pipeline.
        "status": "A String", # 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.
        "args": [ # A list of arguments that will be presented to the step when it is started.
            #
            # If the image used to run the step'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.
          "A String",
        ],
        "env": [ # A list of environment variable definitions to be used when running a step.
            #
            # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
            # being given the value "VALUE".
          "A String",
        ],
        "waitFor": [ # 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.
          "A String",
        ],
        "timeout": "A String", # 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.
        "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
            # Management Service crypto key. These values must be specified in the
            # build's `Secret`.
          "A String",
        ],
        "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
            # If unset, the image's default entrypoint is used.
        "volumes": [ # 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.
            "path": "A String", # 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.
            "name": "A String", # 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.
          },
        ],
        "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
            # builder image only.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "id": "A String", # Unique identifier for this build step, used in `wait_for` to
            # reference this build step as a dependency.
        "dir": "A String", # Working directory to use when running this step's container.
            #
            # If this value is a relative path, it is relative to the build's working
            # directory. If this value is absolute, it may be outside the build'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's execution.
        "name": "A String", # Required. The name of the container image that will run this particular
            # build step.
            #
            # If the image is available in the host's Docker daemon's cache, it
            # will be run directly. If not, the host will attempt to pull the image
            # first, using the builder service account's credentials if necessary.
            #
            # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
            # later build step.
      },
    ],
    "timeout": "A String", # 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`.
        #
        # Default time is ten minutes.
    "logsBucket": "A String", # 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`.
    "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
      "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
          # checks.
      "logging": "A String", # Option to specify the logging mode, which determines where the logs are
          # stored.
      "volumes": [ # 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.
          "path": "A String", # 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.
          "name": "A String", # 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.
        },
      ],
      "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
          # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
          # This is an experimental field.
      "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
          # Storage.
      "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
        "A String",
      ],
      "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
          # in this build.
        "A String",
      ],
      "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
          # "disk free"; 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.
      "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
          # being given the value "VALUE".
        "A String",
      ],
      "requestedVerifyOption": "A String", # Requested verifiability options.
      "machineType": "A String", # Compute Engine machine type on which to run the build.
    },
    "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
  },
  "includedFiles": [ # 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.
    "A String",
  ],
  "triggerTemplate": { # 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.
    "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
        # project ID requesting the build is assumed.
    "commitSha": "A String", # Explicit commit SHA to build.
    "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
        # assumed.
    "tagName": "A String", # Name of the tag to build.
    "branchName": "A String", # Name of the branch to build.
    "dir": "A String", # Directory, relative to the source root, in which to run the build.
        #
        # This must be a relative path. If a step's `dir` is specified and is an
        # absolute path, this value is ignored for that step's execution.
  },
  "id": "A String", # Output only. Unique identifier of the 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.
    "github": { # 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.
        # build whenever a GitHub event is received.
        #
        # This message is experimental.
      "name": "A String", # Name of the repository.
      "pullRequest": { # PullRequestFilter contains filter properties for matching GitHub Pull # filter to match changes in pull requests.
          # Requests.
        "commentControl": "A String", # Whether to block builds on a "/gcbrun" comment from a repository owner or
            # collaborator.
        "branch": "A String", # 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
      },
      "owner": "A String", # Owner of the repository.
      "push": { # Push contains filter properties for matching GitHub git pushes. # filter to match changes in refs like branches, tags.
        "tag": "A String", # Regexes of tags 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
        "branch": "A String", # Regexes 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
      },
      "installationId": "A String", # The installationID that emmits the GitHub event.
      "checkSuite": { # A CheckSuiteFilter is a filter that indicates that we should build on all # Output only. Indicates that a build was generated from a check suite
          # event.
          # check suite events.
      },
    },
    "description": "A String", # Human-readable description of this trigger.
    "tags": [ # Tags for annotation of a `BuildTrigger`
      "A String",
    ],
    "ignoredFiles": [ # ignored_files and included_files are file glob matches using
        # http://godoc/pkg/path/filepath#Match extended with support for "**".
        #
        # 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.
      "A String",
    ],
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "createTime": "A String", # Output only. Time when the trigger was created.
    "substitutions": { # Substitutions data for Build resource.
      "a_key": "A String",
    },
    "disabled": True or False, # If true, the trigger will never result in a build.
    "build": { # 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.
      "results": { # Artifacts created by the build pipeline. # Output only. Results of the build.
        "buildStepOutputs": [ # 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.
          "A String",
        ],
        "artifactTiming": { # Start and end times for a build execution phase. # Time to push all non-container artifacts.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
        "artifactManifest": "A String", # Path to the artifact manifest. Only populated when artifacts are uploaded.
        "images": [ # Container images that were built as a part of the build.
          { # An image built by the pipeline.
            "pushTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing the specified image.
              "endTime": "A String", # End of time span.
              "startTime": "A String", # Start of time span.
            },
            "name": "A String", # Name used to push the container image to Google Container Registry, as
                # presented to `docker push`.
            "digest": "A String", # Docker Registry 2.0 digest.
          },
        ],
        "buildStepImages": [ # List of build step digests, in the order corresponding to build step
            # indices.
          "A String",
        ],
        "numArtifacts": "A String", # Number of artifacts uploaded. Only populated when artifacts are uploaded.
      },
      "sourceProvenance": { # 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.
        "resolvedRepoSource": { # Location of the source in a Google Cloud Source Repository. # A copy of the build's `source.repo_source`, if exists, with any
            # revisions resolved.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "fileHashes": { # 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.
          "a_key": { # Container message for hashes of byte content of files, used in
              # SourceProvenance messages to verify integrity of source input to the build.
            "fileHash": [ # Collection of file hashes.
              { # Container message for hash values.
                "type": "A String", # The type of hash that was performed.
                "value": "A String", # The hash value.
              },
            ],
          },
        },
        "resolvedStorageSource": { # Location of the source in an archive file in Google Cloud Storage. # A copy of the build's `source.storage_source`, if exists, with any
            # generations resolved.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "images": [ # A list of images to be pushed upon the successful completion of all build
          # steps.
          #
          # The images are pushed using the builder service account's credentials.
          #
          # The digests of the pushed images will be stored in the `Build` resource's
          # results field.
          #
          # If any of the images fail to be pushed, the build status is marked
          # `FAILURE`.
        "A String",
      ],
      "id": "A String", # Output only. Unique identifier of the build.
      "artifacts": { # 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.
        "images": [ # 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's credentials.
            #
            # The digests of the pushed images will be stored in the Build resource's
            # results field.
            #
            # If any of the images fail to be pushed, the build is marked FAILURE.
          "A String",
        ],
        "objects": { # 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's
            # credentials.
            #
            # The location and generation of the uploaded objects will be stored in the
            # Build resource's results field.
            #
            # If any objects fail to be pushed, the build is marked FAILURE.
            # completion of all build steps.
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for pushing all artifact objects.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "paths": [ # Path globs used to match files in the build's workspace.
            "A String",
          ],
          "location": "A String", # Cloud Storage bucket and optional object path, in the form
              # "gs://bucket/path/to/somewhere/". (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.
        },
      },
      "projectId": "A String", # Output only. ID of the project.
      "substitutions": { # Substitutions data for `Build` resource.
        "a_key": "A String",
      },
      "source": { # Location of the source in a supported storage service. # The location of the source files to build.
        "repoSource": { # Location of the source in a Google Cloud Source Repository. # If provided, get the source from this location in a Cloud Source
            # Repository.
          "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
              # project ID requesting the build is assumed.
          "commitSha": "A String", # Explicit commit SHA to build.
          "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
              # assumed.
          "tagName": "A String", # Name of the tag to build.
          "branchName": "A String", # Name of the branch to build.
          "dir": "A String", # Directory, relative to the source root, in which to run the build.
              #
              # This must be a relative path. If a step's `dir` is specified and is an
              # absolute path, this value is ignored for that step's execution.
        },
        "storageSource": { # Location of the source in an archive file in Google Cloud Storage. # If provided, get the source from this location in Google Cloud Storage.
          "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
              # omitted, the latest generation will be used.
          "object": "A String", # Google Cloud Storage object containing the source.
              #
              # This object must be a gzipped archive file (`.tar.gz`) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing the source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "status": "A String", # Output only. Status of the build.
      "tags": [ # Tags for annotation of a `Build`. These are not docker tags.
        "A String",
      ],
      "statusDetail": "A String", # Output only. Customer-readable message about the current status.
      "startTime": "A String", # Output only. Time at which execution of the build was started.
      "timing": { # 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.
        "a_key": { # Start and end times for a build execution phase.
          "endTime": "A String", # End of time span.
          "startTime": "A String", # Start of time span.
        },
      },
      "createTime": "A String", # Output only. Time at which the request to create the build was received.
      "finishTime": "A String", # 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's execution.
      "buildTriggerId": "A String", # Output only. The ID of the `BuildTrigger` that triggered this build, if it
          # was triggered automatically.
      "secrets": [ # 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.
          "secretEnv": { # Map of environment variable name to its encrypted value.
              #
              # Secret environment variables must be unique across all of a build'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's secrets.
            "a_key": "A String",
          },
          "kmsKeyName": "A String", # Cloud KMS key name to use to decrypt these envs.
        },
      ],
      "steps": [ # Required. The operations to be performed on the workspace.
        { # A step in the build pipeline.
          "status": "A String", # 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.
          "args": [ # A list of arguments that will be presented to the step when it is started.
              #
              # If the image used to run the step'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.
            "A String",
          ],
          "env": [ # A list of environment variable definitions to be used when running a step.
              #
              # The elements are of the form "KEY=VALUE" for the environment variable "KEY"
              # being given the value "VALUE".
            "A String",
          ],
          "waitFor": [ # 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.
            "A String",
          ],
          "timeout": "A String", # 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.
          "secretEnv": [ # A list of environment variables which are encrypted using a Cloud Key
              # Management Service crypto key. These values must be specified in the
              # build's `Secret`.
            "A String",
          ],
          "entrypoint": "A String", # Entrypoint to be used instead of the build step image's default entrypoint.
              # If unset, the image's default entrypoint is used.
          "volumes": [ # 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.
              "path": "A String", # 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.
              "name": "A String", # 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.
            },
          ],
          "timing": { # Start and end times for a build execution phase. # Output only. Stores timing information for executing this build step.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "pullTiming": { # Start and end times for a build execution phase. # Output only. Stores timing information for pulling this build step's
              # builder image only.
            "endTime": "A String", # End of time span.
            "startTime": "A String", # Start of time span.
          },
          "id": "A String", # Unique identifier for this build step, used in `wait_for` to
              # reference this build step as a dependency.
          "dir": "A String", # Working directory to use when running this step's container.
              #
              # If this value is a relative path, it is relative to the build's working
              # directory. If this value is absolute, it may be outside the build'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's execution.
          "name": "A String", # Required. The name of the container image that will run this particular
              # build step.
              #
              # If the image is available in the host's Docker daemon's cache, it
              # will be run directly. If not, the host will attempt to pull the image
              # first, using the builder service account's credentials if necessary.
              #
              # The Docker daemon'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 "ubuntu", "debian", 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's Docker daemon's cache and is available to use as the name for a
              # later build step.
        },
      ],
      "timeout": "A String", # 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`.
          #
          # Default time is ten minutes.
      "logsBucket": "A String", # 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`.
      "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
        "substitutionOption": "A String", # Option to specify behavior when there is an error in the substitution
            # checks.
        "logging": "A String", # Option to specify the logging mode, which determines where the logs are
            # stored.
        "volumes": [ # 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.
            "path": "A String", # 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.
            "name": "A String", # 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.
          },
        ],
        "workerPool": "A String", # Option to specify a `WorkerPool` for the build. User specifies the pool
            # with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]".
            # This is an experimental field.
        "logStreamingOption": "A String", # Option to define build log streaming behavior to Google Cloud
            # Storage.
        "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
          "A String",
        ],
        "secretEnv": [ # 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's `Secret`. These variables will be available to all build steps
            # in this build.
          "A String",
        ],
        "diskSizeGb": "A String", # Requested disk size for the VM that runs the build. Note that this is *NOT*
            # "disk free"; 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.
        "env": [ # 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 "KEY=VALUE" for the environment variable "KEY"
            # being given the value "VALUE".
          "A String",
        ],
        "requestedVerifyOption": "A String", # Requested verifiability options.
        "machineType": "A String", # Compute Engine machine type on which to run the build.
      },
      "logUrl": "A String", # Output only. URL to logs for this build in Google Cloud Console.
    },
    "includedFiles": [ # 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.
      "A String",
    ],
    "triggerTemplate": { # 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.
      "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
          # project ID requesting the build is assumed.
      "commitSha": "A String", # Explicit commit SHA to build.
      "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
          # assumed.
      "tagName": "A String", # Name of the tag to build.
      "branchName": "A String", # Name of the branch to build.
      "dir": "A String", # Directory, relative to the source root, in which to run the build.
          #
          # This must be a relative path. If a step's `dir` is specified and is an
          # absolute path, this value is ignored for that step's execution.
    },
    "id": "A String", # Output only. Unique identifier of the trigger.
  }</pre>
</div>

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

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

{ # Location of the source in a Google Cloud Source Repository.
  "projectId": "A String", # ID of the project that owns the Cloud Source Repository. If omitted, the
      # project ID requesting the build is assumed.
  "commitSha": "A String", # Explicit commit SHA to build.
  "repoName": "A String", # Name of the Cloud Source Repository. If omitted, the name "default" is
      # assumed.
  "tagName": "A String", # Name of the tag to build.
  "branchName": "A String", # Name of the branch to build.
  "dir": "A String", # Directory, relative to the source root, in which to run the build.
      # 
      # This must be a relative path. If a step's `dir` is specified and is an
      # absolute path, this value is ignored for that step's execution.
}

  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.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

</body></html>