From f1d8a3388f663939222032cf91cace8bf485f9ad Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Thu, 16 May 2019 00:59:46 -0400 Subject: [PATCH] Add app that simulates GCB API but is only capable of building with buildpacks --- .ko.yaml | 1 + Gopkg.lock | 13 +- cmd/api/README.md | 67 + cmd/api/main.go | 301 ++ deploy.sh | 7 + vendor/github.com/google/uuid/.travis.yml | 9 + vendor/github.com/google/uuid/CONTRIBUTING.md | 10 + vendor/github.com/google/uuid/CONTRIBUTORS | 9 + vendor/github.com/google/uuid/LICENSE | 27 + vendor/github.com/google/uuid/README.md | 19 + vendor/github.com/google/uuid/dce.go | 80 + vendor/github.com/google/uuid/doc.go | 12 + vendor/github.com/google/uuid/go.mod | 1 + vendor/github.com/google/uuid/hash.go | 53 + vendor/github.com/google/uuid/marshal.go | 37 + vendor/github.com/google/uuid/node.go | 90 + vendor/github.com/google/uuid/node_js.go | 12 + vendor/github.com/google/uuid/node_net.go | 33 + vendor/github.com/google/uuid/sql.go | 59 + vendor/github.com/google/uuid/time.go | 123 + vendor/github.com/google/uuid/util.go | 43 + vendor/github.com/google/uuid/uuid.go | 245 + vendor/github.com/google/uuid/version1.go | 44 + vendor/github.com/google/uuid/version4.go | 38 + .../api/cloudbuild/v1/cloudbuild-api.json | 1522 ++++++ .../api/cloudbuild/v1/cloudbuild-gen.go | 4143 +++++++++++++++++ 26 files changed, 6997 insertions(+), 1 deletion(-) create mode 100644 cmd/api/README.md create mode 100644 cmd/api/main.go create mode 100644 vendor/github.com/google/uuid/.travis.yml create mode 100644 vendor/github.com/google/uuid/CONTRIBUTING.md create mode 100644 vendor/github.com/google/uuid/CONTRIBUTORS create mode 100644 vendor/github.com/google/uuid/LICENSE create mode 100644 vendor/github.com/google/uuid/README.md create mode 100644 vendor/github.com/google/uuid/dce.go create mode 100644 vendor/github.com/google/uuid/doc.go create mode 100644 vendor/github.com/google/uuid/go.mod create mode 100644 vendor/github.com/google/uuid/hash.go create mode 100644 vendor/github.com/google/uuid/marshal.go create mode 100644 vendor/github.com/google/uuid/node.go create mode 100644 vendor/github.com/google/uuid/node_js.go create mode 100644 vendor/github.com/google/uuid/node_net.go create mode 100644 vendor/github.com/google/uuid/sql.go create mode 100644 vendor/github.com/google/uuid/time.go create mode 100644 vendor/github.com/google/uuid/util.go create mode 100644 vendor/github.com/google/uuid/uuid.go create mode 100644 vendor/github.com/google/uuid/version1.go create mode 100644 vendor/github.com/google/uuid/version4.go create mode 100644 vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json create mode 100644 vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-gen.go diff --git a/.ko.yaml b/.ko.yaml index d40ec94..29dc121 100644 --- a/.ko.yaml +++ b/.ko.yaml @@ -1,3 +1,4 @@ baseImageOverrides: github.com/imjasonh/kontain.me/cmd/ko: golang github.com/imjasonh/kontain.me/cmd/buildpack: packs/samples:v3alpha2 + github.com/imjasonh/kontain.me/cmd/api: packs/samples:v3alpha2 diff --git a/Gopkg.lock b/Gopkg.lock index 93d1262..7a417a8 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -70,6 +70,14 @@ revision = "021e392d3a3d2c318c79f34c4dd15da2402afce9" version = "v0.1" +[[projects]] + digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b" + name = "github.com/google/uuid" + packages = ["."] + pruneopts = "UT" + revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4" + version = "v1.1.1" + [[projects]] digest = "1:f1f70abea1ab125d48396343b4c053f8fecfbdb943037bf3d29dc80c90fe60b3" name = "github.com/googleapis/gax-go" @@ -188,9 +196,10 @@ version = "v0.3.2" [[projects]] - digest = "1:cb57e4a697906517335fe66b31ac5887009181cdb53c6aa2c6cd70edde6d8225" + digest = "1:994730ad32f9717bf35dccdf1c1619e0a1374439cc990bff8d588c6a68348049" name = "google.golang.org/api" packages = [ + "cloudbuild/v1", "gensupport", "googleapi", "googleapi/internal/uritemplates", @@ -310,7 +319,9 @@ "github.com/google/go-containerregistry/pkg/v1/remote", "github.com/google/go-containerregistry/pkg/v1/types", "github.com/google/ko/pkg/build", + "github.com/google/uuid", "golang.org/x/oauth2/google", + "google.golang.org/api/cloudbuild/v1", "google.golang.org/api/googleapi", ] solver-name = "gps-cdcl" diff --git a/cmd/api/README.md b/cmd/api/README.md new file mode 100644 index 0000000..daab582 --- /dev/null +++ b/cmd/api/README.md @@ -0,0 +1,67 @@ +First, be in a local directory containing buildpack-detectable source: + +``` +$ git clone git@github.com:buildpack/sample-java-app.git +$ cd sample-java-app +``` + +Then, by overriding the address where API requests are sent, you can create +Build requests that execute buildpacks builds: + +``` +$ CLOUDSDK_API_ENDPOINT_OVERRIDES_CLOUDBUILD=https://api-an3qnndwmq-uc.a.run.app/ gcloud builds submit --tag=gcr.io/my-project/built +Creating temporary tarball archive of 15 file(s) totalling 91.8 KiB before compression. +Some files were not included in the source upload. + +Check the gcloud log [/Users/jasonhall/.config/gcloud/logs/2019.05.16/00.35.06.407646.log] to see which files and the contents of the +default gcloudignore file used (see `$ gcloud topic gcloudignore` to learn +more). + +Uploading tarball of [.] to [gs://my-project_cloudbuild/source/1557981306.47-9ee5987ef42e4dc988d7dcd4a4dc0bdc.tgz] +Created [https://api-an3qnndwmq-uc.a.run.app/v1/projects/my-project/builds/a33da1cc-8e3c-4579-92cd-d7bab749ba22]. +Logs are available in the Cloud Console. +ID CREATE_TIME DURATION SOURCE IMAGES STATUS +a33da1cc-8e3c-4579-92cd-d7bab749ba22 2019-05-16T04:35:07+00:00 1M6S gs://my-project_cloudbuild/source/1557981306.47-9ee5987ef42e4dc988d7dcd4a4dc0bdc.tgz gcr.io/my-project/built SUCCESS +``` + +You can also get build details: + +``` +$ CLOUDSDK_API_ENDPOINT_OVERRIDES_CLOUDBUILD=https://api-an3qnndwmq-uc.a.run.app/ gcloud builds describe a33da1cc-8e3c-4579-92cd-d7bab749ba22 +createTime: '2019-05-16T04:35:07.426525401Z' +finishTime: '2019-05-16T04:36:13.70673836Z' +id: a33da1cc-8e3c-4579-92cd-d7bab749ba22 +images: +- gcr.io/my-project/built +logsBucket: my-project_cloudbuild +projectId: my-project +results: + images: + - digest: sha256:de35ebf2e6e39bc7e2047bc261095435dd6b710ff09af38edcb059e640e8c35e + name: gcr.io/my-project/built +source: + storageSource: + bucket: my-project_cloudbuild + generation: '1557981307124794' + object: source/1557981306.47-9ee5987ef42e4dc988d7dcd4a4dc0bdc.tgz +startTime: '2019-05-16T04:35:07.426525401Z' +status: SUCCESS +statusDetail: '' +``` + +## Known differences / NYEs + +- [ ] Builds are performed entirely in the context of the + `projects.builds.create` request, not by polling a long-running operation. +- [ ] Build operations (source pulls and image pushes) are authorized using the + end-user credentials, not the project's builder service account. +- [ ] Build logs are not yet written to Cloud Storage, so they're not available + via `gcloud`. +- [ ] Timing is not collected or reported. +- [ ] `timeout` is not configurable. If Cloud Run request times out, client + gets a 502. +- [ ] `sourceProvenance` is not yet collected or reported. +- [ ] `projects.builds.list` is not yet implemented. +- [ ] `operations.get` and `operations.list` are not yet implemented. +- [ ] `projects.builds.cancel` is not implementable (the client doesn't get the + build ID until it's complete). diff --git a/cmd/api/main.go b/cmd/api/main.go new file mode 100644 index 0000000..015b06f --- /dev/null +++ b/cmd/api/main.go @@ -0,0 +1,301 @@ +package main + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "log" + "net/http" + "os" + "regexp" + "strings" + "time" + + "cloud.google.com/go/compute/metadata" + "cloud.google.com/go/datastore" + "github.com/google/go-containerregistry/pkg/authn" + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1" + "github.com/google/go-containerregistry/pkg/v1/remote" + "github.com/google/uuid" + "github.com/imjasonh/kontain.me/pkg/run" + gcb "google.golang.org/api/cloudbuild/v1" +) + +const base = "packs/run:v3alpha2" + +var ( + projectRE = regexp.MustCompile("/v1/projects/([a-z0-9-]+)/") + buildRE = regexp.MustCompile("/v1/projects/[a-z0-9-]+/builds/([a-z0-9-]+)") +) + +func main() { + ctx := context.Background() + projectID, err := metadata.ProjectID() + if err != nil { + log.Fatalf("metadata.ProjectID: %v", err) + } + ds, err := datastore.NewClient(ctx, projectID) + if err != nil { + log.Fatalf("datastore.NewClient: %v", err) + } + + http.Handle("/", &server{ + info: log.New(os.Stdout, "INFO ", 0), + error: log.New(os.Stderr, "ERROR ", 0), + ds: ds, + }) + + log.Println("Starting...") + port := os.Getenv("PORT") + if port == "" { + port = "8080" + log.Printf("Defaulting to port %s", port) + } + log.Printf("Listening on port %s", port) + log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil)) +} + +type server struct { + info, error *log.Logger + ds *datastore.Client +} + +func extractPath(path string, re *regexp.Regexp) string { + found := re.FindStringSubmatch(path) + if len(found) < 2 { + return "" + } + return found[1] +} + +func extractToken(r *http.Request) string { + hdr := r.Header.Get("Authorization") + if strings.HasPrefix(hdr, "Bearer ") { + return strings.TrimPrefix(hdr, "Bearer ") + } + return r.URL.Query().Get("access_token") +} + +func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + s.info.Println("handler:", r.Method, r.URL) + projectID := extractPath(r.URL.Path, projectRE) + if projectID == "" { + http.Error(w, "missing project", http.StatusBadRequest) + return + } + buildID := extractPath(r.URL.Path, buildRE) + + switch { + case r.Method == http.MethodGet && buildID != "": + s.getBuild(w, r, buildID) + case r.Method == http.MethodPost && buildID == "": + s.createBuild(w, r, projectID) + default: + http.Error(w, "not found", http.StatusNotFound) + } +} + +func (s *server) getBuild(w http.ResponseWriter, r *http.Request, buildID string) { + io.Copy(w, bytes.NewReader(s.get(buildID))) +} + +func (s *server) createBuild(w http.ResponseWriter, r *http.Request, projectID string) { + start := time.Now() + tok := extractToken(r) + if tok == "" { + http.Error(w, "bad auth", http.StatusUnauthorized) + return + } + + defer r.Body.Close() + var req gcb.Build + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + s.error.Printf("json.Decode: %v", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + req.Id = uuid.New().String() + req.ProjectId = projectID + req.CreateTime = start.Format(time.RFC3339Nano) + req.StartTime = req.CreateTime + req.LogsBucket = req.Source.StorageSource.Bucket // TODO: actually write logs somewhere. + + // Do the build... + if err := s.buildImage(&req, tok); err != nil { + req.Status = "FAILURE" + req.StatusDetail = err.Error() + } else { + req.Status = "SUCCESS" + } + req.FinishTime = time.Now().Format(time.RFC3339Nano) + + bomd, err := json.Marshal(&gcb.BuildOperationMetadata{Build: &req}) + if err != nil { + s.error.Printf("json.Encode: %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if err := json.NewEncoder(w).Encode(&gcb.Operation{ + Name: base64.StdEncoding.EncodeToString([]byte(req.Id)), + Done: true, + Metadata: bomd, + }); err != nil { + s.error.Printf("Encode: %v", err) + } + s.put(req) +} + +type e struct { + Bytes []byte `datastore:",noindex"` +} + +func (s *server) put(req gcb.Build) { + ctx := context.Background() // TODO + k := datastore.NameKey("Builds", req.Id, nil) + b, err := json.Marshal(req) + if err != nil { + s.error.Printf("json.Marshal: %v", err) + return + } + if _, err := s.ds.Put(ctx, k, &e{b}); err != nil { + s.error.Printf("datastore.Put: %v", err) + } +} + +func (s *server) get(id string) []byte { + ctx := context.Background() // TODO + k := datastore.NameKey("Builds", id, nil) + var e e + if err := s.ds.Get(ctx, k, &e); err != nil { + s.error.Printf("datastore.Get: %v", err) + } + return e.Bytes +} + +func (s *server) buildImage(req *gcb.Build, tok string) error { + // Validate request. + if err := s.validate(req); err != nil { + return err + } + + // Prepare workspace. + src, layers, err := s.prepareWorkspace(tok) + if err != nil { + return err + } + // Clean up workspace. + defer func() { + for _, path := range []string{ + src, layers, os.Getenv("HOME"), + } { + if err := os.RemoveAll(path); err != nil { + s.error.Printf("RemoveAll(%q): %v", path, err) + } + } + os.Setenv("HOME", "/home/") + }() + + // Fetch, detect and build image. + if err := s.fetchAndBuild(src, layers, tok, req); err != nil { + return err + } + + // Get the digest of the image we just pushed. + if img, err := s.getImage(req.Images[0]); err != nil { + return err + } else { + d, err := img.Digest() + if err != nil { + return err + } + req.Results = &gcb.Results{ + Images: []*gcb.BuiltImage{{ + Name: req.Images[0], + Digest: d.String(), + }}, + } + } + return nil +} + +func (s *server) validate(req *gcb.Build) error { + if len(req.Images) != 1 { + return errors.New("must request exactly one image") + } + if req.Source.StorageSource.Bucket == "" || + req.Source.StorageSource.Object == "" { + return errors.New("must request bucket and object") + } + return nil +} + +func (s *server) prepareWorkspace(tok string) (string, string, error) { + // Create and set $HOME. + home, err := ioutil.TempDir("", "") + if err != nil { + return "", "", err + } + os.Setenv("HOME", home) + + // Write Docker config. + auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("oauth2accesstoken:%s", tok))) + configJSON := fmt.Sprintf(`{ + "auths": { + "https://gcr.io": { + "auth": %q + } + } +}`, auth) + if err := run.Do(s.info.Writer(), "mkdir -p $HOME/.docker/ && cat << EOF > $HOME/.docker/config.json\n"+string(configJSON)+"\nEOF"); err != nil { + return "", "", err + } + + // Create tempdir to store app source. + src, err := ioutil.TempDir("", "") + if err != nil { + return "", "", err + } + + // Create layers dir. + layers, err := ioutil.TempDir("", "") + if err != nil { + return "", "", err + } + + return src, layers, nil +} + +func (s *server) fetchAndBuild(src, layers, tok string, req *gcb.Build) error { + image := req.Images[0] + source := fmt.Sprintf("https://storage.googleapis.com/%s/%s?access_token=%s", req.Source.StorageSource.Bucket, req.Source.StorageSource.Object, tok) + for _, cmd := range []string{ + fmt.Sprintf("chown -R %d:%d %s", os.Geteuid(), os.Getgid(), src), + fmt.Sprintf("chown -R %d:%d %s", os.Geteuid(), os.Getgid(), layers), + fmt.Sprintf("wget -qO- %s | tar xz -C %s", source, src), + fmt.Sprintf("cat $HOME/.docker/config.json"), + fmt.Sprintf("/lifecycle/detector -app=%s -group=%s/group.toml -plan=%s/plan.toml", src, layers, layers), + fmt.Sprintf("/lifecycle/analyzer -layers=%s -helpers=false -group=%s/group.toml %s", layers, layers, image), + fmt.Sprintf("/lifecycle/builder -layers=%s -app=%s -group=%s/group.toml -plan=%s/plan.toml", layers, src, layers, layers), + fmt.Sprintf("/lifecycle/exporter -layers=%s -helpers=false -app=%s -image=%s -group=%s/group.toml %s", layers, src, base, layers, image), + } { + if err := run.Do(s.info.Writer(), cmd); err != nil { + return fmt.Errorf("Running %q: %v", cmd, err) + } + } + return nil +} + +func (s *server) getImage(image string) (v1.Image, error) { + ref, err := name.NewTag(image, name.WeakValidation) + if err != nil { + return nil, err + } + return remote.Image(ref, remote.WithAuthFromKeychain(authn.DefaultKeychain)) +} diff --git a/deploy.sh b/deploy.sh index 0f8c907..29830ac 100755 --- a/deploy.sh +++ b/deploy.sh @@ -2,6 +2,13 @@ set -euxo pipefail +KO_DOCKER_REPO=gcr.io/kontainme ko publish -P ./cmd/api && \ +gcloud --project=kontainme beta run deploy api \ + --image=gcr.io/kontainme/github.com/imjasonh/kontain.me/cmd/api \ + --memory=2Gi \ + --concurrency=1 \ + --region=us-central1 + KO_DOCKER_REPO=gcr.io/kontainme ko publish -P ./cmd/app && \ gcloud --project=kontainme beta run deploy app \ --image=gcr.io/kontainme/github.com/imjasonh/kontain.me/cmd/app \ diff --git a/vendor/github.com/google/uuid/.travis.yml b/vendor/github.com/google/uuid/.travis.yml new file mode 100644 index 0000000..d8156a6 --- /dev/null +++ b/vendor/github.com/google/uuid/.travis.yml @@ -0,0 +1,9 @@ +language: go + +go: + - 1.4.3 + - 1.5.3 + - tip + +script: + - go test -v ./... diff --git a/vendor/github.com/google/uuid/CONTRIBUTING.md b/vendor/github.com/google/uuid/CONTRIBUTING.md new file mode 100644 index 0000000..04fdf09 --- /dev/null +++ b/vendor/github.com/google/uuid/CONTRIBUTING.md @@ -0,0 +1,10 @@ +# How to contribute + +We definitely welcome patches and contribution to this project! + +### Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +You may have already signed it for other Google projects. diff --git a/vendor/github.com/google/uuid/CONTRIBUTORS b/vendor/github.com/google/uuid/CONTRIBUTORS new file mode 100644 index 0000000..b4bb97f --- /dev/null +++ b/vendor/github.com/google/uuid/CONTRIBUTORS @@ -0,0 +1,9 @@ +Paul Borman +bmatsuo +shawnps +theory +jboverfelt +dsymonds +cd1 +wallclockbuilder +dansouza diff --git a/vendor/github.com/google/uuid/LICENSE b/vendor/github.com/google/uuid/LICENSE new file mode 100644 index 0000000..5dc6826 --- /dev/null +++ b/vendor/github.com/google/uuid/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md new file mode 100644 index 0000000..9d92c11 --- /dev/null +++ b/vendor/github.com/google/uuid/README.md @@ -0,0 +1,19 @@ +# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master) +The uuid package generates and inspects UUIDs based on +[RFC 4122](http://tools.ietf.org/html/rfc4122) +and DCE 1.1: Authentication and Security Services. + +This package is based on the github.com/pborman/uuid package (previously named +code.google.com/p/go-uuid). It differs from these earlier packages in that +a UUID is a 16 byte array rather than a byte slice. One loss due to this +change is the ability to represent an invalid UUID (vs a NIL UUID). + +###### Install +`go get github.com/google/uuid` + +###### Documentation +[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid) + +Full `go doc` style documentation for the package can be viewed online without +installing this package by using the GoDoc site here: +http://godoc.org/github.com/google/uuid diff --git a/vendor/github.com/google/uuid/dce.go b/vendor/github.com/google/uuid/dce.go new file mode 100644 index 0000000..fa820b9 --- /dev/null +++ b/vendor/github.com/google/uuid/dce.go @@ -0,0 +1,80 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "fmt" + "os" +) + +// A Domain represents a Version 2 domain +type Domain byte + +// Domain constants for DCE Security (Version 2) UUIDs. +const ( + Person = Domain(0) + Group = Domain(1) + Org = Domain(2) +) + +// NewDCESecurity returns a DCE Security (Version 2) UUID. +// +// The domain should be one of Person, Group or Org. +// On a POSIX system the id should be the users UID for the Person +// domain and the users GID for the Group. The meaning of id for +// the domain Org or on non-POSIX systems is site defined. +// +// For a given domain/id pair the same token may be returned for up to +// 7 minutes and 10 seconds. +func NewDCESecurity(domain Domain, id uint32) (UUID, error) { + uuid, err := NewUUID() + if err == nil { + uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2 + uuid[9] = byte(domain) + binary.BigEndian.PutUint32(uuid[0:], id) + } + return uuid, err +} + +// NewDCEPerson returns a DCE Security (Version 2) UUID in the person +// domain with the id returned by os.Getuid. +// +// NewDCESecurity(Person, uint32(os.Getuid())) +func NewDCEPerson() (UUID, error) { + return NewDCESecurity(Person, uint32(os.Getuid())) +} + +// NewDCEGroup returns a DCE Security (Version 2) UUID in the group +// domain with the id returned by os.Getgid. +// +// NewDCESecurity(Group, uint32(os.Getgid())) +func NewDCEGroup() (UUID, error) { + return NewDCESecurity(Group, uint32(os.Getgid())) +} + +// Domain returns the domain for a Version 2 UUID. Domains are only defined +// for Version 2 UUIDs. +func (uuid UUID) Domain() Domain { + return Domain(uuid[9]) +} + +// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2 +// UUIDs. +func (uuid UUID) ID() uint32 { + return binary.BigEndian.Uint32(uuid[0:4]) +} + +func (d Domain) String() string { + switch d { + case Person: + return "Person" + case Group: + return "Group" + case Org: + return "Org" + } + return fmt.Sprintf("Domain%d", int(d)) +} diff --git a/vendor/github.com/google/uuid/doc.go b/vendor/github.com/google/uuid/doc.go new file mode 100644 index 0000000..5b8a4b9 --- /dev/null +++ b/vendor/github.com/google/uuid/doc.go @@ -0,0 +1,12 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package uuid generates and inspects UUIDs. +// +// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security +// Services. +// +// A UUID is a 16 byte (128 bit) array. UUIDs may be used as keys to +// maps or compared directly. +package uuid diff --git a/vendor/github.com/google/uuid/go.mod b/vendor/github.com/google/uuid/go.mod new file mode 100644 index 0000000..fc84cd7 --- /dev/null +++ b/vendor/github.com/google/uuid/go.mod @@ -0,0 +1 @@ +module github.com/google/uuid diff --git a/vendor/github.com/google/uuid/hash.go b/vendor/github.com/google/uuid/hash.go new file mode 100644 index 0000000..b174616 --- /dev/null +++ b/vendor/github.com/google/uuid/hash.go @@ -0,0 +1,53 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "crypto/md5" + "crypto/sha1" + "hash" +) + +// Well known namespace IDs and UUIDs +var ( + NameSpaceDNS = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceURL = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceOID = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")) + NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")) + Nil UUID // empty UUID, all zeros +) + +// NewHash returns a new UUID derived from the hash of space concatenated with +// data generated by h. The hash should be at least 16 byte in length. The +// first 16 bytes of the hash are used to form the UUID. The version of the +// UUID will be the lower 4 bits of version. NewHash is used to implement +// NewMD5 and NewSHA1. +func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID { + h.Reset() + h.Write(space[:]) + h.Write(data) + s := h.Sum(nil) + var uuid UUID + copy(uuid[:], s) + uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4) + uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant + return uuid +} + +// NewMD5 returns a new MD5 (Version 3) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(md5.New(), space, data, 3) +func NewMD5(space UUID, data []byte) UUID { + return NewHash(md5.New(), space, data, 3) +} + +// NewSHA1 returns a new SHA1 (Version 5) UUID based on the +// supplied name space and data. It is the same as calling: +// +// NewHash(sha1.New(), space, data, 5) +func NewSHA1(space UUID, data []byte) UUID { + return NewHash(sha1.New(), space, data, 5) +} diff --git a/vendor/github.com/google/uuid/marshal.go b/vendor/github.com/google/uuid/marshal.go new file mode 100644 index 0000000..7f9e0c6 --- /dev/null +++ b/vendor/github.com/google/uuid/marshal.go @@ -0,0 +1,37 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "fmt" + +// MarshalText implements encoding.TextMarshaler. +func (uuid UUID) MarshalText() ([]byte, error) { + var js [36]byte + encodeHex(js[:], uuid) + return js[:], nil +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (uuid *UUID) UnmarshalText(data []byte) error { + id, err := ParseBytes(data) + if err == nil { + *uuid = id + } + return err +} + +// MarshalBinary implements encoding.BinaryMarshaler. +func (uuid UUID) MarshalBinary() ([]byte, error) { + return uuid[:], nil +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler. +func (uuid *UUID) UnmarshalBinary(data []byte) error { + if len(data) != 16 { + return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) + } + copy(uuid[:], data) + return nil +} diff --git a/vendor/github.com/google/uuid/node.go b/vendor/github.com/google/uuid/node.go new file mode 100644 index 0000000..d651a2b --- /dev/null +++ b/vendor/github.com/google/uuid/node.go @@ -0,0 +1,90 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "sync" +) + +var ( + nodeMu sync.Mutex + ifname string // name of interface being used + nodeID [6]byte // hardware for version 1 UUIDs + zeroID [6]byte // nodeID with only 0's +) + +// NodeInterface returns the name of the interface from which the NodeID was +// derived. The interface "user" is returned if the NodeID was set by +// SetNodeID. +func NodeInterface() string { + defer nodeMu.Unlock() + nodeMu.Lock() + return ifname +} + +// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs. +// If name is "" then the first usable interface found will be used or a random +// Node ID will be generated. If a named interface cannot be found then false +// is returned. +// +// SetNodeInterface never fails when name is "". +func SetNodeInterface(name string) bool { + defer nodeMu.Unlock() + nodeMu.Lock() + return setNodeInterface(name) +} + +func setNodeInterface(name string) bool { + iname, addr := getHardwareInterface(name) // null implementation for js + if iname != "" && addr != nil { + ifname = iname + copy(nodeID[:], addr) + return true + } + + // We found no interfaces with a valid hardware address. If name + // does not specify a specific interface generate a random Node ID + // (section 4.1.6) + if name == "" { + ifname = "random" + randomBits(nodeID[:]) + return true + } + return false +} + +// NodeID returns a slice of a copy of the current Node ID, setting the Node ID +// if not already set. +func NodeID() []byte { + defer nodeMu.Unlock() + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + nid := nodeID + return nid[:] +} + +// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes +// of id are used. If id is less than 6 bytes then false is returned and the +// Node ID is not set. +func SetNodeID(id []byte) bool { + if len(id) < 6 { + return false + } + defer nodeMu.Unlock() + nodeMu.Lock() + copy(nodeID[:], id) + ifname = "user" + return true +} + +// NodeID returns the 6 byte node id encoded in uuid. It returns nil if uuid is +// not valid. The NodeID is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) NodeID() []byte { + var node [6]byte + copy(node[:], uuid[10:]) + return node[:] +} diff --git a/vendor/github.com/google/uuid/node_js.go b/vendor/github.com/google/uuid/node_js.go new file mode 100644 index 0000000..24b78ed --- /dev/null +++ b/vendor/github.com/google/uuid/node_js.go @@ -0,0 +1,12 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js + +package uuid + +// getHardwareInterface returns nil values for the JS version of the code. +// This remvoves the "net" dependency, because it is not used in the browser. +// Using the "net" library inflates the size of the transpiled JS code by 673k bytes. +func getHardwareInterface(name string) (string, []byte) { return "", nil } diff --git a/vendor/github.com/google/uuid/node_net.go b/vendor/github.com/google/uuid/node_net.go new file mode 100644 index 0000000..0cbbcdd --- /dev/null +++ b/vendor/github.com/google/uuid/node_net.go @@ -0,0 +1,33 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js + +package uuid + +import "net" + +var interfaces []net.Interface // cached list of interfaces + +// getHardwareInterface returns the name and hardware address of interface name. +// If name is "" then the name and hardware address of one of the system's +// interfaces is returned. If no interfaces are found (name does not exist or +// there are no interfaces) then "", nil is returned. +// +// Only addresses of at least 6 bytes are returned. +func getHardwareInterface(name string) (string, []byte) { + if interfaces == nil { + var err error + interfaces, err = net.Interfaces() + if err != nil { + return "", nil + } + } + for _, ifs := range interfaces { + if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { + return ifs.Name, ifs.HardwareAddr + } + } + return "", nil +} diff --git a/vendor/github.com/google/uuid/sql.go b/vendor/github.com/google/uuid/sql.go new file mode 100644 index 0000000..f326b54 --- /dev/null +++ b/vendor/github.com/google/uuid/sql.go @@ -0,0 +1,59 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements sql.Scanner so UUIDs can be read from databases transparently +// Currently, database types that map to string and []byte are supported. Please +// consult database-specific driver documentation for matching types. +func (uuid *UUID) Scan(src interface{}) error { + switch src := src.(type) { + case nil: + return nil + + case string: + // if an empty UUID comes from a table, we return a null UUID + if src == "" { + return nil + } + + // see Parse for required string format + u, err := Parse(src) + if err != nil { + return fmt.Errorf("Scan: %v", err) + } + + *uuid = u + + case []byte: + // if an empty UUID comes from a table, we return a null UUID + if len(src) == 0 { + return nil + } + + // assumes a simple slice of bytes if 16 bytes + // otherwise attempts to parse + if len(src) != 16 { + return uuid.Scan(string(src)) + } + copy((*uuid)[:], src) + + default: + return fmt.Errorf("Scan: unable to scan type %T into UUID", src) + } + + return nil +} + +// Value implements sql.Valuer so that UUIDs can be written to databases +// transparently. Currently, UUIDs map to strings. Please consult +// database-specific driver documentation for matching types. +func (uuid UUID) Value() (driver.Value, error) { + return uuid.String(), nil +} diff --git a/vendor/github.com/google/uuid/time.go b/vendor/github.com/google/uuid/time.go new file mode 100644 index 0000000..e6ef06c --- /dev/null +++ b/vendor/github.com/google/uuid/time.go @@ -0,0 +1,123 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" + "sync" + "time" +) + +// A Time represents a time as the number of 100's of nanoseconds since 15 Oct +// 1582. +type Time int64 + +const ( + lillian = 2299160 // Julian day of 15 Oct 1582 + unix = 2440587 // Julian day of 1 Jan 1970 + epoch = unix - lillian // Days between epochs + g1582 = epoch * 86400 // seconds between epochs + g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs +) + +var ( + timeMu sync.Mutex + lasttime uint64 // last time we returned + clockSeq uint16 // clock sequence for this run + + timeNow = time.Now // for testing +) + +// UnixTime converts t the number of seconds and nanoseconds using the Unix +// epoch of 1 Jan 1970. +func (t Time) UnixTime() (sec, nsec int64) { + sec = int64(t - g1582ns100) + nsec = (sec % 10000000) * 100 + sec /= 10000000 + return sec, nsec +} + +// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and +// clock sequence as well as adjusting the clock sequence as needed. An error +// is returned if the current time cannot be determined. +func GetTime() (Time, uint16, error) { + defer timeMu.Unlock() + timeMu.Lock() + return getTime() +} + +func getTime() (Time, uint16, error) { + t := timeNow() + + // If we don't have a clock sequence already, set one. + if clockSeq == 0 { + setClockSequence(-1) + } + now := uint64(t.UnixNano()/100) + g1582ns100 + + // If time has gone backwards with this clock sequence then we + // increment the clock sequence + if now <= lasttime { + clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000 + } + lasttime = now + return Time(now), clockSeq, nil +} + +// ClockSequence returns the current clock sequence, generating one if not +// already set. The clock sequence is only used for Version 1 UUIDs. +// +// The uuid package does not use global static storage for the clock sequence or +// the last time a UUID was generated. Unless SetClockSequence is used, a new +// random clock sequence is generated the first time a clock sequence is +// requested by ClockSequence, GetTime, or NewUUID. (section 4.2.1.1) +func ClockSequence() int { + defer timeMu.Unlock() + timeMu.Lock() + return clockSequence() +} + +func clockSequence() int { + if clockSeq == 0 { + setClockSequence(-1) + } + return int(clockSeq & 0x3fff) +} + +// SetClockSequence sets the clock sequence to the lower 14 bits of seq. Setting to +// -1 causes a new sequence to be generated. +func SetClockSequence(seq int) { + defer timeMu.Unlock() + timeMu.Lock() + setClockSequence(seq) +} + +func setClockSequence(seq int) { + if seq == -1 { + var b [2]byte + randomBits(b[:]) // clock sequence + seq = int(b[0])<<8 | int(b[1]) + } + oldSeq := clockSeq + clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant + if oldSeq != clockSeq { + lasttime = 0 + } +} + +// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in +// uuid. The time is only defined for version 1 and 2 UUIDs. +func (uuid UUID) Time() Time { + time := int64(binary.BigEndian.Uint32(uuid[0:4])) + time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32 + time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48 + return Time(time) +} + +// ClockSequence returns the clock sequence encoded in uuid. +// The clock sequence is only well defined for version 1 and 2 UUIDs. +func (uuid UUID) ClockSequence() int { + return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff +} diff --git a/vendor/github.com/google/uuid/util.go b/vendor/github.com/google/uuid/util.go new file mode 100644 index 0000000..5ea6c73 --- /dev/null +++ b/vendor/github.com/google/uuid/util.go @@ -0,0 +1,43 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "io" +) + +// randomBits completely fills slice b with random data. +func randomBits(b []byte) { + if _, err := io.ReadFull(rander, b); err != nil { + panic(err.Error()) // rand should never fail + } +} + +// xvalues returns the value of a byte as a hexadecimal digit or 255. +var xvalues = [256]byte{ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +} + +// xtob converts hex characters x1 and x2 into a byte. +func xtob(x1, x2 byte) (byte, bool) { + b1 := xvalues[x1] + b2 := xvalues[x2] + return (b1 << 4) | b2, b1 != 255 && b2 != 255 +} diff --git a/vendor/github.com/google/uuid/uuid.go b/vendor/github.com/google/uuid/uuid.go new file mode 100644 index 0000000..524404c --- /dev/null +++ b/vendor/github.com/google/uuid/uuid.go @@ -0,0 +1,245 @@ +// Copyright 2018 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "errors" + "fmt" + "io" + "strings" +) + +// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC +// 4122. +type UUID [16]byte + +// A Version represents a UUID's version. +type Version byte + +// A Variant represents a UUID's variant. +type Variant byte + +// Constants returned by Variant. +const ( + Invalid = Variant(iota) // Invalid UUID + RFC4122 // The variant specified in RFC4122 + Reserved // Reserved, NCS backward compatibility. + Microsoft // Reserved, Microsoft Corporation backward compatibility. + Future // Reserved for future definition. +) + +var rander = rand.Reader // random function + +// Parse decodes s into a UUID or returns an error. Both the standard UUID +// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the +// Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex +// encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. +func Parse(s string) (UUID, error) { + var uuid UUID + switch len(s) { + // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36: + + // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: + if strings.ToLower(s[:9]) != "urn:uuid:" { + return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) + } + s = s[9:] + + // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + case 36 + 2: + s = s[1:] + + // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + case 32: + var ok bool + for i := range uuid { + uuid[i], ok = xtob(s[i*2], s[i*2+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, fmt.Errorf("invalid UUID length: %d", len(s)) + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(s[x], s[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// ParseBytes is like Parse, except it parses a byte slice instead of a string. +func ParseBytes(b []byte) (UUID, error) { + var uuid UUID + switch len(b) { + case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { + return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) + } + b = b[9:] + case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + b = b[1:] + case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + var ok bool + for i := 0; i < 32; i += 2 { + uuid[i/2], ok = xtob(b[i], b[i+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + } + return uuid, nil + default: + return uuid, fmt.Errorf("invalid UUID length: %d", len(b)) + } + // s is now at least 36 bytes long + // it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' { + return uuid, errors.New("invalid UUID format") + } + for i, x := range [16]int{ + 0, 2, 4, 6, + 9, 11, + 14, 16, + 19, 21, + 24, 26, 28, 30, 32, 34} { + v, ok := xtob(b[x], b[x+1]) + if !ok { + return uuid, errors.New("invalid UUID format") + } + uuid[i] = v + } + return uuid, nil +} + +// MustParse is like Parse but panics if the string cannot be parsed. +// It simplifies safe initialization of global variables holding compiled UUIDs. +func MustParse(s string) UUID { + uuid, err := Parse(s) + if err != nil { + panic(`uuid: Parse(` + s + `): ` + err.Error()) + } + return uuid +} + +// FromBytes creates a new UUID from a byte slice. Returns an error if the slice +// does not have a length of 16. The bytes are copied from the slice. +func FromBytes(b []byte) (uuid UUID, err error) { + err = uuid.UnmarshalBinary(b) + return uuid, err +} + +// Must returns uuid if err is nil and panics otherwise. +func Must(uuid UUID, err error) UUID { + if err != nil { + panic(err) + } + return uuid +} + +// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +// , or "" if uuid is invalid. +func (uuid UUID) String() string { + var buf [36]byte + encodeHex(buf[:], uuid) + return string(buf[:]) +} + +// URN returns the RFC 2141 URN form of uuid, +// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, or "" if uuid is invalid. +func (uuid UUID) URN() string { + var buf [36 + 9]byte + copy(buf[:], "urn:uuid:") + encodeHex(buf[9:], uuid) + return string(buf[:]) +} + +func encodeHex(dst []byte, uuid UUID) { + hex.Encode(dst, uuid[:4]) + dst[8] = '-' + hex.Encode(dst[9:13], uuid[4:6]) + dst[13] = '-' + hex.Encode(dst[14:18], uuid[6:8]) + dst[18] = '-' + hex.Encode(dst[19:23], uuid[8:10]) + dst[23] = '-' + hex.Encode(dst[24:], uuid[10:]) +} + +// Variant returns the variant encoded in uuid. +func (uuid UUID) Variant() Variant { + switch { + case (uuid[8] & 0xc0) == 0x80: + return RFC4122 + case (uuid[8] & 0xe0) == 0xc0: + return Microsoft + case (uuid[8] & 0xe0) == 0xe0: + return Future + default: + return Reserved + } +} + +// Version returns the version of uuid. +func (uuid UUID) Version() Version { + return Version(uuid[6] >> 4) +} + +func (v Version) String() string { + if v > 15 { + return fmt.Sprintf("BAD_VERSION_%d", v) + } + return fmt.Sprintf("VERSION_%d", v) +} + +func (v Variant) String() string { + switch v { + case RFC4122: + return "RFC4122" + case Reserved: + return "Reserved" + case Microsoft: + return "Microsoft" + case Future: + return "Future" + case Invalid: + return "Invalid" + } + return fmt.Sprintf("BadVariant%d", int(v)) +} + +// SetRand sets the random number generator to r, which implements io.Reader. +// If r.Read returns an error when the package requests random data then +// a panic will be issued. +// +// Calling SetRand with nil sets the random number generator to the default +// generator. +func SetRand(r io.Reader) { + if r == nil { + rander = rand.Reader + return + } + rander = r +} diff --git a/vendor/github.com/google/uuid/version1.go b/vendor/github.com/google/uuid/version1.go new file mode 100644 index 0000000..199a1ac --- /dev/null +++ b/vendor/github.com/google/uuid/version1.go @@ -0,0 +1,44 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "encoding/binary" +) + +// NewUUID returns a Version 1 UUID based on the current NodeID and clock +// sequence, and the current time. If the NodeID has not been set by SetNodeID +// or SetNodeInterface then it will be set automatically. If the NodeID cannot +// be set NewUUID returns nil. If clock sequence has not been set by +// SetClockSequence then it will be set automatically. If GetTime fails to +// return the current NewUUID returns nil and an error. +// +// In most cases, New should be used. +func NewUUID() (UUID, error) { + nodeMu.Lock() + if nodeID == zeroID { + setNodeInterface("") + } + nodeMu.Unlock() + + var uuid UUID + now, seq, err := GetTime() + if err != nil { + return uuid, err + } + + timeLow := uint32(now & 0xffffffff) + timeMid := uint16((now >> 32) & 0xffff) + timeHi := uint16((now >> 48) & 0x0fff) + timeHi |= 0x1000 // Version 1 + + binary.BigEndian.PutUint32(uuid[0:], timeLow) + binary.BigEndian.PutUint16(uuid[4:], timeMid) + binary.BigEndian.PutUint16(uuid[6:], timeHi) + binary.BigEndian.PutUint16(uuid[8:], seq) + copy(uuid[10:], nodeID[:]) + + return uuid, nil +} diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go new file mode 100644 index 0000000..84af91c --- /dev/null +++ b/vendor/github.com/google/uuid/version4.go @@ -0,0 +1,38 @@ +// Copyright 2016 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "io" + +// New creates a new random UUID or panics. New is equivalent to +// the expression +// +// uuid.Must(uuid.NewRandom()) +func New() UUID { + return Must(NewRandom()) +} + +// NewRandom returns a Random (Version 4) UUID. +// +// The strength of the UUIDs is based on the strength of the crypto/rand +// package. +// +// A note about uniqueness derived from the UUID Wikipedia entry: +// +// Randomly generated UUIDs have 122 random bits. One's annual risk of being +// hit by a meteorite is estimated to be one chance in 17 billion, that +// means the probability is about 0.00000000006 (6 × 10−11), +// equivalent to the odds of creating a few tens of trillions of UUIDs in a +// year and having one duplicate. +func NewRandom() (UUID, error) { + var uuid UUID + _, err := io.ReadFull(rander, uuid[:]) + if err != nil { + return Nil, err + } + uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 + uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 + return uuid, nil +} diff --git a/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json b/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json new file mode 100644 index 0000000..81077eb --- /dev/null +++ b/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-api.json @@ -0,0 +1,1522 @@ +{ + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + } + } + } + }, + "basePath": "", + "baseUrl": "https://cloudbuild.googleapis.com/", + "batchPath": "batch", + "canonicalName": "Cloud Build", + "description": "Creates and manages builds on Google Cloud Platform.", + "discoveryVersion": "v1", + "documentationLink": "https://cloud.google.com/cloud-build/docs/", + "fullyEncodeReservedExpansion": true, + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "id": "cloudbuild:v1", + "kind": "discovery#restDescription", + "name": "cloudbuild", + "ownerDomain": "google.com", + "ownerName": "Google", + "parameters": { + "$.xgafv": { + "description": "V1 error format.", + "enum": [ + "1", + "2" + ], + "enumDescriptions": [ + "v1 error format", + "v2 error format" + ], + "location": "query", + "type": "string" + }, + "access_token": { + "description": "OAuth access token.", + "location": "query", + "type": "string" + }, + "alt": { + "default": "json", + "description": "Data format for response.", + "enum": [ + "json", + "media", + "proto" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Media download with context-dependent Content-Type", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query", + "type": "string" + }, + "callback": { + "description": "JSONP", + "location": "query", + "type": "string" + }, + "fields": { + "description": "Selector specifying which fields to include in a partial response.", + "location": "query", + "type": "string" + }, + "key": { + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query", + "type": "string" + }, + "oauth_token": { + "description": "OAuth 2.0 token for the current user.", + "location": "query", + "type": "string" + }, + "prettyPrint": { + "default": "true", + "description": "Returns response with indentations and line breaks.", + "location": "query", + "type": "boolean" + }, + "quotaUser": { + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.", + "location": "query", + "type": "string" + }, + "uploadType": { + "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").", + "location": "query", + "type": "string" + }, + "upload_protocol": { + "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").", + "location": "query", + "type": "string" + } + }, + "protocol": "rest", + "resources": { + "operations": { + "methods": { + "cancel": { + "description": "Starts asynchronous cancellation on a long-running operation. The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`. Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.", + "flatPath": "v1/operations/{operationsId}:cancel", + "httpMethod": "POST", + "id": "cloudbuild.operations.cancel", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource to be cancelled.", + "location": "path", + "pattern": "^operations/.+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:cancel", + "request": { + "$ref": "CancelOperationRequest" + }, + "response": { + "$ref": "Empty" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Gets the latest state of a long-running operation. Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.", + "flatPath": "v1/operations/{operationsId}", + "httpMethod": "GET", + "id": "cloudbuild.operations.get", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "The name of the operation resource.", + "location": "path", + "pattern": "^operations/.+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`. To\noverride the binding, API services can add a binding such as\n`\"/v1/{name=users/*}/operations\"` to their service configuration.\nFor backwards compatibility, the default name includes the operations\ncollection id, however overriding users must ensure the name binding\nis the parent resource, without the operations collection id.", + "flatPath": "v1/operations", + "httpMethod": "GET", + "id": "cloudbuild.operations.list", + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "description": "The standard list filter.", + "location": "query", + "type": "string" + }, + "name": { + "description": "The name of the operation's parent resource.", + "location": "path", + "pattern": "^operations$", + "required": true, + "type": "string" + }, + "pageSize": { + "description": "The standard list page size.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "The standard list page token.", + "location": "query", + "type": "string" + } + }, + "path": "v1/{+name}", + "response": { + "$ref": "ListOperationsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "projects": { + "resources": { + "builds": { + "methods": { + "cancel": { + "description": "Cancels a build in progress.", + "flatPath": "v1/projects/{projectId}/builds/{id}:cancel", + "httpMethod": "POST", + "id": "cloudbuild.projects.builds.cancel", + "parameterOrder": [ + "projectId", + "id" + ], + "parameters": { + "id": { + "description": "ID of the build.", + "location": "path", + "required": true, + "type": "string" + }, + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/builds/{id}:cancel", + "request": { + "$ref": "CancelBuildRequest" + }, + "response": { + "$ref": "Build" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "create": { + "description": "Starts a build with the specified configuration.\n\nThis method returns a long-running `Operation`, which includes the build\nID. Pass the build ID to `GetBuild` to determine the build status (such as\n`SUCCESS` or `FAILURE`).", + "flatPath": "v1/projects/{projectId}/builds", + "httpMethod": "POST", + "id": "cloudbuild.projects.builds.create", + "parameterOrder": [ + "projectId" + ], + "parameters": { + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/builds", + "request": { + "$ref": "Build" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Returns information about a previously requested build.\n\nThe `Build` that is returned includes its status (such as `SUCCESS`,\n`FAILURE`, or `WORKING`), and timing information.", + "flatPath": "v1/projects/{projectId}/builds/{id}", + "httpMethod": "GET", + "id": "cloudbuild.projects.builds.get", + "parameterOrder": [ + "projectId", + "id" + ], + "parameters": { + "id": { + "description": "ID of the build.", + "location": "path", + "required": true, + "type": "string" + }, + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/builds/{id}", + "response": { + "$ref": "Build" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists previously requested builds.\n\nPreviously requested builds may still be in-progress, or may have finished\nsuccessfully or unsuccessfully.", + "flatPath": "v1/projects/{projectId}/builds", + "httpMethod": "GET", + "id": "cloudbuild.projects.builds.list", + "parameterOrder": [ + "projectId" + ], + "parameters": { + "filter": { + "description": "The raw filter text to constrain the results.", + "location": "query", + "type": "string" + }, + "pageSize": { + "description": "Number of results to return in the list.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "Token to provide to skip to a particular spot in the list.", + "location": "query", + "type": "string" + }, + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/builds", + "response": { + "$ref": "ListBuildsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "retry": { + "description": "Creates a new build based on the specified build.\n\nThis method creates a new build using the original build request, which may\nor may not result in an identical build.\n\nFor triggered builds:\n\n* Triggered builds resolve to a precise revision; therefore a retry of a\ntriggered build will result in a build that uses the same revision.\n\nFor non-triggered builds that specify `RepoSource`:\n\n* If the original build built from the tip of a branch, the retried build\nwill build from the tip of that branch, which may not be the same revision\nas the original build.\n* If the original build specified a commit sha or revision ID, the retried\nbuild will use the identical source.\n\nFor builds that specify `StorageSource`:\n\n* If the original build pulled source from Google Cloud Storage without\nspecifying the generation of the object, the new build will use the current\nobject, which may be different from the original build source.\n* If the original build pulled source from Cloud Storage and specified the\ngeneration of the object, the new build will attempt to use the same\nobject, which may or may not be available depending on the bucket's\nlifecycle management settings.", + "flatPath": "v1/projects/{projectId}/builds/{id}:retry", + "httpMethod": "POST", + "id": "cloudbuild.projects.builds.retry", + "parameterOrder": [ + "projectId", + "id" + ], + "parameters": { + "id": { + "description": "Build ID of the original build.", + "location": "path", + "required": true, + "type": "string" + }, + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/builds/{id}:retry", + "request": { + "$ref": "RetryBuildRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "triggers": { + "methods": { + "create": { + "description": "Creates a new `BuildTrigger`.\n\nThis API is experimental.", + "flatPath": "v1/projects/{projectId}/triggers", + "httpMethod": "POST", + "id": "cloudbuild.projects.triggers.create", + "parameterOrder": [ + "projectId" + ], + "parameters": { + "projectId": { + "description": "ID of the project for which to configure automatic builds.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers", + "request": { + "$ref": "BuildTrigger" + }, + "response": { + "$ref": "BuildTrigger" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "delete": { + "description": "Deletes a `BuildTrigger` by its project ID and trigger ID.\n\nThis API is experimental.", + "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + "httpMethod": "DELETE", + "id": "cloudbuild.projects.triggers.delete", + "parameterOrder": [ + "projectId", + "triggerId" + ], + "parameters": { + "projectId": { + "description": "ID of the project that owns the trigger.", + "location": "path", + "required": true, + "type": "string" + }, + "triggerId": { + "description": "ID of the `BuildTrigger` to delete.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers/{triggerId}", + "response": { + "$ref": "Empty" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "description": "Returns information about a `BuildTrigger`.\n\nThis API is experimental.", + "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + "httpMethod": "GET", + "id": "cloudbuild.projects.triggers.get", + "parameterOrder": [ + "projectId", + "triggerId" + ], + "parameters": { + "projectId": { + "description": "ID of the project that owns the trigger.", + "location": "path", + "required": true, + "type": "string" + }, + "triggerId": { + "description": "ID of the `BuildTrigger` to get.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers/{triggerId}", + "response": { + "$ref": "BuildTrigger" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "description": "Lists existing `BuildTrigger`s.\n\nThis API is experimental.", + "flatPath": "v1/projects/{projectId}/triggers", + "httpMethod": "GET", + "id": "cloudbuild.projects.triggers.list", + "parameterOrder": [ + "projectId" + ], + "parameters": { + "pageSize": { + "description": "Number of results to return in the list.", + "format": "int32", + "location": "query", + "type": "integer" + }, + "pageToken": { + "description": "Token to provide to skip to a particular spot in the list.", + "location": "query", + "type": "string" + }, + "projectId": { + "description": "ID of the project for which to list BuildTriggers.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers", + "response": { + "$ref": "ListBuildTriggersResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "description": "Updates a `BuildTrigger` by its project ID and trigger ID.\n\nThis API is experimental.", + "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + "httpMethod": "PATCH", + "id": "cloudbuild.projects.triggers.patch", + "parameterOrder": [ + "projectId", + "triggerId" + ], + "parameters": { + "projectId": { + "description": "ID of the project that owns the trigger.", + "location": "path", + "required": true, + "type": "string" + }, + "triggerId": { + "description": "ID of the `BuildTrigger` to update.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers/{triggerId}", + "request": { + "$ref": "BuildTrigger" + }, + "response": { + "$ref": "BuildTrigger" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "run": { + "description": "Runs a `BuildTrigger` at a particular source revision.", + "flatPath": "v1/projects/{projectId}/triggers/{triggerId}:run", + "httpMethod": "POST", + "id": "cloudbuild.projects.triggers.run", + "parameterOrder": [ + "projectId", + "triggerId" + ], + "parameters": { + "projectId": { + "description": "ID of the project.", + "location": "path", + "required": true, + "type": "string" + }, + "triggerId": { + "description": "ID of the trigger.", + "location": "path", + "required": true, + "type": "string" + } + }, + "path": "v1/projects/{projectId}/triggers/{triggerId}:run", + "request": { + "$ref": "RepoSource" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + } + }, + "revision": "20190323", + "rootUrl": "https://cloudbuild.googleapis.com/", + "schemas": { + "ArtifactObjects": { + "description": "Files in the workspace to upload to Cloud Storage upon successful\ncompletion of all build steps.", + "id": "ArtifactObjects", + "properties": { + "location": { + "description": "Cloud Storage bucket and optional object path, in the form\n\"gs://bucket/path/to/somewhere/\". (see [Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).\n\nFiles in the workspace matching any path pattern will be uploaded to\nCloud Storage with this location as a prefix.", + "type": "string" + }, + "paths": { + "description": "Path globs used to match files in the build's workspace.", + "items": { + "type": "string" + }, + "type": "array" + }, + "timing": { + "$ref": "TimeSpan", + "description": "Output only. Stores timing information for pushing all artifact objects." + } + }, + "type": "object" + }, + "ArtifactResult": { + "description": "An artifact that was uploaded during a build. This\nis a single record in the artifact manifest JSON file.", + "id": "ArtifactResult", + "properties": { + "fileHash": { + "description": "The file hash of the artifact.", + "items": { + "$ref": "FileHashes" + }, + "type": "array" + }, + "location": { + "description": "The path of an artifact in a Google Cloud Storage bucket, with the\ngeneration number. For example,\n`gs://mybucket/path/to/output.jar#generation`.", + "type": "string" + } + }, + "type": "object" + }, + "Artifacts": { + "description": "Artifacts produced by a build that should be uploaded upon\nsuccessful completion of all build steps.", + "id": "Artifacts", + "properties": { + "images": { + "description": "A list of images to be pushed upon the successful completion of all build\nsteps.\n\nThe images will be pushed using the builder service account's credentials.\n\nThe digests of the pushed images will be stored in the Build resource's\nresults field.\n\nIf any of the images fail to be pushed, the build is marked FAILURE.", + "items": { + "type": "string" + }, + "type": "array" + }, + "objects": { + "$ref": "ArtifactObjects", + "description": "A list of objects to be uploaded to Cloud Storage upon successful\ncompletion of all build steps.\n\nFiles in the workspace matching specified paths globs will be uploaded to\nthe specified Cloud Storage location using the builder service account's\ncredentials.\n\nThe location and generation of the uploaded objects will be stored in the\nBuild resource's results field.\n\nIf any objects fail to be pushed, the build is marked FAILURE." + } + }, + "type": "object" + }, + "Build": { + "description": "A build resource in the Cloud Build API.\n\nAt a high level, a `Build` describes where to find source code, how to build\nit (for example, the builder image to run on the source), and where to store\nthe built artifacts.\n\nFields can include the following variables, which will be expanded when the\nbuild is created:\n\n- $PROJECT_ID: the project ID of the build.\n- $BUILD_ID: the autogenerated ID of the build.\n- $REPO_NAME: the source repository name specified by RepoSource.\n- $BRANCH_NAME: the branch name specified by RepoSource.\n- $TAG_NAME: the tag name specified by RepoSource.\n- $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or\n resolved from the specified branch or tag.\n- $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA.", + "id": "Build", + "properties": { + "artifacts": { + "$ref": "Artifacts", + "description": "Artifacts produced by the build that should be uploaded upon\nsuccessful completion of all build steps." + }, + "buildTriggerId": { + "description": "Output only. The ID of the `BuildTrigger` that triggered this build, if it\nwas triggered automatically.", + "type": "string" + }, + "createTime": { + "description": "Output only. Time at which the request to create the build was received.", + "format": "google-datetime", + "type": "string" + }, + "finishTime": { + "description": "Output only. Time at which execution of the build was finished.\n\nThe difference between finish_time and start_time is the duration of the\nbuild's execution.", + "format": "google-datetime", + "type": "string" + }, + "id": { + "description": "Output only. Unique identifier of the build.", + "type": "string" + }, + "images": { + "description": "A list of images to be pushed upon the successful completion of all build\nsteps.\n\nThe images are pushed using the builder service account's credentials.\n\nThe digests of the pushed images will be stored in the `Build` resource's\nresults field.\n\nIf any of the images fail to be pushed, the build status is marked\n`FAILURE`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "logUrl": { + "description": "Output only. URL to logs for this build in Google Cloud Console.", + "type": "string" + }, + "logsBucket": { + "description": "Google Cloud Storage bucket where logs should be written (see\n[Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).\nLogs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.", + "type": "string" + }, + "options": { + "$ref": "BuildOptions", + "description": "Special options for this build." + }, + "projectId": { + "description": "Output only. ID of the project.", + "type": "string" + }, + "results": { + "$ref": "Results", + "description": "Output only. Results of the build." + }, + "secrets": { + "description": "Secrets to decrypt using Cloud Key Management Service.", + "items": { + "$ref": "Secret" + }, + "type": "array" + }, + "source": { + "$ref": "Source", + "description": "The location of the source files to build." + }, + "sourceProvenance": { + "$ref": "SourceProvenance", + "description": "Output only. A permanent fixed identifier for source." + }, + "startTime": { + "description": "Output only. Time at which execution of the build was started.", + "format": "google-datetime", + "type": "string" + }, + "status": { + "description": "Output only. Status of the build.", + "enum": [ + "STATUS_UNKNOWN", + "QUEUED", + "WORKING", + "SUCCESS", + "FAILURE", + "INTERNAL_ERROR", + "TIMEOUT", + "CANCELLED" + ], + "enumDescriptions": [ + "Status of the build is unknown.", + "Build or step is queued; work has not yet begun.", + "Build or step is being executed.", + "Build or step finished successfully.", + "Build or step failed to complete successfully.", + "Build or step failed due to an internal cause.", + "Build or step took longer than was allowed.", + "Build or step was canceled by a user." + ], + "type": "string" + }, + "statusDetail": { + "description": "Output only. Customer-readable message about the current status.", + "type": "string" + }, + "steps": { + "description": "Required. The operations to be performed on the workspace.", + "items": { + "$ref": "BuildStep" + }, + "type": "array" + }, + "substitutions": { + "additionalProperties": { + "type": "string" + }, + "description": "Substitutions data for `Build` resource.", + "type": "object" + }, + "tags": { + "description": "Tags for annotation of a `Build`. These are not docker tags.", + "items": { + "type": "string" + }, + "type": "array" + }, + "timeout": { + "description": "Amount of time that this build should be allowed to run, to second\ngranularity. If this amount of time elapses, work on the build will cease\nand the build status will be `TIMEOUT`.\n\nDefault time is ten minutes.", + "format": "google-duration", + "type": "string" + }, + "timing": { + "additionalProperties": { + "$ref": "TimeSpan" + }, + "description": "Output only. Stores timing information for phases of the build. Valid keys\nare:\n\n* BUILD: time to execute all build steps\n* PUSH: time to push all specified images.\n* FETCHSOURCE: time to fetch source.\n\nIf the build does not specify source or images,\nthese keys will not be included.", + "type": "object" + } + }, + "type": "object" + }, + "BuildOperationMetadata": { + "description": "Metadata for build operations.", + "id": "BuildOperationMetadata", + "properties": { + "build": { + "$ref": "Build", + "description": "The build that the operation is tracking." + } + }, + "type": "object" + }, + "BuildOptions": { + "description": "Optional arguments to enable specific features of builds.", + "id": "BuildOptions", + "properties": { + "diskSizeGb": { + "description": "Requested disk size for the VM that runs the build. Note that this is *NOT*\n\"disk free\"; some of the space will be used by the operating system and\nbuild utilities. Also note that this is the minimum disk size that will be\nallocated for the build -- the build may run with a larger disk than\nrequested. At present, the maximum disk size is 1000GB; builds that request\nmore than the maximum are rejected with an error.", + "format": "int64", + "type": "string" + }, + "env": { + "description": "A list of global environment variable definitions that will exist for all\nbuild steps in this build. If a variable is defined in both globally and in\na build step, the variable will use the build step value.\n\nThe elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\"\nbeing given the value \"VALUE\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "logStreamingOption": { + "description": "Option to define build log streaming behavior to Google Cloud\nStorage.", + "enum": [ + "STREAM_DEFAULT", + "STREAM_ON", + "STREAM_OFF" + ], + "enumDescriptions": [ + "Service may automatically determine build log streaming behavior.", + "Build logs should be streamed to Google Cloud Storage.", + "Build logs should not be streamed to Google Cloud Storage; they will be\nwritten when the build is completed." + ], + "type": "string" + }, + "logging": { + "description": "Option to specify the logging mode, which determines where the logs are\nstored.", + "enum": [ + "LOGGING_UNSPECIFIED", + "LEGACY", + "GCS_ONLY" + ], + "enumDescriptions": [ + "The service determines the logging mode. The default is `LEGACY`. Do not\nrely on the default logging behavior as it may change in the future.", + "Stackdriver logging and Cloud Storage logging are enabled.", + "Only Cloud Storage logging is enabled." + ], + "type": "string" + }, + "machineType": { + "description": "Compute Engine machine type on which to run the build.", + "enum": [ + "UNSPECIFIED", + "N1_HIGHCPU_8", + "N1_HIGHCPU_32" + ], + "enumDescriptions": [ + "Standard machine type.", + "Highcpu machine with 8 CPUs.", + "Highcpu machine with 32 CPUs." + ], + "type": "string" + }, + "requestedVerifyOption": { + "description": "Requested verifiability options.", + "enum": [ + "NOT_VERIFIED", + "VERIFIED" + ], + "enumDescriptions": [ + "Not a verifiable build. (default)", + "Verified build." + ], + "type": "string" + }, + "secretEnv": { + "description": "A list of global environment variables, which are encrypted using a Cloud\nKey Management Service crypto key. These values must be specified in the\nbuild's `Secret`. These variables will be available to all build steps\nin this build.", + "items": { + "type": "string" + }, + "type": "array" + }, + "sourceProvenanceHash": { + "description": "Requested hash for SourceProvenance.", + "enumDescriptions": [ + "No hash requested.", + "Use a sha256 hash.", + "Use a md5 hash." + ], + "items": { + "enum": [ + "NONE", + "SHA256", + "MD5" + ], + "type": "string" + }, + "type": "array" + }, + "substitutionOption": { + "description": "Option to specify behavior when there is an error in the substitution\nchecks.", + "enum": [ + "MUST_MATCH", + "ALLOW_LOOSE" + ], + "enumDescriptions": [ + "Fails the build if error in substitutions checks, like missing\na substitution in the template or in the map.", + "Do not fail the build if error in substitutions checks." + ], + "type": "string" + }, + "volumes": { + "description": "Global list of volumes to mount for ALL build steps\n\nEach volume is created as an empty volume prior to starting the build\nprocess. Upon completion of the build, volumes and their contents are\ndiscarded. Global volume names and paths cannot conflict with the volumes\ndefined a build step.\n\nUsing a global volume in a build with only one step is not valid as\nit is indicative of a build request with an incorrect configuration.", + "items": { + "$ref": "Volume" + }, + "type": "array" + }, + "workerPool": { + "description": "Option to specify a `WorkerPool` for the build. User specifies the pool\nwith the format \"[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]\".\nThis is an experimental field.", + "type": "string" + } + }, + "type": "object" + }, + "BuildStep": { + "description": "A step in the build pipeline.", + "id": "BuildStep", + "properties": { + "args": { + "description": "A list of arguments that will be presented to the step when it is started.\n\nIf the image used to run the step's container has an entrypoint, the `args`\nare used as arguments to that entrypoint. If the image does not define\nan entrypoint, the first element in args is used as the entrypoint,\nand the remainder will be used as arguments.", + "items": { + "type": "string" + }, + "type": "array" + }, + "dir": { + "description": "Working directory to use when running this step's container.\n\nIf this value is a relative path, it is relative to the build's working\ndirectory. If this value is absolute, it may be outside the build's working\ndirectory, in which case the contents of the path may not be persisted\nacross build step executions, unless a `volume` for that path is specified.\n\nIf the build specifies a `RepoSource` with `dir` and a step with a `dir`,\nwhich specifies an absolute path, the `RepoSource` `dir` is ignored for\nthe step's execution.", + "type": "string" + }, + "entrypoint": { + "description": "Entrypoint to be used instead of the build step image's default entrypoint.\nIf unset, the image's default entrypoint is used.", + "type": "string" + }, + "env": { + "description": "A list of environment variable definitions to be used when running a step.\n\nThe elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\"\nbeing given the value \"VALUE\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier for this build step, used in `wait_for` to\nreference this build step as a dependency.", + "type": "string" + }, + "name": { + "description": "Required. The name of the container image that will run this particular\nbuild step.\n\nIf the image is available in the host's Docker daemon's cache, it\nwill be run directly. If not, the host will attempt to pull the image\nfirst, using the builder service account's credentials if necessary.\n\nThe Docker daemon's cache will already have the latest versions of all of\nthe officially supported build steps\n([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).\nThe Docker daemon will also have cached many of the layers for some popular\nimages, like \"ubuntu\", \"debian\", but they will be refreshed at the time you\nattempt to use them.\n\nIf you built an image in a previous build step, it will be stored in the\nhost's Docker daemon's cache and is available to use as the name for a\nlater build step.", + "type": "string" + }, + "pullTiming": { + "$ref": "TimeSpan", + "description": "Output only. Stores timing information for pulling this build step's\nbuilder image only." + }, + "secretEnv": { + "description": "A list of environment variables which are encrypted using a Cloud Key\nManagement Service crypto key. These values must be specified in the\nbuild's `Secret`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "description": "Output only. Status of the build step. At this time, build step status is\nonly updated on build completion; step status is not updated in real-time\nas the build progresses.", + "enum": [ + "STATUS_UNKNOWN", + "QUEUED", + "WORKING", + "SUCCESS", + "FAILURE", + "INTERNAL_ERROR", + "TIMEOUT", + "CANCELLED" + ], + "enumDescriptions": [ + "Status of the build is unknown.", + "Build or step is queued; work has not yet begun.", + "Build or step is being executed.", + "Build or step finished successfully.", + "Build or step failed to complete successfully.", + "Build or step failed due to an internal cause.", + "Build or step took longer than was allowed.", + "Build or step was canceled by a user." + ], + "type": "string" + }, + "timeout": { + "description": "Time limit for executing this build step. If not defined, the step has no\ntime limit and will be allowed to continue to run until either it completes\nor the build itself times out.", + "format": "google-duration", + "type": "string" + }, + "timing": { + "$ref": "TimeSpan", + "description": "Output only. Stores timing information for executing this build step." + }, + "volumes": { + "description": "List of volumes to mount into the build step.\n\nEach volume is created as an empty volume prior to execution of the\nbuild step. Upon completion of the build, volumes and their contents are\ndiscarded.\n\nUsing a named volume in only one step is not valid as it is indicative\nof a build request with an incorrect configuration.", + "items": { + "$ref": "Volume" + }, + "type": "array" + }, + "waitFor": { + "description": "The ID(s) of the step(s) that this build step depends on.\nThis build step will not start until all the build steps in `wait_for`\nhave completed successfully. If `wait_for` is empty, this build step will\nstart when all previous build steps in the `Build.Steps` list have\ncompleted successfully.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "BuildTrigger": { + "description": "Configuration for an automated build in response to source repository\nchanges.", + "id": "BuildTrigger", + "properties": { + "build": { + "$ref": "Build", + "description": "Contents of the build template." + }, + "createTime": { + "description": "Output only. Time when the trigger was created.", + "format": "google-datetime", + "type": "string" + }, + "description": { + "description": "Human-readable description of this trigger.", + "type": "string" + }, + "disabled": { + "description": "If true, the trigger will never result in a build.", + "type": "boolean" + }, + "filename": { + "description": "Path, from the source root, to a file whose contents is used for the\ntemplate.", + "type": "string" + }, + "github": { + "$ref": "GitHubEventsConfig", + "description": "GitHubEventsConfig describes the configuration of a trigger that creates\na build whenever a GitHub event is received." + }, + "id": { + "description": "Output only. Unique identifier of the trigger.", + "type": "string" + }, + "ignoredFiles": { + "description": "ignored_files and included_files are file glob matches using\nhttp://godoc/pkg/path/filepath#Match extended with support for \"**\".\n\nIf ignored_files and changed files are both empty, then they are\nnot used to determine whether or not to trigger a build.\n\nIf ignored_files is not empty, then we ignore any files that match\nany of the ignored_file globs. If the change has no files that are\noutside of the ignored_files globs, then we do not trigger a build.", + "items": { + "type": "string" + }, + "type": "array" + }, + "includedFiles": { + "description": "If any of the files altered in the commit pass the ignored_files\nfilter and included_files is empty, then as far as this filter is\nconcerned, we should trigger the build.\n\nIf any of the files altered in the commit pass the ignored_files\nfilter and included_files is not empty, then we make sure that at\nleast one of those files matches a included_files glob. If not,\nthen we do not trigger a build.", + "items": { + "type": "string" + }, + "type": "array" + }, + "substitutions": { + "additionalProperties": { + "type": "string" + }, + "description": "Substitutions data for Build resource.", + "type": "object" + }, + "triggerTemplate": { + "$ref": "RepoSource", + "description": "Template describing the types of source changes to trigger a build.\n\nBranch and tag names in trigger templates are interpreted as regular\nexpressions. Any branch or tag change that matches that regular expression\nwill trigger a build." + } + }, + "type": "object" + }, + "BuiltImage": { + "description": "An image built by the pipeline.", + "id": "BuiltImage", + "properties": { + "digest": { + "description": "Docker Registry 2.0 digest.", + "type": "string" + }, + "name": { + "description": "Name used to push the container image to Google Container Registry, as\npresented to `docker push`.", + "type": "string" + }, + "pushTiming": { + "$ref": "TimeSpan", + "description": "Output only. Stores timing information for pushing the specified image." + } + }, + "type": "object" + }, + "CancelBuildRequest": { + "description": "Request to cancel an ongoing build.", + "id": "CancelBuildRequest", + "properties": {}, + "type": "object" + }, + "CancelOperationRequest": { + "description": "The request message for Operations.CancelOperation.", + "id": "CancelOperationRequest", + "properties": {}, + "type": "object" + }, + "CheckSuiteFilter": { + "description": "A CheckSuiteFilter is a filter that indicates that we should build on all\ncheck suite events.", + "id": "CheckSuiteFilter", + "properties": {}, + "type": "object" + }, + "Empty": { + "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.", + "id": "Empty", + "properties": {}, + "type": "object" + }, + "FileHashes": { + "description": "Container message for hashes of byte content of files, used in\nSourceProvenance messages to verify integrity of source input to the build.", + "id": "FileHashes", + "properties": { + "fileHash": { + "description": "Collection of file hashes.", + "items": { + "$ref": "Hash" + }, + "type": "array" + } + }, + "type": "object" + }, + "GitHubEventsConfig": { + "description": "GitHubEventsConfig describes the configuration of a trigger that creates a\nbuild whenever a GitHub event is received.\n\nThis message is experimental.", + "id": "GitHubEventsConfig", + "properties": { + "checkSuite": { + "$ref": "CheckSuiteFilter", + "description": "Output only. Indicates that a build was generated from a check suite\nevent." + }, + "installationId": { + "description": "The installationID that emmits the GitHub event.", + "format": "int64", + "type": "string" + }, + "name": { + "description": "Name of the repository.", + "type": "string" + }, + "owner": { + "description": "Owner of the repository.", + "type": "string" + }, + "pullRequest": { + "$ref": "PullRequestFilter", + "description": "filter to match changes in pull requests." + }, + "push": { + "$ref": "PushFilter", + "description": "filter to match changes in refs like branches, tags." + } + }, + "type": "object" + }, + "Hash": { + "description": "Container message for hash values.", + "id": "Hash", + "properties": { + "type": { + "description": "The type of hash that was performed.", + "enum": [ + "NONE", + "SHA256", + "MD5" + ], + "enumDescriptions": [ + "No hash requested.", + "Use a sha256 hash.", + "Use a md5 hash." + ], + "type": "string" + }, + "value": { + "description": "The hash value.", + "format": "byte", + "type": "string" + } + }, + "type": "object" + }, + "ListBuildTriggersResponse": { + "description": "Response containing existing `BuildTriggers`.", + "id": "ListBuildTriggersResponse", + "properties": { + "nextPageToken": { + "description": "Token to receive the next page of results.", + "type": "string" + }, + "triggers": { + "description": "`BuildTriggers` for the project, sorted by `create_time` descending.", + "items": { + "$ref": "BuildTrigger" + }, + "type": "array" + } + }, + "type": "object" + }, + "ListBuildsResponse": { + "description": "Response including listed builds.", + "id": "ListBuildsResponse", + "properties": { + "builds": { + "description": "Builds will be sorted by `create_time`, descending.", + "items": { + "$ref": "Build" + }, + "type": "array" + }, + "nextPageToken": { + "description": "Token to receive the next page of results.", + "type": "string" + } + }, + "type": "object" + }, + "ListOperationsResponse": { + "description": "The response message for Operations.ListOperations.", + "id": "ListOperationsResponse", + "properties": { + "nextPageToken": { + "description": "The standard List next-page token.", + "type": "string" + }, + "operations": { + "description": "A list of operations that matches the specified filter in the request.", + "items": { + "$ref": "Operation" + }, + "type": "array" + } + }, + "type": "object" + }, + "Operation": { + "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.", + "id": "Operation", + "properties": { + "done": { + "description": "If the value is `false`, it means the operation is still in progress.\nIf `true`, the operation is completed, and either `error` or `response` is\navailable.", + "type": "boolean" + }, + "error": { + "$ref": "Status", + "description": "The error result of the operation in case of failure or cancellation." + }, + "metadata": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "Service-specific metadata associated with the operation. It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata. Any method that returns a\nlong-running operation should document the metadata type, if any.", + "type": "object" + }, + "name": { + "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.", + "type": "string" + }, + "response": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "The normal response of the operation in case of success. If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`. If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource. For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name. For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.", + "type": "object" + } + }, + "type": "object" + }, + "PullRequestFilter": { + "description": "PullRequestFilter contains filter properties for matching GitHub Pull\nRequests.", + "id": "PullRequestFilter", + "properties": { + "branch": { + "description": "Regex of branches to match.\n\nThe syntax of the regular expressions accepted is the syntax accepted by\nRE2 and described at https://github.com/google/re2/wiki/Syntax", + "type": "string" + }, + "commentControl": { + "description": "Whether to block builds on a \"/gcbrun\" comment from a repository owner or\ncollaborator.", + "enum": [ + "COMMENTS_DISABLED", + "COMMENTS_ENABLED" + ], + "enumDescriptions": [ + "Do not require comments on Pull Requests before builds are triggered.", + "Enforce that repository owners or collaborators must comment on Pull\nRequests before builds are triggered." + ], + "type": "string" + } + }, + "type": "object" + }, + "PushFilter": { + "description": "Push contains filter properties for matching GitHub git pushes.", + "id": "PushFilter", + "properties": { + "branch": { + "description": "Regexes of branches to match.\n\nThe syntax of the regular expressions accepted is the syntax accepted by\nRE2 and described at https://github.com/google/re2/wiki/Syntax", + "type": "string" + }, + "tag": { + "description": "Regexes of tags to match.\n\nThe syntax of the regular expressions accepted is the syntax accepted by\nRE2 and described at https://github.com/google/re2/wiki/Syntax", + "type": "string" + } + }, + "type": "object" + }, + "RepoSource": { + "description": "Location of the source in a Google Cloud Source Repository.", + "id": "RepoSource", + "properties": { + "branchName": { + "description": "Name of the branch to build.", + "type": "string" + }, + "commitSha": { + "description": "Explicit commit SHA to build.", + "type": "string" + }, + "dir": { + "description": "Directory, relative to the source root, in which to run the build.\n\nThis must be a relative path. If a step's `dir` is specified and is an\nabsolute path, this value is ignored for that step's execution.", + "type": "string" + }, + "projectId": { + "description": "ID of the project that owns the Cloud Source Repository. If omitted, the\nproject ID requesting the build is assumed.", + "type": "string" + }, + "repoName": { + "description": "Name of the Cloud Source Repository. If omitted, the name \"default\" is\nassumed.", + "type": "string" + }, + "tagName": { + "description": "Name of the tag to build.", + "type": "string" + } + }, + "type": "object" + }, + "Results": { + "description": "Artifacts created by the build pipeline.", + "id": "Results", + "properties": { + "artifactManifest": { + "description": "Path to the artifact manifest. Only populated when artifacts are uploaded.", + "type": "string" + }, + "artifactTiming": { + "$ref": "TimeSpan", + "description": "Time to push all non-container artifacts." + }, + "buildStepImages": { + "description": "List of build step digests, in the order corresponding to build step\nindices.", + "items": { + "type": "string" + }, + "type": "array" + }, + "buildStepOutputs": { + "description": "List of build step outputs, produced by builder images, in the order\ncorresponding to build step indices.\n\n[Cloud Builders](https://cloud.google.com/cloud-build/docs/cloud-builders)\ncan produce this output by writing to `$BUILDER_OUTPUT/output`.\nOnly the first 4KB of data is stored.", + "items": { + "format": "byte", + "type": "string" + }, + "type": "array" + }, + "images": { + "description": "Container images that were built as a part of the build.", + "items": { + "$ref": "BuiltImage" + }, + "type": "array" + }, + "numArtifacts": { + "description": "Number of artifacts uploaded. Only populated when artifacts are uploaded.", + "format": "int64", + "type": "string" + } + }, + "type": "object" + }, + "RetryBuildRequest": { + "description": "Specifies a build to retry.", + "id": "RetryBuildRequest", + "properties": {}, + "type": "object" + }, + "Secret": { + "description": "Pairs a set of secret environment variables containing encrypted\nvalues with the Cloud KMS key to use to decrypt the value.", + "id": "Secret", + "properties": { + "kmsKeyName": { + "description": "Cloud KMS key name to use to decrypt these envs.", + "type": "string" + }, + "secretEnv": { + "additionalProperties": { + "format": "byte", + "type": "string" + }, + "description": "Map of environment variable name to its encrypted value.\n\nSecret environment variables must be unique across all of a build's\nsecrets, and must be used by at least one build step. Values can be at most\n64 KB in size. There can be at most 100 secret values across all of a\nbuild's secrets.", + "type": "object" + } + }, + "type": "object" + }, + "Source": { + "description": "Location of the source in a supported storage service.", + "id": "Source", + "properties": { + "repoSource": { + "$ref": "RepoSource", + "description": "If provided, get the source from this location in a Cloud Source\nRepository." + }, + "storageSource": { + "$ref": "StorageSource", + "description": "If provided, get the source from this location in Google Cloud Storage." + } + }, + "type": "object" + }, + "SourceProvenance": { + "description": "Provenance of the source. Ways to find the original source, or verify that\nsome source was used for this build.", + "id": "SourceProvenance", + "properties": { + "fileHashes": { + "additionalProperties": { + "$ref": "FileHashes" + }, + "description": "Output only. Hash(es) of the build source, which can be used to verify that\nthe original source integrity was maintained in the build. Note that\n`FileHashes` will only be populated if `BuildOptions` has requested a\n`SourceProvenanceHash`.\n\nThe keys to this map are file paths used as build source and the values\ncontain the hash values for those files.\n\nIf the build source came in a single package such as a gzipped tarfile\n(`.tar.gz`), the `FileHash` will be for the single path to that file.", + "type": "object" + }, + "resolvedRepoSource": { + "$ref": "RepoSource", + "description": "A copy of the build's `source.repo_source`, if exists, with any\nrevisions resolved." + }, + "resolvedStorageSource": { + "$ref": "StorageSource", + "description": "A copy of the build's `source.storage_source`, if exists, with any\ngenerations resolved." + } + }, + "type": "object" + }, + "Status": { + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error\nmessage, and error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", + "id": "Status", + "properties": { + "code": { + "description": "The status code, which should be an enum value of google.rpc.Code.", + "format": "int32", + "type": "integer" + }, + "details": { + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use.", + "items": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.", + "type": "string" + } + }, + "type": "object" + }, + "StorageSource": { + "description": "Location of the source in an archive file in Google Cloud Storage.", + "id": "StorageSource", + "properties": { + "bucket": { + "description": "Google Cloud Storage bucket containing the source (see\n[Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).", + "type": "string" + }, + "generation": { + "description": "Google Cloud Storage generation for the object. If the generation is\nomitted, the latest generation will be used.", + "format": "int64", + "type": "string" + }, + "object": { + "description": "Google Cloud Storage object containing the source.\n\nThis object must be a gzipped archive file (`.tar.gz`) containing source to\nbuild.", + "type": "string" + } + }, + "type": "object" + }, + "TimeSpan": { + "description": "Start and end times for a build execution phase.", + "id": "TimeSpan", + "properties": { + "endTime": { + "description": "End of time span.", + "format": "google-datetime", + "type": "string" + }, + "startTime": { + "description": "Start of time span.", + "format": "google-datetime", + "type": "string" + } + }, + "type": "object" + }, + "Volume": { + "description": "Volume describes a Docker container volume which is mounted into build steps\nin order to persist files across build step execution.", + "id": "Volume", + "properties": { + "name": { + "description": "Name of the volume to mount.\n\nVolume names must be unique per build step and must be valid names for\nDocker volumes. Each named volume must be used by at least two build steps.", + "type": "string" + }, + "path": { + "description": "Path at which to mount the volume.\n\nPaths must be absolute and cannot conflict with other volume paths on the\nsame build step or with certain reserved volume paths.", + "type": "string" + } + }, + "type": "object" + } + }, + "servicePath": "", + "title": "Cloud Build API", + "version": "v1", + "version_module": true +} \ No newline at end of file diff --git a/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-gen.go b/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-gen.go new file mode 100644 index 0000000..64ceda7 --- /dev/null +++ b/vendor/google.golang.org/api/cloudbuild/v1/cloudbuild-gen.go @@ -0,0 +1,4143 @@ +// Copyright 2019 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated file. DO NOT EDIT. + +// Package cloudbuild provides access to the Cloud Build API. +// +// For product documentation, see: https://cloud.google.com/cloud-build/docs/ +// +// Creating a client +// +// Usage example: +// +// import "google.golang.org/api/cloudbuild/v1" +// ... +// ctx := context.Background() +// cloudbuildService, err := cloudbuild.NewService(ctx) +// +// In this example, Google Application Default Credentials are used for authentication. +// +// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials. +// +// Other authentication options +// +// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey: +// +// cloudbuildService, err := cloudbuild.NewService(ctx, option.WithAPIKey("AIza...")) +// +// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource: +// +// config := &oauth2.Config{...} +// // ... +// token, err := config.Exchange(ctx, ...) +// cloudbuildService, err := cloudbuild.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token))) +// +// See https://godoc.org/google.golang.org/api/option/ for details on options. +package cloudbuild // import "google.golang.org/api/cloudbuild/v1" + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + + gensupport "google.golang.org/api/gensupport" + googleapi "google.golang.org/api/googleapi" + option "google.golang.org/api/option" + htransport "google.golang.org/api/transport/http" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = gensupport.MarshalJSON +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace +var _ = context.Canceled + +const apiId = "cloudbuild:v1" +const apiName = "cloudbuild" +const apiVersion = "v1" +const basePath = "https://cloudbuild.googleapis.com/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" +) + +// NewService creates a new Service. +func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) { + scopesOption := option.WithScopes( + "https://www.googleapis.com/auth/cloud-platform", + ) + // NOTE: prepend, so we don't override user-specified scopes. + opts = append([]option.ClientOption{scopesOption}, opts...) + client, endpoint, err := htransport.NewClient(ctx, opts...) + if err != nil { + return nil, err + } + s, err := New(client) + if err != nil { + return nil, err + } + if endpoint != "" { + s.BasePath = endpoint + } + return s, nil +} + +// New creates a new Service. It uses the provided http.Client for requests. +// +// Deprecated: please use NewService instead. +// To provide a custom HTTP client, use option.WithHTTPClient. +// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead. +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Operations = NewOperationsService(s) + s.Projects = NewProjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + UserAgent string // optional additional User-Agent fragment + + Operations *OperationsService + + Projects *ProjectsService +} + +func (s *Service) userAgent() string { + if s.UserAgent == "" { + return googleapi.UserAgent + } + return googleapi.UserAgent + " " + s.UserAgent +} + +func NewOperationsService(s *Service) *OperationsService { + rs := &OperationsService{s: s} + return rs +} + +type OperationsService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + rs.Builds = NewProjectsBuildsService(s) + rs.Triggers = NewProjectsTriggersService(s) + return rs +} + +type ProjectsService struct { + s *Service + + Builds *ProjectsBuildsService + + Triggers *ProjectsTriggersService +} + +func NewProjectsBuildsService(s *Service) *ProjectsBuildsService { + rs := &ProjectsBuildsService{s: s} + return rs +} + +type ProjectsBuildsService struct { + s *Service +} + +func NewProjectsTriggersService(s *Service) *ProjectsTriggersService { + rs := &ProjectsTriggersService{s: s} + return rs +} + +type ProjectsTriggersService struct { + s *Service +} + +// ArtifactObjects: Files in the workspace to upload to Cloud Storage +// upon successful +// completion of all build steps. +type ArtifactObjects struct { + // Location: Cloud Storage bucket and optional object path, in the + // form + // "gs://bucket/path/to/somewhere/". (see [Bucket + // Name + // Requirements](https://cloud.google.com/storage/docs/bucket-naming + // #requirements)). + // + // Files in the workspace matching any path pattern will be uploaded + // to + // Cloud Storage with this location as a prefix. + Location string `json:"location,omitempty"` + + // Paths: Path globs used to match files in the build's workspace. + Paths []string `json:"paths,omitempty"` + + // Timing: Output only. Stores timing information for pushing all + // artifact objects. + Timing *TimeSpan `json:"timing,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Location") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Location") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ArtifactObjects) MarshalJSON() ([]byte, error) { + type NoMethod ArtifactObjects + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ArtifactResult: An artifact that was uploaded during a build. This +// is a single record in the artifact manifest JSON file. +type ArtifactResult struct { + // FileHash: The file hash of the artifact. + FileHash []*FileHashes `json:"fileHash,omitempty"` + + // Location: The path of an artifact in a Google Cloud Storage bucket, + // with the + // generation number. For + // example, + // `gs://mybucket/path/to/output.jar#generation`. + Location string `json:"location,omitempty"` + + // ForceSendFields is a list of field names (e.g. "FileHash") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "FileHash") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ArtifactResult) MarshalJSON() ([]byte, error) { + type NoMethod ArtifactResult + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Artifacts: Artifacts produced by a build that should be uploaded +// upon +// successful completion of all build steps. +type Artifacts struct { + // 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. + Images []string `json:"images,omitempty"` + + // Objects: A list of objects to be uploaded to Cloud Storage upon + // successful + // completion of all build steps. + // + // Files in the workspace matching specified paths globs will be + // uploaded to + // the specified Cloud Storage location using the builder service + // account's + // credentials. + // + // The location and generation of the uploaded objects will be stored in + // the + // Build resource's results field. + // + // If any objects fail to be pushed, the build is marked FAILURE. + Objects *ArtifactObjects `json:"objects,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Images") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Images") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Artifacts) MarshalJSON() ([]byte, error) { + type NoMethod Artifacts + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Build: A build resource in the Cloud Build API. +// +// At a high level, a `Build` describes where to find source code, how +// to build +// it (for example, the builder image to run on the source), and where +// to store +// the built artifacts. +// +// Fields can include the following variables, which will be expanded +// when the +// build is created: +// +// - $PROJECT_ID: the project ID of the build. +// - $BUILD_ID: the autogenerated ID of the build. +// - $REPO_NAME: the source repository name specified by RepoSource. +// - $BRANCH_NAME: the branch name specified by RepoSource. +// - $TAG_NAME: the tag name specified by RepoSource. +// - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource +// or +// resolved from the specified branch or tag. +// - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA. +type Build struct { + // Artifacts: Artifacts produced by the build that should be uploaded + // upon + // successful completion of all build steps. + Artifacts *Artifacts `json:"artifacts,omitempty"` + + // BuildTriggerId: Output only. The ID of the `BuildTrigger` that + // triggered this build, if it + // was triggered automatically. + BuildTriggerId string `json:"buildTriggerId,omitempty"` + + // CreateTime: Output only. Time at which the request to create the + // build was received. + CreateTime string `json:"createTime,omitempty"` + + // FinishTime: Output only. Time at which execution of the build was + // finished. + // + // The difference between finish_time and start_time is the duration of + // the + // build's execution. + FinishTime string `json:"finishTime,omitempty"` + + // Id: Output only. Unique identifier of the build. + Id string `json:"id,omitempty"` + + // Images: A list of images to be pushed upon the successful completion + // of all build + // steps. + // + // The images are pushed using the builder service account's + // credentials. + // + // The digests of the pushed images will be stored in the `Build` + // resource's + // results field. + // + // If any of the images fail to be pushed, the build status is + // marked + // `FAILURE`. + Images []string `json:"images,omitempty"` + + // LogUrl: Output only. URL to logs for this build in Google Cloud + // Console. + LogUrl string `json:"logUrl,omitempty"` + + // LogsBucket: 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`. + LogsBucket string `json:"logsBucket,omitempty"` + + // Options: Special options for this build. + Options *BuildOptions `json:"options,omitempty"` + + // ProjectId: Output only. ID of the project. + ProjectId string `json:"projectId,omitempty"` + + // Results: Output only. Results of the build. + Results *Results `json:"results,omitempty"` + + // Secrets: Secrets to decrypt using Cloud Key Management Service. + Secrets []*Secret `json:"secrets,omitempty"` + + // Source: The location of the source files to build. + Source *Source `json:"source,omitempty"` + + // SourceProvenance: Output only. A permanent fixed identifier for + // source. + SourceProvenance *SourceProvenance `json:"sourceProvenance,omitempty"` + + // StartTime: Output only. Time at which execution of the build was + // started. + StartTime string `json:"startTime,omitempty"` + + // Status: Output only. Status of the build. + // + // Possible values: + // "STATUS_UNKNOWN" - Status of the build is unknown. + // "QUEUED" - Build or step is queued; work has not yet begun. + // "WORKING" - Build or step is being executed. + // "SUCCESS" - Build or step finished successfully. + // "FAILURE" - Build or step failed to complete successfully. + // "INTERNAL_ERROR" - Build or step failed due to an internal cause. + // "TIMEOUT" - Build or step took longer than was allowed. + // "CANCELLED" - Build or step was canceled by a user. + Status string `json:"status,omitempty"` + + // StatusDetail: Output only. Customer-readable message about the + // current status. + StatusDetail string `json:"statusDetail,omitempty"` + + // Steps: Required. The operations to be performed on the workspace. + Steps []*BuildStep `json:"steps,omitempty"` + + // Substitutions: Substitutions data for `Build` resource. + Substitutions map[string]string `json:"substitutions,omitempty"` + + // Tags: Tags for annotation of a `Build`. These are not docker tags. + Tags []string `json:"tags,omitempty"` + + // Timeout: 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. + Timeout string `json:"timeout,omitempty"` + + // Timing: Output only. Stores timing information for phases of the + // build. Valid keys + // are: + // + // * BUILD: time to execute all build steps + // * PUSH: time to push all specified images. + // * FETCHSOURCE: time to fetch source. + // + // If the build does not specify source or images, + // these keys will not be included. + Timing map[string]TimeSpan `json:"timing,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Artifacts") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Artifacts") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Build) MarshalJSON() ([]byte, error) { + type NoMethod Build + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BuildOperationMetadata: Metadata for build operations. +type BuildOperationMetadata struct { + // Build: The build that the operation is tracking. + Build *Build `json:"build,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Build") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Build") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BuildOperationMetadata) MarshalJSON() ([]byte, error) { + type NoMethod BuildOperationMetadata + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BuildOptions: Optional arguments to enable specific features of +// builds. +type BuildOptions struct { + // DiskSizeGb: Requested disk size for the VM that runs the build. Note + // that this is *NOT* + // "disk free"; some of the space will be used by the operating system + // and + // build utilities. Also note that this is the minimum disk size that + // will be + // allocated for the build -- the build may run with a larger disk + // than + // requested. At present, the maximum disk size is 1000GB; builds that + // request + // more than the maximum are rejected with an error. + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Env: A list of global environment variable definitions that will + // exist for all + // build steps in this build. If a variable is defined in both globally + // and in + // a build step, the variable will use the build step value. + // + // The elements are of the form "KEY=VALUE" for the environment variable + // "KEY" + // being given the value "VALUE". + Env []string `json:"env,omitempty"` + + // LogStreamingOption: Option to define build log streaming behavior to + // Google Cloud + // Storage. + // + // Possible values: + // "STREAM_DEFAULT" - Service may automatically determine build log + // streaming behavior. + // "STREAM_ON" - Build logs should be streamed to Google Cloud + // Storage. + // "STREAM_OFF" - Build logs should not be streamed to Google Cloud + // Storage; they will be + // written when the build is completed. + LogStreamingOption string `json:"logStreamingOption,omitempty"` + + // Logging: Option to specify the logging mode, which determines where + // the logs are + // stored. + // + // Possible values: + // "LOGGING_UNSPECIFIED" - The service determines the logging mode. + // The default is `LEGACY`. Do not + // rely on the default logging behavior as it may change in the future. + // "LEGACY" - Stackdriver logging and Cloud Storage logging are + // enabled. + // "GCS_ONLY" - Only Cloud Storage logging is enabled. + Logging string `json:"logging,omitempty"` + + // MachineType: Compute Engine machine type on which to run the build. + // + // Possible values: + // "UNSPECIFIED" - Standard machine type. + // "N1_HIGHCPU_8" - Highcpu machine with 8 CPUs. + // "N1_HIGHCPU_32" - Highcpu machine with 32 CPUs. + MachineType string `json:"machineType,omitempty"` + + // RequestedVerifyOption: Requested verifiability options. + // + // Possible values: + // "NOT_VERIFIED" - Not a verifiable build. (default) + // "VERIFIED" - Verified build. + RequestedVerifyOption string `json:"requestedVerifyOption,omitempty"` + + // SecretEnv: A list of global environment variables, which are + // encrypted using a Cloud + // Key Management Service crypto key. These values must be specified in + // the + // build's `Secret`. These variables will be available to all build + // steps + // in this build. + SecretEnv []string `json:"secretEnv,omitempty"` + + // SourceProvenanceHash: Requested hash for SourceProvenance. + // + // Possible values: + // "NONE" - No hash requested. + // "SHA256" - Use a sha256 hash. + // "MD5" - Use a md5 hash. + SourceProvenanceHash []string `json:"sourceProvenanceHash,omitempty"` + + // SubstitutionOption: Option to specify behavior when there is an error + // in the substitution + // checks. + // + // Possible values: + // "MUST_MATCH" - Fails the build if error in substitutions checks, + // like missing + // a substitution in the template or in the map. + // "ALLOW_LOOSE" - Do not fail the build if error in substitutions + // checks. + SubstitutionOption string `json:"substitutionOption,omitempty"` + + // Volumes: Global list of volumes to mount for ALL build steps + // + // Each volume is created as an empty volume prior to starting the + // build + // process. Upon completion of the build, volumes and their contents + // are + // discarded. Global volume names and paths cannot conflict with the + // volumes + // defined a build step. + // + // Using a global volume in a build with only one step is not valid + // as + // it is indicative of a build request with an incorrect configuration. + Volumes []*Volume `json:"volumes,omitempty"` + + // WorkerPool: Option to specify a `WorkerPool` for the build. User + // specifies the pool + // with the format "[WORKERPOOL_PROJECT_ID]/[WORKERPOOL_NAME]". + // This is an experimental field. + WorkerPool string `json:"workerPool,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DiskSizeGb") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DiskSizeGb") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BuildOptions) MarshalJSON() ([]byte, error) { + type NoMethod BuildOptions + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BuildStep: A step in the build pipeline. +type BuildStep struct { + // Args: A list of arguments that will be presented to the step when it + // is started. + // + // If the image used to run the step's container has an entrypoint, the + // `args` + // are used as arguments to that entrypoint. If the image does not + // define + // an entrypoint, the first element in args is used as the + // entrypoint, + // and the remainder will be used as arguments. + Args []string `json:"args,omitempty"` + + // Dir: Working directory to use when running this step's container. + // + // If this value is a relative path, it is relative to the build's + // working + // directory. If this value is absolute, it may be outside the build's + // working + // directory, in which case the contents of the path may not be + // persisted + // across build step executions, unless a `volume` for that path is + // specified. + // + // If the build specifies a `RepoSource` with `dir` and a step with a + // `dir`, + // which specifies an absolute path, the `RepoSource` `dir` is ignored + // for + // the step's execution. + Dir string `json:"dir,omitempty"` + + // Entrypoint: Entrypoint to be used instead of the build step image's + // default entrypoint. + // If unset, the image's default entrypoint is used. + Entrypoint string `json:"entrypoint,omitempty"` + + // 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". + Env []string `json:"env,omitempty"` + + // Id: Unique identifier for this build step, used in `wait_for` + // to + // reference this build step as a dependency. + Id string `json:"id,omitempty"` + + // Name: Required. The name of the container image that will run this + // particular + // build step. + // + // If the image is available in the host's Docker daemon's cache, + // it + // will be run directly. If not, the host will attempt to pull the + // image + // first, using the builder service account's credentials if + // necessary. + // + // The Docker daemon's cache will already have the latest versions of + // all of + // the officially supported build + // steps + // ([https://github.com/GoogleCloudPlatform/cloud-builders](https:/ + // /github.com/GoogleCloudPlatform/cloud-builders)). + // The Docker daemon will also have cached many of the layers for some + // popular + // images, like "ubuntu", "debian", but they will be refreshed at the + // time you + // attempt to use them. + // + // If you built an image in a previous build step, it will be stored in + // the + // host's Docker daemon's cache and is available to use as the name for + // a + // later build step. + Name string `json:"name,omitempty"` + + // PullTiming: Output only. Stores timing information for pulling this + // build step's + // builder image only. + PullTiming *TimeSpan `json:"pullTiming,omitempty"` + + // SecretEnv: A list of environment variables which are encrypted using + // a Cloud Key + // Management Service crypto key. These values must be specified in + // the + // build's `Secret`. + SecretEnv []string `json:"secretEnv,omitempty"` + + // Status: Output only. Status of the build step. At this time, build + // step status is + // only updated on build completion; step status is not updated in + // real-time + // as the build progresses. + // + // Possible values: + // "STATUS_UNKNOWN" - Status of the build is unknown. + // "QUEUED" - Build or step is queued; work has not yet begun. + // "WORKING" - Build or step is being executed. + // "SUCCESS" - Build or step finished successfully. + // "FAILURE" - Build or step failed to complete successfully. + // "INTERNAL_ERROR" - Build or step failed due to an internal cause. + // "TIMEOUT" - Build or step took longer than was allowed. + // "CANCELLED" - Build or step was canceled by a user. + Status string `json:"status,omitempty"` + + // Timeout: Time limit for executing this build step. If not defined, + // the step has no + // time limit and will be allowed to continue to run until either it + // completes + // or the build itself times out. + Timeout string `json:"timeout,omitempty"` + + // Timing: Output only. Stores timing information for executing this + // build step. + Timing *TimeSpan `json:"timing,omitempty"` + + // Volumes: List of volumes to mount into the build step. + // + // Each volume is created as an empty volume prior to execution of + // the + // build step. Upon completion of the build, volumes and their contents + // are + // discarded. + // + // Using a named volume in only one step is not valid as it is + // indicative + // of a build request with an incorrect configuration. + Volumes []*Volume `json:"volumes,omitempty"` + + // 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. + WaitFor []string `json:"waitFor,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Args") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Args") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BuildStep) MarshalJSON() ([]byte, error) { + type NoMethod BuildStep + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BuildTrigger: Configuration for an automated build in response to +// source repository +// changes. +type BuildTrigger struct { + // Build: Contents of the build template. + Build *Build `json:"build,omitempty"` + + // CreateTime: Output only. Time when the trigger was created. + CreateTime string `json:"createTime,omitempty"` + + // Description: Human-readable description of this trigger. + Description string `json:"description,omitempty"` + + // Disabled: If true, the trigger will never result in a build. + Disabled bool `json:"disabled,omitempty"` + + // Filename: Path, from the source root, to a file whose contents is + // used for the + // template. + Filename string `json:"filename,omitempty"` + + // Github: GitHubEventsConfig describes the configuration of a trigger + // that creates + // a build whenever a GitHub event is received. + Github *GitHubEventsConfig `json:"github,omitempty"` + + // Id: Output only. Unique identifier of the trigger. + Id string `json:"id,omitempty"` + + // IgnoredFiles: ignored_files and included_files are file glob matches + // using + // http://godoc/pkg/path/filepath#Match extended with support for + // "**". + // + // If ignored_files and changed files are both empty, then they are + // not used to determine whether or not to trigger a build. + // + // If ignored_files is not empty, then we ignore any files that + // match + // any of the ignored_file globs. If the change has no files that + // are + // outside of the ignored_files globs, then we do not trigger a build. + IgnoredFiles []string `json:"ignoredFiles,omitempty"` + + // IncludedFiles: If any of the files altered in the commit pass the + // ignored_files + // filter and included_files is empty, then as far as this filter + // is + // concerned, we should trigger the build. + // + // If any of the files altered in the commit pass the + // ignored_files + // filter and included_files is not empty, then we make sure that + // at + // least one of those files matches a included_files glob. If not, + // then we do not trigger a build. + IncludedFiles []string `json:"includedFiles,omitempty"` + + // Substitutions: Substitutions data for Build resource. + Substitutions map[string]string `json:"substitutions,omitempty"` + + // TriggerTemplate: 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. + TriggerTemplate *RepoSource `json:"triggerTemplate,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Build") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Build") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BuildTrigger) MarshalJSON() ([]byte, error) { + type NoMethod BuildTrigger + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// BuiltImage: An image built by the pipeline. +type BuiltImage struct { + // Digest: Docker Registry 2.0 digest. + Digest string `json:"digest,omitempty"` + + // Name: Name used to push the container image to Google Container + // Registry, as + // presented to `docker push`. + Name string `json:"name,omitempty"` + + // PushTiming: Output only. Stores timing information for pushing the + // specified image. + PushTiming *TimeSpan `json:"pushTiming,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Digest") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Digest") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *BuiltImage) MarshalJSON() ([]byte, error) { + type NoMethod BuiltImage + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// CancelBuildRequest: Request to cancel an ongoing build. +type CancelBuildRequest struct { +} + +// CancelOperationRequest: The request message for +// Operations.CancelOperation. +type CancelOperationRequest struct { +} + +// CheckSuiteFilter: A CheckSuiteFilter is a filter that indicates that +// we should build on all +// check suite events. +type CheckSuiteFilter struct { +} + +// Empty: 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 `{}`. +type Empty struct { + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` +} + +// FileHashes: Container message for hashes of byte content of files, +// used in +// SourceProvenance messages to verify integrity of source input to the +// build. +type FileHashes struct { + // FileHash: Collection of file hashes. + FileHash []*Hash `json:"fileHash,omitempty"` + + // ForceSendFields is a list of field names (e.g. "FileHash") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "FileHash") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *FileHashes) MarshalJSON() ([]byte, error) { + type NoMethod FileHashes + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// GitHubEventsConfig: GitHubEventsConfig describes the configuration of +// a trigger that creates a +// build whenever a GitHub event is received. +// +// This message is experimental. +type GitHubEventsConfig struct { + // CheckSuite: Output only. Indicates that a build was generated from a + // check suite + // event. + CheckSuite *CheckSuiteFilter `json:"checkSuite,omitempty"` + + // InstallationId: The installationID that emmits the GitHub event. + InstallationId int64 `json:"installationId,omitempty,string"` + + // Name: Name of the repository. + Name string `json:"name,omitempty"` + + // Owner: Owner of the repository. + Owner string `json:"owner,omitempty"` + + // PullRequest: filter to match changes in pull requests. + PullRequest *PullRequestFilter `json:"pullRequest,omitempty"` + + // Push: filter to match changes in refs like branches, tags. + Push *PushFilter `json:"push,omitempty"` + + // ForceSendFields is a list of field names (e.g. "CheckSuite") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "CheckSuite") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GitHubEventsConfig) MarshalJSON() ([]byte, error) { + type NoMethod GitHubEventsConfig + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Hash: Container message for hash values. +type Hash struct { + // Type: The type of hash that was performed. + // + // Possible values: + // "NONE" - No hash requested. + // "SHA256" - Use a sha256 hash. + // "MD5" - Use a md5 hash. + Type string `json:"type,omitempty"` + + // Value: The hash value. + Value string `json:"value,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Type") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Type") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Hash) MarshalJSON() ([]byte, error) { + type NoMethod Hash + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListBuildTriggersResponse: Response containing existing +// `BuildTriggers`. +type ListBuildTriggersResponse struct { + // NextPageToken: Token to receive the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Triggers: `BuildTriggers` for the project, sorted by `create_time` + // descending. + Triggers []*BuildTrigger `json:"triggers,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListBuildTriggersResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListBuildTriggersResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListBuildsResponse: Response including listed builds. +type ListBuildsResponse struct { + // Builds: Builds will be sorted by `create_time`, descending. + Builds []*Build `json:"builds,omitempty"` + + // NextPageToken: Token to receive the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Builds") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Builds") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListBuildsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListBuildsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListOperationsResponse: The response message for +// Operations.ListOperations. +type ListOperationsResponse struct { + // NextPageToken: The standard List next-page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Operations: A list of operations that matches the specified filter in + // the request. + Operations []*Operation `json:"operations,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListOperationsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListOperationsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Operation: This resource represents a long-running operation that is +// the result of a +// network API call. +type Operation struct { + // Done: If the value is `false`, it means the operation is still in + // progress. + // If `true`, the operation is completed, and either `error` or + // `response` is + // available. + Done bool `json:"done,omitempty"` + + // Error: The error result of the operation in case of failure or + // cancellation. + Error *Status `json:"error,omitempty"` + + // Metadata: Service-specific metadata associated with the operation. + // It typically + // contains progress information and common metadata such as create + // time. + // Some services might not provide such metadata. Any method that + // returns a + // long-running operation should document the metadata type, if any. + Metadata googleapi.RawMessage `json:"metadata,omitempty"` + + // Name: The server-assigned name, which is only unique within the same + // service that + // originally returns it. If you use the default HTTP mapping, + // the + // `name` should have the format of `operations/some/unique/name`. + Name string `json:"name,omitempty"` + + // Response: The normal response of the operation in case of success. + // If the original + // method returns no data on success, such as `Delete`, the response + // is + // `google.protobuf.Empty`. If the original method is + // standard + // `Get`/`Create`/`Update`, the response should be the resource. For + // other + // methods, the response should have the type `XxxResponse`, where + // `Xxx` + // is the original method name. For example, if the original method + // name + // is `TakeSnapshot()`, the inferred response type + // is + // `TakeSnapshotResponse`. + Response googleapi.RawMessage `json:"response,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Done") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Done") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Operation) MarshalJSON() ([]byte, error) { + type NoMethod Operation + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// PullRequestFilter: PullRequestFilter contains filter properties for +// matching GitHub Pull +// Requests. +type PullRequestFilter struct { + // Branch: Regex of branches to match. + // + // The syntax of the regular expressions accepted is the syntax accepted + // by + // RE2 and described at https://github.com/google/re2/wiki/Syntax + Branch string `json:"branch,omitempty"` + + // CommentControl: Whether to block builds on a "/gcbrun" comment from a + // repository owner or + // collaborator. + // + // Possible values: + // "COMMENTS_DISABLED" - Do not require comments on Pull Requests + // before builds are triggered. + // "COMMENTS_ENABLED" - Enforce that repository owners or + // collaborators must comment on Pull + // Requests before builds are triggered. + CommentControl string `json:"commentControl,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Branch") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Branch") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *PullRequestFilter) MarshalJSON() ([]byte, error) { + type NoMethod PullRequestFilter + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// PushFilter: Push contains filter properties for matching GitHub git +// pushes. +type PushFilter struct { + // Branch: Regexes of branches to match. + // + // The syntax of the regular expressions accepted is the syntax accepted + // by + // RE2 and described at https://github.com/google/re2/wiki/Syntax + Branch string `json:"branch,omitempty"` + + // Tag: Regexes of tags to match. + // + // The syntax of the regular expressions accepted is the syntax accepted + // by + // RE2 and described at https://github.com/google/re2/wiki/Syntax + Tag string `json:"tag,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Branch") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Branch") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *PushFilter) MarshalJSON() ([]byte, error) { + type NoMethod PushFilter + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// RepoSource: Location of the source in a Google Cloud Source +// Repository. +type RepoSource struct { + // BranchName: Name of the branch to build. + BranchName string `json:"branchName,omitempty"` + + // CommitSha: Explicit commit SHA to build. + CommitSha string `json:"commitSha,omitempty"` + + // Dir: Directory, relative to the source root, in which to run the + // build. + // + // This must be a relative path. If a step's `dir` is specified and is + // an + // absolute path, this value is ignored for that step's execution. + Dir string `json:"dir,omitempty"` + + // ProjectId: ID of the project that owns the Cloud Source Repository. + // If omitted, the + // project ID requesting the build is assumed. + ProjectId string `json:"projectId,omitempty"` + + // RepoName: Name of the Cloud Source Repository. If omitted, the name + // "default" is + // assumed. + RepoName string `json:"repoName,omitempty"` + + // TagName: Name of the tag to build. + TagName string `json:"tagName,omitempty"` + + // ForceSendFields is a list of field names (e.g. "BranchName") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "BranchName") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *RepoSource) MarshalJSON() ([]byte, error) { + type NoMethod RepoSource + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Results: Artifacts created by the build pipeline. +type Results struct { + // ArtifactManifest: Path to the artifact manifest. Only populated when + // artifacts are uploaded. + ArtifactManifest string `json:"artifactManifest,omitempty"` + + // ArtifactTiming: Time to push all non-container artifacts. + ArtifactTiming *TimeSpan `json:"artifactTiming,omitempty"` + + // BuildStepImages: List of build step digests, in the order + // corresponding to build step + // indices. + BuildStepImages []string `json:"buildStepImages,omitempty"` + + // BuildStepOutputs: List of build step outputs, produced by builder + // images, in the order + // corresponding to build step indices. + // + // [Cloud + // Builders](https://cloud.google.com/cloud-build/docs/cloud-builders) + // ca + // n produce this output by writing to `$BUILDER_OUTPUT/output`. + // Only the first 4KB of data is stored. + BuildStepOutputs []string `json:"buildStepOutputs,omitempty"` + + // Images: Container images that were built as a part of the build. + Images []*BuiltImage `json:"images,omitempty"` + + // NumArtifacts: Number of artifacts uploaded. Only populated when + // artifacts are uploaded. + NumArtifacts int64 `json:"numArtifacts,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "ArtifactManifest") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "ArtifactManifest") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *Results) MarshalJSON() ([]byte, error) { + type NoMethod Results + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// RetryBuildRequest: Specifies a build to retry. +type RetryBuildRequest struct { +} + +// Secret: Pairs a set of secret environment variables containing +// encrypted +// values with the Cloud KMS key to use to decrypt the value. +type Secret struct { + // KmsKeyName: Cloud KMS key name to use to decrypt these envs. + KmsKeyName string `json:"kmsKeyName,omitempty"` + + // SecretEnv: Map of environment variable name to its encrypted + // value. + // + // Secret environment variables must be unique across all of a + // build's + // secrets, and must be used by at least one build step. Values can be + // at most + // 64 KB in size. There can be at most 100 secret values across all of + // a + // build's secrets. + SecretEnv map[string]string `json:"secretEnv,omitempty"` + + // ForceSendFields is a list of field names (e.g. "KmsKeyName") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "KmsKeyName") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Secret) MarshalJSON() ([]byte, error) { + type NoMethod Secret + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Source: Location of the source in a supported storage service. +type Source struct { + // RepoSource: If provided, get the source from this location in a Cloud + // Source + // Repository. + RepoSource *RepoSource `json:"repoSource,omitempty"` + + // StorageSource: If provided, get the source from this location in + // Google Cloud Storage. + StorageSource *StorageSource `json:"storageSource,omitempty"` + + // ForceSendFields is a list of field names (e.g. "RepoSource") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "RepoSource") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Source) MarshalJSON() ([]byte, error) { + type NoMethod Source + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// SourceProvenance: Provenance of the source. Ways to find the original +// source, or verify that +// some source was used for this build. +type SourceProvenance struct { + // FileHashes: Output only. Hash(es) of the build source, which can be + // used to verify that + // the original source integrity was maintained in the build. Note + // that + // `FileHashes` will only be populated if `BuildOptions` has requested + // a + // `SourceProvenanceHash`. + // + // The keys to this map are file paths used as build source and the + // values + // contain the hash values for those files. + // + // If the build source came in a single package such as a gzipped + // tarfile + // (`.tar.gz`), the `FileHash` will be for the single path to that file. + FileHashes map[string]FileHashes `json:"fileHashes,omitempty"` + + // ResolvedRepoSource: A copy of the build's `source.repo_source`, if + // exists, with any + // revisions resolved. + ResolvedRepoSource *RepoSource `json:"resolvedRepoSource,omitempty"` + + // ResolvedStorageSource: A copy of the build's `source.storage_source`, + // if exists, with any + // generations resolved. + ResolvedStorageSource *StorageSource `json:"resolvedStorageSource,omitempty"` + + // ForceSendFields is a list of field names (e.g. "FileHashes") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "FileHashes") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SourceProvenance) MarshalJSON() ([]byte, error) { + type NoMethod SourceProvenance + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Status: The `Status` type defines a logical error model that is +// suitable for +// different programming environments, including REST APIs and RPC APIs. +// It is +// used by [gRPC](https://github.com/grpc). The error model is designed +// to be: +// +// - Simple to use and understand for most users +// - Flexible enough to meet unexpected needs +// +// # Overview +// +// The `Status` message contains three pieces of data: error code, +// error +// message, and error details. The error code should be an enum value +// of +// google.rpc.Code, but it may accept additional error codes if needed. +// The +// error message should be a developer-facing English message that +// helps +// developers *understand* and *resolve* the error. If a localized +// user-facing +// error message is needed, put the localized message in the error +// details or +// localize it in the client. The optional error details may contain +// arbitrary +// information about the error. There is a predefined set of error +// detail types +// in the package `google.rpc` that can be used for common error +// conditions. +// +// # Language mapping +// +// The `Status` message is the logical representation of the error +// model, but it +// is not necessarily the actual wire format. When the `Status` message +// is +// exposed in different client libraries and different wire protocols, +// it can be +// mapped differently. For example, it will likely be mapped to some +// exceptions +// in Java, but more likely mapped to some error codes in C. +// +// # Other uses +// +// The error model and the `Status` message can be used in a variety +// of +// environments, either with or without APIs, to provide a +// consistent developer experience across different +// environments. +// +// Example uses of this error model include: +// +// - Partial errors. If a service needs to return partial errors to the +// client, +// it may embed the `Status` in the normal response to indicate the +// partial +// errors. +// +// - Workflow errors. A typical workflow has multiple steps. Each step +// may +// have a `Status` message for error reporting. +// +// - Batch operations. If a client uses batch request and batch +// response, the +// `Status` message should be used directly inside batch response, +// one for +// each error sub-response. +// +// - Asynchronous operations. If an API call embeds asynchronous +// operation +// results in its response, the status of those operations should +// be +// represented directly using the `Status` message. +// +// - Logging. If some API errors are stored in logs, the message +// `Status` could +// be used directly after any stripping needed for security/privacy +// reasons. +type Status struct { + // Code: The status code, which should be an enum value of + // google.rpc.Code. + Code int64 `json:"code,omitempty"` + + // Details: A list of messages that carry the error details. There is a + // common set of + // message types for APIs to use. + Details []googleapi.RawMessage `json:"details,omitempty"` + + // Message: A developer-facing error message, which should be in + // English. Any + // user-facing error message should be localized and sent in + // the + // google.rpc.Status.details field, or localized by the client. + Message string `json:"message,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Code") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Code") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Status) MarshalJSON() ([]byte, error) { + type NoMethod Status + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// StorageSource: Location of the source in an archive file in Google +// Cloud Storage. +type StorageSource struct { + // Bucket: Google Cloud Storage bucket containing the source + // (see + // [Bucket + // Name + // Requirements](https://cloud.google.com/storage/docs/bucket-naming + // #requirements)). + Bucket string `json:"bucket,omitempty"` + + // Generation: Google Cloud Storage generation for the object. If the + // generation is + // omitted, the latest generation will be used. + Generation int64 `json:"generation,omitempty,string"` + + // Object: Google Cloud Storage object containing the source. + // + // This object must be a gzipped archive file (`.tar.gz`) containing + // source to + // build. + Object string `json:"object,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Bucket") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Bucket") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *StorageSource) MarshalJSON() ([]byte, error) { + type NoMethod StorageSource + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// TimeSpan: Start and end times for a build execution phase. +type TimeSpan struct { + // EndTime: End of time span. + EndTime string `json:"endTime,omitempty"` + + // StartTime: Start of time span. + StartTime string `json:"startTime,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EndTime") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EndTime") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *TimeSpan) MarshalJSON() ([]byte, error) { + type NoMethod TimeSpan + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Volume: Volume describes a Docker container volume which is mounted +// into build steps +// in order to persist files across build step execution. +type Volume struct { + // Name: Name of the volume to mount. + // + // Volume names must be unique per build step and must be valid names + // for + // Docker volumes. Each named volume must be used by at least two build + // steps. + Name string `json:"name,omitempty"` + + // Path: Path at which to mount the volume. + // + // Paths must be absolute and cannot conflict with other volume paths on + // the + // same build step or with certain reserved volume paths. + Path string `json:"path,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Name") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Name") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Volume) MarshalJSON() ([]byte, error) { + type NoMethod Volume + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// method id "cloudbuild.operations.cancel": + +type OperationsCancelCall struct { + s *Service + name string + canceloperationrequest *CancelOperationRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Cancel: Starts asynchronous cancellation on a long-running operation. +// The server +// makes a best effort to cancel the operation, but success is +// not +// guaranteed. If the server doesn't support this method, it +// returns +// `google.rpc.Code.UNIMPLEMENTED`. Clients can +// use +// Operations.GetOperation or +// other methods to check whether the cancellation succeeded or whether +// the +// operation completed despite cancellation. On successful +// cancellation, +// the operation is not deleted; instead, it becomes an operation +// with +// an Operation.error value with a google.rpc.Status.code of +// 1, +// corresponding to `Code.CANCELLED`. +func (r *OperationsService) Cancel(name string, canceloperationrequest *CancelOperationRequest) *OperationsCancelCall { + c := &OperationsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.canceloperationrequest = canceloperationrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *OperationsCancelCall) Fields(s ...googleapi.Field) *OperationsCancelCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *OperationsCancelCall) Context(ctx context.Context) *OperationsCancelCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *OperationsCancelCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *OperationsCancelCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.operations.cancel" call. +// Exactly one of *Empty or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Empty.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *OperationsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Empty{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts asynchronous cancellation on a long-running operation. The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`. Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.", + // "flatPath": "v1/operations/{operationsId}:cancel", + // "httpMethod": "POST", + // "id": "cloudbuild.operations.cancel", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource to be cancelled.", + // "location": "path", + // "pattern": "^operations/.+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:cancel", + // "request": { + // "$ref": "CancelOperationRequest" + // }, + // "response": { + // "$ref": "Empty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.operations.get": + +type OperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this +// method to poll the operation result at intervals as recommended by +// the API +// service. +func (r *OperationsService) Get(name string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *OperationsGetCall) Fields(s ...googleapi.Field) *OperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *OperationsGetCall) IfNoneMatch(entityTag string) *OperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *OperationsGetCall) Context(ctx context.Context) *OperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *OperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *OperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *OperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.", + // "flatPath": "v1/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "cloudbuild.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^operations/.+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.operations.list": + +type OperationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the +// server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// NOTE: the `name` binding allows API services to override the +// binding +// to use different resource name schemes, such as `users/*/operations`. +// To +// override the binding, API services can add a binding such +// as +// "/v1/{name=users/*}/operations" to their service configuration. +// For backwards compatibility, the default name includes the +// operations +// collection id, however overriding users must ensure the name +// binding +// is the parent resource, without the operations collection id. +func (r *OperationsService) List(name string) *OperationsListCall { + c := &OperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *OperationsListCall) Filter(filter string) *OperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *OperationsListCall) PageSize(pageSize int64) *OperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *OperationsListCall) Fields(s ...googleapi.Field) *OperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *OperationsListCall) IfNoneMatch(entityTag string) *OperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *OperationsListCall) Context(ctx context.Context) *OperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *OperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *OperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *OperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`. To\noverride the binding, API services can add a binding such as\n`\"/v1/{name=users/*}/operations\"` to their service configuration.\nFor backwards compatibility, the default name includes the operations\ncollection id, however overriding users must ensure the name binding\nis the parent resource, without the operations collection id.", + // "flatPath": "v1/operations", + // "httpMethod": "GET", + // "id": "cloudbuild.operations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "path", + // "pattern": "^operations$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *OperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudbuild.projects.builds.cancel": + +type ProjectsBuildsCancelCall struct { + s *Service + projectId string + id string + cancelbuildrequest *CancelBuildRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Cancel: Cancels a build in progress. +func (r *ProjectsBuildsService) Cancel(projectId string, id string, cancelbuildrequest *CancelBuildRequest) *ProjectsBuildsCancelCall { + c := &ProjectsBuildsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.id = id + c.cancelbuildrequest = cancelbuildrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsBuildsCancelCall) Fields(s ...googleapi.Field) *ProjectsBuildsCancelCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsBuildsCancelCall) Context(ctx context.Context) *ProjectsBuildsCancelCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsBuildsCancelCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsBuildsCancelCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.cancelbuildrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/builds/{id}:cancel") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "id": c.id, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.builds.cancel" call. +// Exactly one of *Build or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Build.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsBuildsCancelCall) Do(opts ...googleapi.CallOption) (*Build, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Build{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Cancels a build in progress.", + // "flatPath": "v1/projects/{projectId}/builds/{id}:cancel", + // "httpMethod": "POST", + // "id": "cloudbuild.projects.builds.cancel", + // "parameterOrder": [ + // "projectId", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "ID of the build.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/builds/{id}:cancel", + // "request": { + // "$ref": "CancelBuildRequest" + // }, + // "response": { + // "$ref": "Build" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.builds.create": + +type ProjectsBuildsCreateCall struct { + s *Service + projectId string + build *Build + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Starts a build with the specified configuration. +// +// This method returns a long-running `Operation`, which includes the +// build +// ID. Pass the build ID to `GetBuild` to determine the build status +// (such as +// `SUCCESS` or `FAILURE`). +func (r *ProjectsBuildsService) Create(projectId string, build *Build) *ProjectsBuildsCreateCall { + c := &ProjectsBuildsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.build = build + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsBuildsCreateCall) Fields(s ...googleapi.Field) *ProjectsBuildsCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsBuildsCreateCall) Context(ctx context.Context) *ProjectsBuildsCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsBuildsCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsBuildsCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.build) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/builds") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.builds.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsBuildsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts a build with the specified configuration.\n\nThis method returns a long-running `Operation`, which includes the build\nID. Pass the build ID to `GetBuild` to determine the build status (such as\n`SUCCESS` or `FAILURE`).", + // "flatPath": "v1/projects/{projectId}/builds", + // "httpMethod": "POST", + // "id": "cloudbuild.projects.builds.create", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/builds", + // "request": { + // "$ref": "Build" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.builds.get": + +type ProjectsBuildsGetCall struct { + s *Service + projectId string + id string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Returns information about a previously requested build. +// +// The `Build` that is returned includes its status (such as +// `SUCCESS`, +// `FAILURE`, or `WORKING`), and timing information. +func (r *ProjectsBuildsService) Get(projectId string, id string) *ProjectsBuildsGetCall { + c := &ProjectsBuildsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.id = id + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsBuildsGetCall) Fields(s ...googleapi.Field) *ProjectsBuildsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsBuildsGetCall) IfNoneMatch(entityTag string) *ProjectsBuildsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsBuildsGetCall) Context(ctx context.Context) *ProjectsBuildsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsBuildsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsBuildsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/builds/{id}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "id": c.id, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.builds.get" call. +// Exactly one of *Build or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Build.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsBuildsGetCall) Do(opts ...googleapi.CallOption) (*Build, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Build{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns information about a previously requested build.\n\nThe `Build` that is returned includes its status (such as `SUCCESS`,\n`FAILURE`, or `WORKING`), and timing information.", + // "flatPath": "v1/projects/{projectId}/builds/{id}", + // "httpMethod": "GET", + // "id": "cloudbuild.projects.builds.get", + // "parameterOrder": [ + // "projectId", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "ID of the build.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/builds/{id}", + // "response": { + // "$ref": "Build" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.builds.list": + +type ProjectsBuildsListCall struct { + s *Service + projectId string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists previously requested builds. +// +// Previously requested builds may still be in-progress, or may have +// finished +// successfully or unsuccessfully. +func (r *ProjectsBuildsService) List(projectId string) *ProjectsBuildsListCall { + c := &ProjectsBuildsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + return c +} + +// Filter sets the optional parameter "filter": The raw filter text to +// constrain the results. +func (c *ProjectsBuildsListCall) Filter(filter string) *ProjectsBuildsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": Number of results to +// return in the list. +func (c *ProjectsBuildsListCall) PageSize(pageSize int64) *ProjectsBuildsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": Token to provide +// to skip to a particular spot in the list. +func (c *ProjectsBuildsListCall) PageToken(pageToken string) *ProjectsBuildsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsBuildsListCall) Fields(s ...googleapi.Field) *ProjectsBuildsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsBuildsListCall) IfNoneMatch(entityTag string) *ProjectsBuildsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsBuildsListCall) Context(ctx context.Context) *ProjectsBuildsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsBuildsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsBuildsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/builds") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.builds.list" call. +// Exactly one of *ListBuildsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListBuildsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsBuildsListCall) Do(opts ...googleapi.CallOption) (*ListBuildsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListBuildsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists previously requested builds.\n\nPreviously requested builds may still be in-progress, or may have finished\nsuccessfully or unsuccessfully.", + // "flatPath": "v1/projects/{projectId}/builds", + // "httpMethod": "GET", + // "id": "cloudbuild.projects.builds.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "filter": { + // "description": "The raw filter text to constrain the results.", + // "location": "query", + // "type": "string" + // }, + // "pageSize": { + // "description": "Number of results to return in the list.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to provide to skip to a particular spot in the list.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/builds", + // "response": { + // "$ref": "ListBuildsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsBuildsListCall) Pages(ctx context.Context, f func(*ListBuildsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudbuild.projects.builds.retry": + +type ProjectsBuildsRetryCall struct { + s *Service + projectId string + id string + retrybuildrequest *RetryBuildRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Retry: Creates a new build based on the specified build. +// +// This method creates a new build using the original build request, +// which may +// or may not result in an identical build. +// +// For triggered builds: +// +// * Triggered builds resolve to a precise revision; therefore a retry +// of a +// triggered build will result in a build that uses the same +// revision. +// +// For non-triggered builds that specify `RepoSource`: +// +// * If the original build built from the tip of a branch, the retried +// build +// will build from the tip of that branch, which may not be the same +// revision +// as the original build. +// * If the original build specified a commit sha or revision ID, the +// retried +// build will use the identical source. +// +// For builds that specify `StorageSource`: +// +// * If the original build pulled source from Google Cloud Storage +// without +// specifying the generation of the object, the new build will use the +// current +// object, which may be different from the original build source. +// * If the original build pulled source from Cloud Storage and +// specified the +// generation of the object, the new build will attempt to use the +// same +// object, which may or may not be available depending on the +// bucket's +// lifecycle management settings. +func (r *ProjectsBuildsService) Retry(projectId string, id string, retrybuildrequest *RetryBuildRequest) *ProjectsBuildsRetryCall { + c := &ProjectsBuildsRetryCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.id = id + c.retrybuildrequest = retrybuildrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsBuildsRetryCall) Fields(s ...googleapi.Field) *ProjectsBuildsRetryCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsBuildsRetryCall) Context(ctx context.Context) *ProjectsBuildsRetryCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsBuildsRetryCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsBuildsRetryCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.retrybuildrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/builds/{id}:retry") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "id": c.id, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.builds.retry" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsBuildsRetryCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new build based on the specified build.\n\nThis method creates a new build using the original build request, which may\nor may not result in an identical build.\n\nFor triggered builds:\n\n* Triggered builds resolve to a precise revision; therefore a retry of a\ntriggered build will result in a build that uses the same revision.\n\nFor non-triggered builds that specify `RepoSource`:\n\n* If the original build built from the tip of a branch, the retried build\nwill build from the tip of that branch, which may not be the same revision\nas the original build.\n* If the original build specified a commit sha or revision ID, the retried\nbuild will use the identical source.\n\nFor builds that specify `StorageSource`:\n\n* If the original build pulled source from Google Cloud Storage without\nspecifying the generation of the object, the new build will use the current\nobject, which may be different from the original build source.\n* If the original build pulled source from Cloud Storage and specified the\ngeneration of the object, the new build will attempt to use the same\nobject, which may or may not be available depending on the bucket's\nlifecycle management settings.", + // "flatPath": "v1/projects/{projectId}/builds/{id}:retry", + // "httpMethod": "POST", + // "id": "cloudbuild.projects.builds.retry", + // "parameterOrder": [ + // "projectId", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "Build ID of the original build.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/builds/{id}:retry", + // "request": { + // "$ref": "RetryBuildRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.triggers.create": + +type ProjectsTriggersCreateCall struct { + s *Service + projectId string + buildtrigger *BuildTrigger + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new `BuildTrigger`. +// +// This API is experimental. +func (r *ProjectsTriggersService) Create(projectId string, buildtrigger *BuildTrigger) *ProjectsTriggersCreateCall { + c := &ProjectsTriggersCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.buildtrigger = buildtrigger + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersCreateCall) Fields(s ...googleapi.Field) *ProjectsTriggersCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersCreateCall) Context(ctx context.Context) *ProjectsTriggersCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.buildtrigger) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.create" call. +// Exactly one of *BuildTrigger or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *BuildTrigger.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsTriggersCreateCall) Do(opts ...googleapi.CallOption) (*BuildTrigger, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &BuildTrigger{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new `BuildTrigger`.\n\nThis API is experimental.", + // "flatPath": "v1/projects/{projectId}/triggers", + // "httpMethod": "POST", + // "id": "cloudbuild.projects.triggers.create", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project for which to configure automatic builds.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers", + // "request": { + // "$ref": "BuildTrigger" + // }, + // "response": { + // "$ref": "BuildTrigger" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.triggers.delete": + +type ProjectsTriggersDeleteCall struct { + s *Service + projectId string + triggerId string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a `BuildTrigger` by its project ID and trigger +// ID. +// +// This API is experimental. +func (r *ProjectsTriggersService) Delete(projectId string, triggerId string) *ProjectsTriggersDeleteCall { + c := &ProjectsTriggersDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.triggerId = triggerId + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersDeleteCall) Fields(s ...googleapi.Field) *ProjectsTriggersDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersDeleteCall) Context(ctx context.Context) *ProjectsTriggersDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers/{triggerId}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("DELETE", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "triggerId": c.triggerId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.delete" call. +// Exactly one of *Empty or error will be non-nil. Any non-2xx status +// code is an error. Response headers are in either +// *Empty.ServerResponse.Header or (if a response was returned at all) +// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to +// check whether the returned error was because http.StatusNotModified +// was returned. +func (c *ProjectsTriggersDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Empty{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a `BuildTrigger` by its project ID and trigger ID.\n\nThis API is experimental.", + // "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + // "httpMethod": "DELETE", + // "id": "cloudbuild.projects.triggers.delete", + // "parameterOrder": [ + // "projectId", + // "triggerId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project that owns the trigger.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "triggerId": { + // "description": "ID of the `BuildTrigger` to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers/{triggerId}", + // "response": { + // "$ref": "Empty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.triggers.get": + +type ProjectsTriggersGetCall struct { + s *Service + projectId string + triggerId string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Returns information about a `BuildTrigger`. +// +// This API is experimental. +func (r *ProjectsTriggersService) Get(projectId string, triggerId string) *ProjectsTriggersGetCall { + c := &ProjectsTriggersGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.triggerId = triggerId + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersGetCall) Fields(s ...googleapi.Field) *ProjectsTriggersGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsTriggersGetCall) IfNoneMatch(entityTag string) *ProjectsTriggersGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersGetCall) Context(ctx context.Context) *ProjectsTriggersGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers/{triggerId}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "triggerId": c.triggerId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.get" call. +// Exactly one of *BuildTrigger or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *BuildTrigger.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsTriggersGetCall) Do(opts ...googleapi.CallOption) (*BuildTrigger, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &BuildTrigger{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns information about a `BuildTrigger`.\n\nThis API is experimental.", + // "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + // "httpMethod": "GET", + // "id": "cloudbuild.projects.triggers.get", + // "parameterOrder": [ + // "projectId", + // "triggerId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project that owns the trigger.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "triggerId": { + // "description": "ID of the `BuildTrigger` to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers/{triggerId}", + // "response": { + // "$ref": "BuildTrigger" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.triggers.list": + +type ProjectsTriggersListCall struct { + s *Service + projectId string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists existing `BuildTrigger`s. +// +// This API is experimental. +func (r *ProjectsTriggersService) List(projectId string) *ProjectsTriggersListCall { + c := &ProjectsTriggersListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + return c +} + +// PageSize sets the optional parameter "pageSize": Number of results to +// return in the list. +func (c *ProjectsTriggersListCall) PageSize(pageSize int64) *ProjectsTriggersListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": Token to provide +// to skip to a particular spot in the list. +func (c *ProjectsTriggersListCall) PageToken(pageToken string) *ProjectsTriggersListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersListCall) Fields(s ...googleapi.Field) *ProjectsTriggersListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsTriggersListCall) IfNoneMatch(entityTag string) *ProjectsTriggersListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersListCall) Context(ctx context.Context) *ProjectsTriggersListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("GET", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.list" call. +// Exactly one of *ListBuildTriggersResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *ListBuildTriggersResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsTriggersListCall) Do(opts ...googleapi.CallOption) (*ListBuildTriggersResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListBuildTriggersResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists existing `BuildTrigger`s.\n\nThis API is experimental.", + // "flatPath": "v1/projects/{projectId}/triggers", + // "httpMethod": "GET", + // "id": "cloudbuild.projects.triggers.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "pageSize": { + // "description": "Number of results to return in the list.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to provide to skip to a particular spot in the list.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "ID of the project for which to list BuildTriggers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers", + // "response": { + // "$ref": "ListBuildTriggersResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsTriggersListCall) Pages(ctx context.Context, f func(*ListBuildTriggersResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudbuild.projects.triggers.patch": + +type ProjectsTriggersPatchCall struct { + s *Service + projectId string + triggerId string + buildtrigger *BuildTrigger + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates a `BuildTrigger` by its project ID and trigger +// ID. +// +// This API is experimental. +func (r *ProjectsTriggersService) Patch(projectId string, triggerId string, buildtrigger *BuildTrigger) *ProjectsTriggersPatchCall { + c := &ProjectsTriggersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.triggerId = triggerId + c.buildtrigger = buildtrigger + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersPatchCall) Fields(s ...googleapi.Field) *ProjectsTriggersPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersPatchCall) Context(ctx context.Context) *ProjectsTriggersPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.buildtrigger) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers/{triggerId}") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("PATCH", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "triggerId": c.triggerId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.patch" call. +// Exactly one of *BuildTrigger or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *BuildTrigger.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsTriggersPatchCall) Do(opts ...googleapi.CallOption) (*BuildTrigger, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &BuildTrigger{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a `BuildTrigger` by its project ID and trigger ID.\n\nThis API is experimental.", + // "flatPath": "v1/projects/{projectId}/triggers/{triggerId}", + // "httpMethod": "PATCH", + // "id": "cloudbuild.projects.triggers.patch", + // "parameterOrder": [ + // "projectId", + // "triggerId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project that owns the trigger.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "triggerId": { + // "description": "ID of the `BuildTrigger` to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers/{triggerId}", + // "request": { + // "$ref": "BuildTrigger" + // }, + // "response": { + // "$ref": "BuildTrigger" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudbuild.projects.triggers.run": + +type ProjectsTriggersRunCall struct { + s *Service + projectId string + triggerId string + reposource *RepoSource + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Run: Runs a `BuildTrigger` at a particular source revision. +func (r *ProjectsTriggersService) Run(projectId string, triggerId string, reposource *RepoSource) *ProjectsTriggersRunCall { + c := &ProjectsTriggersRunCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.projectId = projectId + c.triggerId = triggerId + c.reposource = reposource + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsTriggersRunCall) Fields(s ...googleapi.Field) *ProjectsTriggersRunCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsTriggersRunCall) Context(ctx context.Context) *ProjectsTriggersRunCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsTriggersRunCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsTriggersRunCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.reposource) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers/{triggerId}:run") + urls += "?" + c.urlParams_.Encode() + req, err := http.NewRequest("POST", urls, body) + if err != nil { + return nil, err + } + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "projectId": c.projectId, + "triggerId": c.triggerId, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudbuild.projects.triggers.run" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsTriggersRunCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a `BuildTrigger` at a particular source revision.", + // "flatPath": "v1/projects/{projectId}/triggers/{triggerId}:run", + // "httpMethod": "POST", + // "id": "cloudbuild.projects.triggers.run", + // "parameterOrder": [ + // "projectId", + // "triggerId" + // ], + // "parameters": { + // "projectId": { + // "description": "ID of the project.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "triggerId": { + // "description": "ID of the trigger.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/projects/{projectId}/triggers/{triggerId}:run", + // "request": { + // "$ref": "RepoSource" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +}