<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.
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "createTime": "A String", # Time when the trigger was created.
        # 
        # @OutputOnly
    "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 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.
      "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
      "status": "A String", # Status of the build.
          # @OutputOnly
      "startTime": "A String", # Time at which execution of the build was started.
          # @OutputOnly
      "statusDetail": "A String", # Customer-readable message about the current status.
          # @OutputOnly
      "tags": [ # Tags for annotation of a Build. These are not docker tags.
        "A String",
      ],
      "projectId": "A String", # ID of the project.
          # @OutputOnly.
      "id": "A String", # Unique identifier of the build.
          # @OutputOnly
      "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",
        ],
      },
      "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.
      "substitutions": { # Substitutions data for Build resource.
        "a_key": "A String",
      },
      "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
          # service.
        "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.
          "commitSha": "A String", # Explicit commit SHA to build.
          "tagName": "A String", # Name of the tag to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        },
        "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)).
        },
      },
      "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
          # triggered automatically.
          # @OutputOnly
      "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",
        ],
      },
      "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](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",
          ],
          "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
              # If unset, the image's default will be used.
          "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.
          "commitSha": "A String", # Explicit commit SHA to build.
          "tagName": "A String", # Name of the tag to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        },
        "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)).
        },
      },
      "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`.
      "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",
      ],
      "createTime": "A String", # Time at which the request to create the build was received.
          # @OutputOnly
      "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
          # @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.
      "commitSha": "A String", # Explicit commit SHA to build.
      "tagName": "A String", # Name of the tag to build.
      "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
    },
    "id": "A String", # Unique identifier of the trigger.
        # 
        # @OutputOnly
  }

  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.
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "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 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.
        "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
        "status": "A String", # Status of the build.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "tags": [ # Tags for annotation of a Build. These are not docker tags.
          "A String",
        ],
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "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",
          ],
        },
        "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.
        "substitutions": { # Substitutions data for Build resource.
          "a_key": "A String",
        },
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "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",
          ],
        },
        "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](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",
            ],
            "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
                # If unset, the image's default will be used.
            "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "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`.
        "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",
        ],
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @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.
        "commitSha": "A String", # Explicit commit SHA to build.
        "tagName": "A String", # Name of the tag to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
    }</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.
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "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 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.
        "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
        "status": "A String", # Status of the build.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "tags": [ # Tags for annotation of a Build. These are not docker tags.
          "A String",
        ],
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "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",
          ],
        },
        "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.
        "substitutions": { # Substitutions data for Build resource.
          "a_key": "A String",
        },
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "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",
          ],
        },
        "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](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",
            ],
            "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
                # If unset, the image's default will be used.
            "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "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`.
        "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",
        ],
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @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.
        "commitSha": "A String", # Explicit commit SHA to build.
        "tagName": "A String", # Name of the tag to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
    }</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.
          "filename": "A String", # Path, from the source root, to a file whose contents is used for the
              # template.
          "createTime": "A String", # Time when the trigger was created.
              #
              # @OutputOnly
          "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 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.
            "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
            "status": "A String", # Status of the build.
                # @OutputOnly
            "startTime": "A String", # Time at which execution of the build was started.
                # @OutputOnly
            "statusDetail": "A String", # Customer-readable message about the current status.
                # @OutputOnly
            "tags": [ # Tags for annotation of a Build. These are not docker tags.
              "A String",
            ],
            "projectId": "A String", # ID of the project.
                # @OutputOnly.
            "id": "A String", # Unique identifier of the build.
                # @OutputOnly
            "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",
              ],
            },
            "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.
            "substitutions": { # Substitutions data for Build resource.
              "a_key": "A String",
            },
            "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
                # service.
              "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.
                "commitSha": "A String", # Explicit commit SHA to build.
                "tagName": "A String", # Name of the tag to build.
                "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
              },
              "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)).
              },
            },
            "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
                # triggered automatically.
                # @OutputOnly
            "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",
              ],
            },
            "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](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",
                ],
                "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
                    # If unset, the image's default will be used.
                "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.
                "commitSha": "A String", # Explicit commit SHA to build.
                "tagName": "A String", # Name of the tag to build.
                "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
              },
              "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)).
              },
            },
            "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`.
            "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",
            ],
            "createTime": "A String", # Time at which the request to create the build was received.
                # @OutputOnly
            "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
                # @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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "id": "A String", # Unique identifier of the trigger.
              #
              # @OutputOnly
        },
    ],
  }</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.
    "filename": "A String", # Path, from the source root, to a file whose contents is used for the
        # template.
    "createTime": "A String", # Time when the trigger was created.
        # 
        # @OutputOnly
    "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 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.
      "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
      "status": "A String", # Status of the build.
          # @OutputOnly
      "startTime": "A String", # Time at which execution of the build was started.
          # @OutputOnly
      "statusDetail": "A String", # Customer-readable message about the current status.
          # @OutputOnly
      "tags": [ # Tags for annotation of a Build. These are not docker tags.
        "A String",
      ],
      "projectId": "A String", # ID of the project.
          # @OutputOnly.
      "id": "A String", # Unique identifier of the build.
          # @OutputOnly
      "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",
        ],
      },
      "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.
      "substitutions": { # Substitutions data for Build resource.
        "a_key": "A String",
      },
      "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
          # service.
        "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.
          "commitSha": "A String", # Explicit commit SHA to build.
          "tagName": "A String", # Name of the tag to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        },
        "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)).
        },
      },
      "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
          # triggered automatically.
          # @OutputOnly
      "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",
        ],
      },
      "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](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",
          ],
          "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
              # If unset, the image's default will be used.
          "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.
          "commitSha": "A String", # Explicit commit SHA to build.
          "tagName": "A String", # Name of the tag to build.
          "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
        },
        "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)).
        },
      },
      "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`.
      "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",
      ],
      "createTime": "A String", # Time at which the request to create the build was received.
          # @OutputOnly
      "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
          # @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.
      "commitSha": "A String", # Explicit commit SHA to build.
      "tagName": "A String", # Name of the tag to build.
      "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
    },
    "id": "A String", # Unique identifier of the trigger.
        # 
        # @OutputOnly
  }

  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.
      "filename": "A String", # Path, from the source root, to a file whose contents is used for the
          # template.
      "createTime": "A String", # Time when the trigger was created.
          #
          # @OutputOnly
      "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 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.
        "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
        "status": "A String", # Status of the build.
            # @OutputOnly
        "startTime": "A String", # Time at which execution of the build was started.
            # @OutputOnly
        "statusDetail": "A String", # Customer-readable message about the current status.
            # @OutputOnly
        "tags": [ # Tags for annotation of a Build. These are not docker tags.
          "A String",
        ],
        "projectId": "A String", # ID of the project.
            # @OutputOnly.
        "id": "A String", # Unique identifier of the build.
            # @OutputOnly
        "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",
          ],
        },
        "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.
        "substitutions": { # Substitutions data for Build resource.
          "a_key": "A String",
        },
        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
            # service.
          "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "buildTriggerId": "A String", # The ID of the BuildTrigger that triggered this build, if it was
            # triggered automatically.
            # @OutputOnly
        "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",
          ],
        },
        "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](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",
            ],
            "entrypoint": "A String", # Optional entrypoint to be used instead of the build step image's default
                # If unset, the image's default will be used.
            "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.
            "commitSha": "A String", # Explicit commit SHA to build.
            "tagName": "A String", # Name of the tag to build.
            "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
          },
          "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)).
          },
        },
        "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`.
        "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",
        ],
        "createTime": "A String", # Time at which the request to create the build was received.
            # @OutputOnly
        "logUrl": "A String", # URL to logs for this build in Google Cloud Logging.
            # @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.
        "commitSha": "A String", # Explicit commit SHA to build.
        "tagName": "A String", # Name of the tag to build.
        "repoName": "A String", # Name of the repo. If omitted, the name "default" is assumed.
      },
      "id": "A String", # Unique identifier of the trigger.
          #
          # @OutputOnly
    }</pre>
</div>

</body></html>