<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">Google Cloud Container Builder 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 an 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">Gets information about a BuildTrigger.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, x__xgafv=None)</a></code></p>
<p class="firstline">Lists existing BuildTrigger.</p>
<p class="toc_element">
  <code><a href="#patch">patch(projectId, triggerId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an BuildTrigger by its project ID and trigger ID.</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.
    "description": "A String", # Human-readable description of this trigger.
    "createTime": "A String", # Time when the trigger was created.
        # 
        # @OutputOnly
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "disabled": True or False, # If true, the trigger will never result in a build.
    "build": { # A build resource in the Container Builder 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 what tag to
        # apply to the built image when it is pushed to Google Container Registry.
        #
        # 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.
      "status": "A String", # Status of the build.
          # @OutputOnly
      "finishTime": "A String", # 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.
          # @OutputOnly
      "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.
      "statusDetail": "A String", # Customer-readable message about the current status.
          # @OutputOnly
      "startTime": "A String", # Time at which execution of the build was started.
          # @OutputOnly
      "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`.
      "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
          # @OutputOnly
        "images": [ # Images that were built as a part of the build.
          { # BuiltImage describes an image built by the pipeline.
            "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 order corresponding to build step indices.
          "A String",
        ],
      },
      "createTime": "A String", # Time at which the request to create the build was received.
          # @OutputOnly
      "id": "A String", # Unique identifier of the build.
          # @OutputOnly
      "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
          # service.
        "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
            # Storage.
            # 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 source.
              #
              # This object must be a gzipped archive file (.tar.gz) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
        "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
            # Repository.
          "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
              # the build is assumed.
          "branchName": "A String", # Name of the branch to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          "tagName": "A String", # Name of the tag to build.
          "commitSha": "A String", # Explicit commit SHA to build.
        },
      },
      "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
          # triggered automatically.
          # @OutputOnly
      "steps": [ # Describes the operations to be performed on the workspace.
        { # BuildStep describes a step to perform in the build pipeline.
          "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",
          ],
          "name": "A String", # The name of the container image that will run this particular build step.
              #
              # If the image is already 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). 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.
          "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, these args
              # will be used as arguments to that entrypoint. If the image does not define
              # an entrypoint, the first element in args will be 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",
          ],
          "id": "A String", # Optional unique identifier for this build step, used in wait_for to
              # reference this build step as a dependency.
          "dir": "A String", # Working directory (relative to project source root) to use when running
              # this operation's container.
        },
      ],
      "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
          # @OutputOnly
          # some source was used for this build.
        "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
            # revisions resolved.
            # Repository.
          "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
              # the build is assumed.
          "branchName": "A String", # Name of the branch to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          "tagName": "A String", # Name of the tag to build.
          "commitSha": "A String", # Explicit commit SHA to build.
        },
        "fileHashes": { # 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.
            # @OutputOnly
          "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
            # generations resolved.
            # 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 source.
              #
              # This object must be a gzipped archive file (.tar.gz) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "projectId": "A String", # ID of the project.
          # @OutputOnly.
      "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",
      ],
      "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
        "requestedVerifyOption": "A String", # Requested verifiability options.
        "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
          "A String",
        ],
      },
      "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
          # @OutputOnly
    },
    "id": "A String", # Unique identifier of the trigger.
        # 
        # @OutputOnly
    "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
        # Repository.
      "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
          # the build is assumed.
      "branchName": "A String", # Name of the branch to build.
      "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
      "tagName": "A String", # Name of the tag to build.
      "commitSha": "A String", # Explicit commit SHA to build.
    },
  }

  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.
      "description": "A String", # Human-readable description of this trigger.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "disabled": True or False, # If true, the trigger will never result in a build.
      "build": { # A build resource in the Container Builder 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 what tag to
          # apply to the built image when it is pushed to Google Container Registry.
          #
          # 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.
        "status": "A String", # Status of the build.
            # @OutputOnly
        "finishTime": "A String", # 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.
            # @OutputOnly
        "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.
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "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`.
        "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
            # @OutputOnly
          "images": [ # Images that were built as a part of the build.
            { # BuiltImage describes an image built by the pipeline.
              "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 order corresponding to build step indices.
            "A String",
          ],
        },
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
              # Storage.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
          "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "steps": [ # Describes the operations to be performed on the workspace.
          { # BuildStep describes a step to perform in the build pipeline.
            "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",
            ],
            "name": "A String", # The name of the container image that will run this particular build step.
                #
                # If the image is already 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). 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.
            "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, these args
                # will be used as arguments to that entrypoint. If the image does not define
                # an entrypoint, the first element in args will be 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",
            ],
            "id": "A String", # Optional unique identifier for this build step, used in wait_for to
                # reference this build step as a dependency.
            "dir": "A String", # Working directory (relative to project source root) to use when running
                # this operation's container.
          },
        ],
        "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
            # @OutputOnly
            # some source was used for this build.
          "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
              # revisions resolved.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
          "fileHashes": { # 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.
              # @OutputOnly
            "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
              # generations resolved.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
        },
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "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",
        ],
        "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
          "requestedVerifyOption": "A String", # Requested verifiability options.
          "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
            "A String",
          ],
        },
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @OutputOnly
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
      "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
          # Repository.
        "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
            # the build is assumed.
        "branchName": "A String", # Name of the branch to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        "tagName": "A String", # Name of the tag to build.
        "commitSha": "A String", # Explicit commit SHA to build.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(projectId, triggerId, x__xgafv=None)</code>
  <pre>Deletes an 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>Gets 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.
      "description": "A String", # Human-readable description of this trigger.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "disabled": True or False, # If true, the trigger will never result in a build.
      "build": { # A build resource in the Container Builder 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 what tag to
          # apply to the built image when it is pushed to Google Container Registry.
          #
          # 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.
        "status": "A String", # Status of the build.
            # @OutputOnly
        "finishTime": "A String", # 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.
            # @OutputOnly
        "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.
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "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`.
        "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
            # @OutputOnly
          "images": [ # Images that were built as a part of the build.
            { # BuiltImage describes an image built by the pipeline.
              "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 order corresponding to build step indices.
            "A String",
          ],
        },
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
              # Storage.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
          "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "steps": [ # Describes the operations to be performed on the workspace.
          { # BuildStep describes a step to perform in the build pipeline.
            "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",
            ],
            "name": "A String", # The name of the container image that will run this particular build step.
                #
                # If the image is already 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). 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.
            "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, these args
                # will be used as arguments to that entrypoint. If the image does not define
                # an entrypoint, the first element in args will be 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",
            ],
            "id": "A String", # Optional unique identifier for this build step, used in wait_for to
                # reference this build step as a dependency.
            "dir": "A String", # Working directory (relative to project source root) to use when running
                # this operation's container.
          },
        ],
        "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
            # @OutputOnly
            # some source was used for this build.
          "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
              # revisions resolved.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
          "fileHashes": { # 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.
              # @OutputOnly
            "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
              # generations resolved.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
        },
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "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",
        ],
        "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
          "requestedVerifyOption": "A String", # Requested verifiability options.
          "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
            "A String",
          ],
        },
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @OutputOnly
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
      "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
          # Repository.
        "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
            # the build is assumed.
        "branchName": "A String", # Name of the branch to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        "tagName": "A String", # Name of the tag to build.
        "commitSha": "A String", # Explicit commit SHA to build.
      },
    }</pre>
</div>

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

This API is experimental.

Args:
  projectId: string, ID of the project for which to list BuildTriggers. (required)
  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.
    "triggers": [ # BuildTriggers for the project, sorted by create_time descending.
      { # Configuration for an automated build in response to source repository
            # changes.
          "description": "A String", # Human-readable description of this trigger.
          "createTime": "A String", # Time when the trigger was created.
              #
              # @OutputOnly
          "filename": "A String", # Path, from the source root, to a file whose contents is used for the
              # template.
          "disabled": True or False, # If true, the trigger will never result in a build.
          "build": { # A build resource in the Container Builder 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 what tag to
              # apply to the built image when it is pushed to Google Container Registry.
              #
              # 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.
            "status": "A String", # Status of the build.
                # @OutputOnly
            "finishTime": "A String", # 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.
                # @OutputOnly
            "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.
            "statusDetail": "A String", # Customer-readable message about the current status.
                # @OutputOnly
            "startTime": "A String", # Time at which execution of the build was started.
                # @OutputOnly
            "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`.
            "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
                # @OutputOnly
              "images": [ # Images that were built as a part of the build.
                { # BuiltImage describes an image built by the pipeline.
                  "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 order corresponding to build step indices.
                "A String",
              ],
            },
            "createTime": "A String", # Time at which the request to create the build was received.
                # @OutputOnly
            "id": "A String", # Unique identifier of the build.
                # @OutputOnly
            "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
                # service.
              "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
                  # Storage.
                  # 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 source.
                    #
                    # This object must be a gzipped archive file (.tar.gz) containing source to
                    # build.
                "bucket": "A String", # Google Cloud Storage bucket containing source (see
                    # [Bucket Name
                    # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              },
              "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
                  # Repository.
                "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                    # the build is assumed.
                "branchName": "A String", # Name of the branch to build.
                "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
                "tagName": "A String", # Name of the tag to build.
                "commitSha": "A String", # Explicit commit SHA to build.
              },
            },
            "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
                # triggered automatically.
                # @OutputOnly
            "steps": [ # Describes the operations to be performed on the workspace.
              { # BuildStep describes a step to perform in the build pipeline.
                "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",
                ],
                "name": "A String", # The name of the container image that will run this particular build step.
                    #
                    # If the image is already 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). 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.
                "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, these args
                    # will be used as arguments to that entrypoint. If the image does not define
                    # an entrypoint, the first element in args will be 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",
                ],
                "id": "A String", # Optional unique identifier for this build step, used in wait_for to
                    # reference this build step as a dependency.
                "dir": "A String", # Working directory (relative to project source root) to use when running
                    # this operation's container.
              },
            ],
            "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
                # @OutputOnly
                # some source was used for this build.
              "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
                  # revisions resolved.
                  # Repository.
                "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                    # the build is assumed.
                "branchName": "A String", # Name of the branch to build.
                "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
                "tagName": "A String", # Name of the tag to build.
                "commitSha": "A String", # Explicit commit SHA to build.
              },
              "fileHashes": { # 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.
                  # @OutputOnly
                "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
                  # generations resolved.
                  # 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 source.
                    #
                    # This object must be a gzipped archive file (.tar.gz) containing source to
                    # build.
                "bucket": "A String", # Google Cloud Storage bucket containing source (see
                    # [Bucket Name
                    # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
              },
            },
            "projectId": "A String", # ID of the project.
                # @OutputOnly.
            "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",
            ],
            "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
              "requestedVerifyOption": "A String", # Requested verifiability options.
              "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
                "A String",
              ],
            },
            "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
                # @OutputOnly
          },
          "id": "A String", # Unique identifier of the trigger.
              #
              # @OutputOnly
          "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(projectId, triggerId, body, x__xgafv=None)</code>
  <pre>Updates an 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.
    "description": "A String", # Human-readable description of this trigger.
    "createTime": "A String", # Time when the trigger was created.
        # 
        # @OutputOnly
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "disabled": True or False, # If true, the trigger will never result in a build.
    "build": { # A build resource in the Container Builder 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 what tag to
        # apply to the built image when it is pushed to Google Container Registry.
        #
        # 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.
      "status": "A String", # Status of the build.
          # @OutputOnly
      "finishTime": "A String", # 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.
          # @OutputOnly
      "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.
      "statusDetail": "A String", # Customer-readable message about the current status.
          # @OutputOnly
      "startTime": "A String", # Time at which execution of the build was started.
          # @OutputOnly
      "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`.
      "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
          # @OutputOnly
        "images": [ # Images that were built as a part of the build.
          { # BuiltImage describes an image built by the pipeline.
            "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 order corresponding to build step indices.
          "A String",
        ],
      },
      "createTime": "A String", # Time at which the request to create the build was received.
          # @OutputOnly
      "id": "A String", # Unique identifier of the build.
          # @OutputOnly
      "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
          # service.
        "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
            # Storage.
            # 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 source.
              #
              # This object must be a gzipped archive file (.tar.gz) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
        "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
            # Repository.
          "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
              # the build is assumed.
          "branchName": "A String", # Name of the branch to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          "tagName": "A String", # Name of the tag to build.
          "commitSha": "A String", # Explicit commit SHA to build.
        },
      },
      "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
          # triggered automatically.
          # @OutputOnly
      "steps": [ # Describes the operations to be performed on the workspace.
        { # BuildStep describes a step to perform in the build pipeline.
          "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",
          ],
          "name": "A String", # The name of the container image that will run this particular build step.
              #
              # If the image is already 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). 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.
          "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, these args
              # will be used as arguments to that entrypoint. If the image does not define
              # an entrypoint, the first element in args will be 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",
          ],
          "id": "A String", # Optional unique identifier for this build step, used in wait_for to
              # reference this build step as a dependency.
          "dir": "A String", # Working directory (relative to project source root) to use when running
              # this operation's container.
        },
      ],
      "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
          # @OutputOnly
          # some source was used for this build.
        "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
            # revisions resolved.
            # Repository.
          "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
              # the build is assumed.
          "branchName": "A String", # Name of the branch to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          "tagName": "A String", # Name of the tag to build.
          "commitSha": "A String", # Explicit commit SHA to build.
        },
        "fileHashes": { # 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.
            # @OutputOnly
          "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
            # generations resolved.
            # 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 source.
              #
              # This object must be a gzipped archive file (.tar.gz) containing source to
              # build.
          "bucket": "A String", # Google Cloud Storage bucket containing source (see
              # [Bucket Name
              # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
        },
      },
      "projectId": "A String", # ID of the project.
          # @OutputOnly.
      "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",
      ],
      "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
        "requestedVerifyOption": "A String", # Requested verifiability options.
        "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
          "A String",
        ],
      },
      "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
          # @OutputOnly
    },
    "id": "A String", # Unique identifier of the trigger.
        # 
        # @OutputOnly
    "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
        # Repository.
      "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
          # the build is assumed.
      "branchName": "A String", # Name of the branch to build.
      "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
      "tagName": "A String", # Name of the tag to build.
      "commitSha": "A String", # Explicit commit SHA to build.
    },
  }

  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.
      "description": "A String", # Human-readable description of this trigger.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "disabled": True or False, # If true, the trigger will never result in a build.
      "build": { # A build resource in the Container Builder 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 what tag to
          # apply to the built image when it is pushed to Google Container Registry.
          #
          # 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.
        "status": "A String", # Status of the build.
            # @OutputOnly
        "finishTime": "A String", # 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.
            # @OutputOnly
        "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.
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "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`.
        "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
            # @OutputOnly
          "images": [ # Images that were built as a part of the build.
            { # BuiltImage describes an image built by the pipeline.
              "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 order corresponding to build step indices.
            "A String",
          ],
        },
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
              # Storage.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
          "repoSource": { # RepoSource describes the location of the source in a Google Cloud Source # If provided, get source from this location in a Cloud Repo.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "steps": [ # Describes the operations to be performed on the workspace.
          { # BuildStep describes a step to perform in the build pipeline.
            "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",
            ],
            "name": "A String", # The name of the container image that will run this particular build step.
                #
                # If the image is already 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). 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.
            "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, these args
                # will be used as arguments to that entrypoint. If the image does not define
                # an entrypoint, the first element in args will be 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",
            ],
            "id": "A String", # Optional unique identifier for this build step, used in wait_for to
                # reference this build step as a dependency.
            "dir": "A String", # Working directory (relative to project source root) to use when running
                # this operation's container.
          },
        ],
        "sourceProvenance": { # Provenance of the source. Ways to find the original source, or verify that # A permanent fixed identifier for source.
            # @OutputOnly
            # some source was used for this build.
          "resolvedRepoSource": { # RepoSource describes the location of the source in a Google Cloud Source # A copy of the build's source.repo_source, if exists, with any
              # revisions resolved.
              # Repository.
            "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
                # the build is assumed.
            "branchName": "A String", # Name of the branch to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
            "tagName": "A String", # Name of the tag to build.
            "commitSha": "A String", # Explicit commit SHA to build.
          },
          "fileHashes": { # 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.
              # @OutputOnly
            "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": { # StorageSource describes the location of the source in an archive file in # A copy of the build's source.storage_source, if exists, with any
              # generations resolved.
              # 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 source.
                #
                # This object must be a gzipped archive file (.tar.gz) containing source to
                # build.
            "bucket": "A String", # Google Cloud Storage bucket containing source (see
                # [Bucket Name
                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
          },
        },
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "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",
        ],
        "options": { # Optional arguments to enable specific features of builds. # Special options for this build.
          "requestedVerifyOption": "A String", # Requested verifiability options.
          "sourceProvenanceHash": [ # Requested hash for SourceProvenance.
            "A String",
          ],
        },
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @OutputOnly
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
      "triggerTemplate": { # RepoSource describes the location of the source in a Google Cloud Source # 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.
          # Repository.
        "projectId": "A String", # ID of the project that owns the repo. If omitted, the project ID requesting
            # the build is assumed.
        "branchName": "A String", # Name of the branch to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        "tagName": "A String", # Name of the tag to build.
        "commitSha": "A String", # Explicit commit SHA to build.
      },
    }</pre>
</div>

</body></html>