From b4de4dab02b54d9b6cb9c0735bcd55be3bb9e22e Mon Sep 17 00:00:00 2001 From: TP Honey Date: Wed, 22 Dec 2021 10:11:02 +0000 Subject: [PATCH] (feat) remove drone-yaml dependency. use docker compiler for lint --- drone/convert/convert.go | 19 +----- drone/exec/exec.go | 19 ------ drone/lint/lint.go | 81 +++++++++++++++++++++--- drone/sign/sign.go | 130 ++++++++++++++++++++++++++++++++++++++- go.mod | 39 ++++++++++-- go.sum | 17 +++-- 6 files changed, 250 insertions(+), 55 deletions(-) diff --git a/drone/convert/convert.go b/drone/convert/convert.go index d9afa7b..98159b0 100644 --- a/drone/convert/convert.go +++ b/drone/convert/convert.go @@ -1,19 +1,15 @@ package convert import ( - "bytes" - "io" "io/ioutil" - "os" - "github.com/drone/drone-yaml/yaml/converter" "github.com/urfave/cli" ) // Command exports the convert command. var Command = cli.Command{ Name: "convert", - Usage: "convert legacy format", + Usage: " convert legacy format", ArgsUsage: "", Action: convert, Flags: []cli.Flag{ @@ -30,20 +26,9 @@ func convert(c *cli.Context) error { path = ".drone.yml" } - raw, err := ioutil.ReadFile(path) + _, err := ioutil.ReadFile(path) if err != nil { return err } - - res, err := converter.Convert(raw, converter.Metadata{Filename: path}) - if err != nil { - return err - } - - if c.Bool("save") { - return ioutil.WriteFile(path, res, 0644) - } - - _, err = io.Copy(os.Stderr, bytes.NewReader(res)) return err } diff --git a/drone/exec/exec.go b/drone/exec/exec.go index 3768d1d..c307507 100644 --- a/drone/exec/exec.go +++ b/drone/exec/exec.go @@ -20,7 +20,6 @@ import ( "github.com/drone/drone-yaml/yaml" "github.com/drone/drone-yaml/yaml/compiler" "github.com/drone/drone-yaml/yaml/compiler/transform" - "github.com/drone/drone-yaml/yaml/converter" "github.com/drone/drone-yaml/yaml/linter" "github.com/drone/signal" @@ -103,10 +102,7 @@ var Command = cli.Command{ "plugins/heroku", }, }, - - // // netrc parameters - // cli.StringFlag{ Name: "netrc-username", }, @@ -116,11 +112,7 @@ var Command = cli.Command{ cli.StringFlag{ Name: "netrc-machine", }, - - // // trigger parameters - // - cli.StringFlag{ Name: "branch", Usage: "branch name", @@ -170,17 +162,6 @@ func exec(c *cli.Context) error { if err != nil { return err } - - // this code is temporarily in place to detect and convert - // the legacy yaml configuration file to the new format. - dataS, err = converter.ConvertString(dataS, converter.Metadata{ - Filename: file, - Ref: c.String("ref"), - }) - if err != nil { - return err - } - manifest, err := yaml.ParseString(dataS) if err != nil { return err diff --git a/drone/lint/lint.go b/drone/lint/lint.go index 1c3bcfa..8f90829 100644 --- a/drone/lint/lint.go +++ b/drone/lint/lint.go @@ -1,15 +1,22 @@ package lint import ( - "github.com/drone/drone-yaml/yaml" - "github.com/drone/drone-yaml/yaml/linter" + "fmt" + "io/ioutil" + "strings" + + "github.com/drone-runners/drone-runner-docker/engine/linter" + "github.com/drone-runners/drone-runner-docker/engine/resource" + "github.com/drone/drone-go/drone" + "github.com/drone/envsubst" + "github.com/drone/runner-go/manifest" "github.com/urfave/cli" ) // Command exports the linter command. var Command = cli.Command{ Name: "lint", - Usage: "lint the yaml file", + Usage: "lint the yaml file, checks for yaml errors", ArgsUsage: "", Action: lint, Flags: []cli.Flag{ @@ -20,22 +27,78 @@ var Command = cli.Command{ }, } +type Flags struct { + Build drone.Build + Netrc drone.Netrc + Repo drone.Repo + Stage drone.Stage + System drone.System +} + func lint(c *cli.Context) error { + f := new(Flags) + f.Repo.Trusted = c.Bool("trusted") + var envs map[string]string + path := c.Args().First() if path == "" { path = ".drone.yml" } - manifest, err := yaml.ParseFile(path) + rawsource, err := ioutil.ReadFile(path) if err != nil { return err } - - for _, resource := range manifest.Resources { - if err := linter.Lint(resource, c.Bool("trusted")); err != nil { - return err + // string substitution function ensures that string replacement variables are escaped and quoted if they contain newlines. + subf := func(k string) string { + v := envs[k] + if strings.Contains(v, "\n") { + v = fmt.Sprintf("%q", v) + } + return v + } + // evaluates string replacement expressions and returns an update configuration. + config, err := envsubst.Eval(string(rawsource), subf) + if err != nil { + return err + } + // parse into manifests + inputManifests, err := manifest.ParseString(config) + if err != nil { + return err + } + for _, iter := range inputManifests.Resources { + if iter.GetType() == "docker" { + resource, err := resource.Lookup(iter.GetName(), inputManifests) + if err != nil { + return err + } + // lint the resource and return an error if any linting rules are broken + lint := linter.New() + err = lint.Lint(resource, &f.Repo) + if err != nil { + return err + } + fmt.Printf("%v\n", iter) + } + } + // now we can check the pipeline dependencies + // get a list of all the pipelines + allStages := map[string]struct{}{} + for _, iter := range inputManifests.Resources { + allStages[iter.GetName()] = struct{}{} + } + // we need to parse the file again into raw resources to access the dependencies + inputRawResources, err := manifest.ParseRawFile(path) + if err != nil { + return err + } + for _, iter := range inputRawResources { + for _, dep := range iter.Deps { + if _, ok := allStages[dep]; !ok { + return fmt.Errorf("Pipeline stage '%s' declares invalid dependency '%s'", iter.Name, dep) + } } } - return nil } diff --git a/drone/sign/sign.go b/drone/sign/sign.go index 7c9728c..b4991f6 100644 --- a/drone/sign/sign.go +++ b/drone/sign/sign.go @@ -1,11 +1,15 @@ package sign import ( + "bufio" + "bytes" "fmt" + "io" "io/ioutil" + "strings" + "github.com/buildkite/yaml" "github.com/drone/drone-cli/drone/internal" - "github.com/drone/drone-yaml/yaml/signer" "github.com/urfave/cli" ) @@ -55,9 +59,131 @@ func format(c *cli.Context) error { return nil } - data, err = signer.WriteTo(data, hmac) + data, err = writeTo(data, hmac) if err != nil { return err } return ioutil.WriteFile(path, data, 0644) } + +// Resource enums. +const ( + KindCron = "cron" + KindPipeline = "pipeline" + KindRegistry = "registry" + KindSecret = "secret" + KindSignature = "signature" +) + +type ( + // Manifest is a collection of Drone resources. + Manifest struct { + Resources []Resource + } + + // Resource represents a Drone resource. + Resource interface { + // GetVersion returns the resource version. + GetVersion() string + + // GetKind returns the resource kind. + GetKind() string + } + + // RawResource is a raw encoded resource with the + // resource kind and type extracted. + RawResource struct { + Version string + Kind string + Type string + Data []byte `yaml:"-"` + } + + resource struct { + Version string + Kind string `json:"kind"` + Type string `json:"type"` + } +) + +func writeTo(data []byte, hmac string) ([]byte, error) { + res, err := parseRawBytes(data) + return upsert(res, hmac), err +} + +func parseRawBytes(b []byte) ([]*RawResource, error) { + return parseRaw( + bytes.NewReader(b), + ) +} + +func parseRaw(r io.Reader) ([]*RawResource, error) { + const newline = '\n' + var resources []*RawResource + var resource *RawResource + + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := scanner.Text() + if isSeparator(line) { + resource = nil + } + if resource == nil { + resource = &RawResource{} + resources = append(resources, resource) + } + if isSeparator(line) { + continue + } + if isTerminator(line) { + break + } + if scanner.Err() == io.EOF { + break + } + resource.Data = append( + resource.Data, + line..., + ) + resource.Data = append( + resource.Data, + newline, + ) + } + for _, resource := range resources { + err := yaml.Unmarshal(resource.Data, resource) + if err != nil { + return nil, err + } + } + return resources, nil +} + +func upsert(res []*RawResource, hmac string) []byte { + var buf bytes.Buffer + for _, r := range res { + if r.Kind != KindSignature { + buf.WriteString("---") + buf.WriteByte('\n') + buf.Write(r.Data) + } + } + buf.WriteString("---") + buf.WriteByte('\n') + buf.WriteString("kind: signature") + buf.WriteByte('\n') + buf.WriteString("hmac: " + hmac) + buf.WriteByte('\n') + buf.WriteByte('\n') + buf.WriteString("...") + buf.WriteByte('\n') + return buf.Bytes() +} + +func isSeparator(s string) bool { + return strings.HasPrefix(s, "---") +} + +func isTerminator(s string) bool { + return strings.HasPrefix(s, "...") +} diff --git a/go.mod b/go.mod index 99f9b37..c4ac089 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,19 @@ module github.com/drone/drone-cli -go 1.16 +go 1.17 replace github.com/docker/docker => github.com/docker/engine v17.12.0-ce-rc1.0.20200309214505-aa6a9891b09c+incompatible require ( - github.com/containerd/containerd v1.5.8 // indirect + github.com/buildkite/yaml v2.1.0+incompatible github.com/docker/go-units v0.4.0 - github.com/drone/drone-go v1.7.0 + github.com/drone-runners/drone-runner-docker v1.8.0 + github.com/drone/drone-go v1.7.1 github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d github.com/drone/drone-yaml v0.0.0-20190729072335-70fa398b3560 github.com/drone/envsubst v1.0.3 github.com/drone/funcmap v0.0.0-20190918184546-d4ef6e88376d + github.com/drone/runner-go v1.12.0 github.com/drone/signal v1.0.0 github.com/fatih/color v1.9.0 github.com/ghodss/yaml v1.0.0 @@ -20,7 +22,6 @@ require ( github.com/joho/godotenv v1.3.0 github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.11 - github.com/opencontainers/image-spec v1.0.2 // indirect github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 github.com/stretchr/testify v1.6.1 github.com/urfave/cli v1.22.2 @@ -28,3 +29,33 @@ require ( golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d ) + +require ( + github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e // indirect + github.com/Microsoft/go-winio v0.4.17 // indirect + github.com/bmatcuk/doublestar v1.1.1 // indirect + github.com/containerd/containerd v1.5.8 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/distribution v2.7.1+incompatible // indirect + github.com/docker/docker v1.13.1 // indirect + github.com/docker/go-connections v0.3.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.0 // indirect + github.com/natessilva/dag v0.0.0-20180124060714-7194b8dcc5c4 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/russross/blackfriday/v2 v2.0.1 // indirect + github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect + golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 // indirect + google.golang.org/appengine v1.6.6 // indirect + google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a // indirect + google.golang.org/grpc v1.33.2 // indirect + google.golang.org/protobuf v1.27.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) diff --git a/go.sum b/go.sum index 8c379ed..d150fe4 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= docker.io/go-docker v1.0.0/go.mod h1:7tiAn5a0LFmjbPDbyTPOaTTOuG1ZRNXdPA6RvKY+fpY= +github.com/99designs/basicauth-go v0.0.0-20160802081356-2a93ba0f464d/go.mod h1:3cARGAK9CfW3HoxCy1a0G4TKrdiKke8ftOMEOHyySYs= github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e h1:rl2Aq4ZODqTDkeSqQBy+fzpZPamacO1Srp8zq7jf2Sc= github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e/go.mod h1:Xa6lInWHNQnuWoF0YPSsx+INFA9qk7/7pTjwb3PInkY= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -220,6 +221,7 @@ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjI github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -244,17 +246,23 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/drone/drone-go v1.7.0 h1:oEFWVcagBmAkVuFBpBq9lImZX1caDM+zRsmC4O1vXgQ= -github.com/drone/drone-go v1.7.0/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg= +github.com/drone-runners/drone-runner-docker v1.8.0 h1:cNjEAxAR/crqfcRyqoumPaHdulfUdj5x2aB2oArvBno= +github.com/drone-runners/drone-runner-docker v1.8.0/go.mod h1:Jdm+apC9XcDGlgdXH+wHjegwqW2oMH9+RR6TfAOu9D8= +github.com/drone/drone-go v1.7.1 h1:ZX+3Rs8YHUSUQ5mkuMLmm1zr1ttiiE2YGNxF3AnyDKw= +github.com/drone/drone-go v1.7.1/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg= github.com/drone/drone-runtime v1.0.7-0.20190729070836-38f28a11afe8/go.mod h1:+osgwGADc/nyl40J0fdsf8Z09bgcBZXvXXnLOY48zYs= github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d h1:P5HI/Y9hARTZ3F3EKs0kYijhjXZWQRQHYn1neTi0pWM= github.com/drone/drone-runtime v1.1.1-0.20200623162453-61e33e2cab5d/go.mod h1:4/2QToW5+HGD0y1sTw7X35W1f7YINS14UfDY4isggT8= github.com/drone/drone-yaml v0.0.0-20190729072335-70fa398b3560 h1:3QL4NnDpGtaXpgI9eNd6N2k5WK8W388CzD67ZTuuZQg= github.com/drone/drone-yaml v0.0.0-20190729072335-70fa398b3560/go.mod h1:rCLISp/rqZ50s6G4nKsm971tRSzolxzqqXfgjDqPYoE= +github.com/drone/envsubst v1.0.2/go.mod h1:bkZbnc/2vh1M12Ecn7EYScpI4YGYU0etwLJICOWi8Z0= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= github.com/drone/funcmap v0.0.0-20190918184546-d4ef6e88376d h1:/IO7UVVu191Jc0DajV4cDVoO+91cuppvgxg2MZl+AXI= github.com/drone/funcmap v0.0.0-20190918184546-d4ef6e88376d/go.mod h1:Hph0/pT6ZxbujnE1Z6/08p5I0XXuOsppqF6NQlGOK0E= +github.com/drone/runner-go v1.11.0/go.mod h1:vu4pPPYDoeN6vdYQAY01GGGsAIW4aLganJNaa8Fx8zE= +github.com/drone/runner-go v1.12.0 h1:zUjDj9ylsJ4n4Mvy4znddq/Z4EBzcUXzTltpzokKtgs= +github.com/drone/runner-go v1.12.0/go.mod h1:vu4pPPYDoeN6vdYQAY01GGGsAIW4aLganJNaa8Fx8zE= github.com/drone/signal v1.0.0 h1:NrnM2M/4yAuU/tXs6RP1a1ZfxnaHwYkd0kJurA1p6uI= github.com/drone/signal v1.0.0/go.mod h1:S8t92eFT0g4WUgEc/LxG+LCuiskpMNsG0ajAMGnyZpc= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -418,6 +426,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -498,7 +507,6 @@ github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go. github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -622,7 +630,6 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vinzenz/yaml v0.0.0-20170920082545-91409cdd725d h1:3wDi6J5APMqaHBVPuVd7RmHD2gRTfqbdcVSpCNoUWtk= github.com/vinzenz/yaml v0.0.0-20170920082545-91409cdd725d/go.mod h1:mb5taDqMnJiZNRQ3+02W2IFG+oEz1+dTuCXkp4jpkfo= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= @@ -665,6 +672,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -929,6 +937,7 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=