Skip to content
This repository has been archived by the owner on Sep 22, 2020. It is now read-only.

Commit

Permalink
Merge pull request #37 from coinbase/bobg/track-step-locking-changes
Browse files Browse the repository at this point in the history
Track locking API changes in github.com/coinbase/step
  • Loading branch information
MrSaints committed Jun 3, 2020
2 parents 15e180f + 20116e6 commit 3099787
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 30 deletions.
33 changes: 21 additions & 12 deletions aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,40 +85,43 @@ func HasServiceName(r interface {
}

// S3API aws API
type S3API s3iface.S3API
type S3API = s3iface.S3API

// CFAPI is cloudfomration API
type CFAPI cloudformationiface.CloudFormationAPI
type CFAPI = cloudformationiface.CloudFormationAPI

// CWLAPI is cloud watch logs API
type CWLAPI cloudwatchlogsiface.CloudWatchLogsAPI
type CWLAPI = cloudwatchlogsiface.CloudWatchLogsAPI

// EC2API aws API
type EC2API ec2iface.EC2API
type EC2API = ec2iface.EC2API

// IAMAPI aws API
type IAMAPI iamiface.IAMAPI
type IAMAPI = iamiface.IAMAPI

// SFNAPI aws API
type SFNAPI sfniface.SFNAPI
type SFNAPI = sfniface.SFNAPI

// SNSAPI aws API
type SNSAPI snsiface.SNSAPI
type SNSAPI = snsiface.SNSAPI

// KINAPI kinesis api
type KINAPI kinesisiface.KinesisAPI
type KINAPI = kinesisiface.KinesisAPI

// DDBAPI DynamoDB api
type DDBAPI dynamodbiface.DynamoDBAPI
type DDBAPI = dynamodbiface.DynamoDBAPI

// SQSAPI SQS api
type SQSAPI sqsiface.SQSAPI
type SQSAPI = sqsiface.SQSAPI

// KMSAPI KMS api
type KMSAPI kmsiface.KMSAPI
type KMSAPI = kmsiface.KMSAPI

// LambdaAPI aws api
type LambdaAPI lambdaiface.LambdaAPI
type LambdaAPI = lambdaiface.LambdaAPI

// DynamoDBAPI aws API
type DynamoDBAPI = dynamodbiface.DynamoDBAPI

// Clients for AWS
type Clients interface {
Expand All @@ -134,6 +137,7 @@ type Clients interface {
KMS(region *string, accountID *string, role *string) KMSAPI
Lambda(region *string, accountID *string, role *string) LambdaAPI
CWL(region *string, accountID *string, role *string) CWLAPI
DynamoDBClient(region *string, accountID *string, role *string) DynamoDBAPI
}

// ClientsStr implementation
Expand Down Expand Up @@ -200,3 +204,8 @@ func (awsc *ClientsStr) KMS(region *string, accountID *string, role *string) KMS
func (awsc *ClientsStr) Lambda(region *string, accountID *string, role *string) LambdaAPI {
return lambda.New(awsc.Session(), awsc.Config(region, accountID, role))
}

// DynamoDBClient returns client for region account and role
func (awsc *ClientsStr) DynamoDBClient(region, account_id, role *string) DynamoDBAPI {
return dynamodb.New(awsc.Session(), awsc.Config(region, account_id, role))
}
6 changes: 6 additions & 0 deletions aws/mocks/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type MockClients struct {
SQSClient *SQSClient
KMSClient *KMSClient
LambdaClient *LambdaClient
DynamoDB *mocks.MockDynamoDBClient
}

// MockAWS mock clients
Expand All @@ -36,6 +37,7 @@ func MockAWS() *MockClients {
SQSClient: &SQSClient{},
KMSClient: &KMSClient{},
LambdaClient: &LambdaClient{},
DynamoDB: &mocks.MockDynamoDBClient{},
}
}

Expand Down Expand Up @@ -91,3 +93,7 @@ func (a *MockClients) KMS(*string, *string, *string) aws.KMSAPI {
func (a *MockClients) Lambda(*string, *string, *string) aws.LambdaAPI {
return a.LambdaClient
}

func (a *MockClients) DynamoDBClient(*string, *string, *string) aws.DynamoDBAPI {
return a.DynamoDB
}
36 changes: 25 additions & 11 deletions deployer/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"

"github.com/coinbase/fenrir/aws"
"github.com/coinbase/step/aws/dynamodb"
"github.com/coinbase/step/bifrost"
"github.com/coinbase/step/errors"
"github.com/coinbase/step/utils/to"
Expand Down Expand Up @@ -32,7 +33,7 @@ func Validate(awsc aws.Clients) DeployHandler {
release.SetDefaults(region, account)

if err := release.Validate(awsc.S3(release.AwsRegion, nil, nil)); err != nil {
return nil, &errors.BadReleaseError{err.Error()}
return nil, &errors.BadReleaseError{Cause: err.Error()}
}

if err := release.ValidateTemplate(
Expand All @@ -47,7 +48,7 @@ func Validate(awsc aws.Clients) DeployHandler {
awsc.Lambda(release.AwsRegion, release.AwsAccountID, assumedRole),
awsc.CWL(release.AwsRegion, release.AwsAccountID, assumedRole),
); err != nil {
return nil, &errors.BadReleaseError{err.Error()}
return nil, &errors.BadReleaseError{Cause: err.Error()}
}

return release, nil
Expand All @@ -58,7 +59,12 @@ func Validate(awsc aws.Clients) DeployHandler {
func Lock(awsc aws.Clients) interface{} {
return func(ctx context.Context, release *Release) (*Release, error) {
// returns LockExistsError, LockError
return release, release.GrabLocks(awsc.S3(release.AwsRegion, nil, nil))
err := release.GrabLocks(
awsc.S3(release.AwsRegion, nil, nil),
dynamodb.NewDynamoDBLocker(awsc.DynamoDBClient(nil, nil, nil)),
getLockTableNameFromContext(ctx, "-locks"),
)
return release, err
}
}

Expand All @@ -69,7 +75,7 @@ func CreateChangeSet(awsc aws.Clients) DeployHandler {
if err := release.CreateChangeSet(
awsc.CF(release.AwsRegion, release.AwsAccountID, assumedRole),
); err != nil {
return nil, &errors.BadReleaseError{err.Error()}
return nil, &errors.BadReleaseError{Cause: err.Error()}
}

return release, nil
Expand All @@ -94,7 +100,7 @@ func Execute(awsc aws.Clients) DeployHandler {
if err := release.Execute(
awsc.CF(release.AwsRegion, release.AwsAccountID, assumedRole),
); err != nil {
return nil, &errors.HaltError{err.Error()}
return nil, &errors.HaltError{Cause: err.Error()}
}

return release, nil
Expand All @@ -103,14 +109,17 @@ func Execute(awsc aws.Clients) DeployHandler {

// ReleaseLock releases lock with sucess
func ReleaseLock(awsc aws.Clients) DeployHandler {
return func(_ context.Context, release *Release) (*Release, error) {

if err := release.UnlockRoot(awsc.S3(release.AwsRegion, nil, nil)); err != nil {
return nil, &errors.LockError{err.Error()}
return func(ctx context.Context, release *Release) (*Release, error) {
err := release.UnlockRoot(
awsc.S3(release.AwsRegion, nil, nil),
dynamodb.NewDynamoDBLocker(awsc.DynamoDBClient(nil, nil, nil)),
getLockTableNameFromContext(ctx, "-locks"),
)
if err != nil {
return nil, &errors.LockError{Cause: err.Error()}
}

release.Success = to.Boolp(true)

return release, nil
}
}
Expand Down Expand Up @@ -140,7 +149,7 @@ func CleanUp(awsc aws.Clients) DeployHandler {
awsc.S3(release.AwsRegion, nil, nil),
awsc.CF(release.AwsRegion, release.AwsAccountID, assumedRole),
); err != nil {
return nil, &errors.CleanUpError{err.Error()}
return nil, &errors.CleanUpError{Cause: err.Error()}
}

// Add Error if if can be found
Expand All @@ -163,3 +172,8 @@ func CleanUp(awsc aws.Clients) DeployHandler {
return release, nil
}
}

func getLockTableNameFromContext(ctx context.Context, postfix string) string {
_, _, lambdaName := to.AwsRegionAccountLambdaNameFromContext(ctx)
return fmt.Sprintf("%s%s", lambdaName, postfix)
}
16 changes: 9 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
module github.com/coinbase/fenrir

require (
github.com/aws/aws-lambda-go v1.11.1
github.com/aws/aws-sdk-go v1.20.2
github.com/awslabs/goformation/v4 v4.6.0
github.com/coinbase/step v0.0.0-20200212195241-a6141d79bdd2
github.com/imdario/mergo v0.3.7 // indirect
github.com/aws/aws-lambda-go v1.17.0
github.com/aws/aws-sdk-go v1.31.9
github.com/awslabs/goformation/v4 v4.8.0
github.com/coinbase/step v1.0.2
github.com/imdario/mergo v0.3.9 // indirect
github.com/rogpeppe/godef v1.1.2 // indirect
github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522
github.com/stretchr/testify v1.4.0
github.com/xeipuuv/gojsonschema v1.1.0
github.com/stretchr/testify v1.5.1
github.com/xeipuuv/gojsonschema v1.2.0
golang.org/x/tools v0.0.0-20200601175630-2caf76543d99 // indirect
)

// This replaces goformation with a fork that has the fix on it
Expand Down
71 changes: 71 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,54 +1,125 @@
9fans.net/go v0.0.0-20181112161441-237454027057 h1:OcHlKWkAMJEF1ndWLGxp5dnJQkYM/YImUOvsBoz6h5E=
9fans.net/go v0.0.0-20181112161441-237454027057/go.mod h1:diCsxrliIURU9xsYtjCp5AbpQKqdhKmf0ujWDUSkfoY=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/DataDog/datadog-lambda-go v0.6.0 h1://2QePQGtIQAyFbsv/Bew4EX8VVBUaXltPyxp7rHkZo=
github.com/DataDog/datadog-lambda-go v0.6.0/go.mod h1:8IH+3AngDt+on4Fc7qeFAxj2h6oPuIgsXs5lEPFImto=
github.com/aws/aws-lambda-go v1.11.1 h1:wuOnhS5aqzPOWns71FO35PtbtBKHr4MYsPVt5qXLSfI=
github.com/aws/aws-lambda-go v1.11.1/go.mod h1:Rr2SMTLeSMKgD45uep9V/NP8tnbCcySgu04cx0k/6cw=
github.com/aws/aws-lambda-go v1.17.0 h1:Ogihmi8BnpmCNktKAGpNwSiILNNING1MiosnKUfU8m0=
github.com/aws/aws-lambda-go v1.17.0/go.mod h1:FEwgPLE6+8wcGBTe5cJN3JWurd1Ztm9zN4jsXsjzKKw=
github.com/aws/aws-sdk-go v1.17.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.20.2 h1:/BBeW8F4PPmvJ5jpFvgkCK4RJQXErNndVRnNhO2qEkQ=
github.com/aws/aws-sdk-go v1.20.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.31.8/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.31.9 h1:n+b34ydVfgC30j0Qm69yaapmjejQPW2BoDBX7Uy/tLI=
github.com/aws/aws-sdk-go v1.31.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-xray-sdk-go v1.0.0-rc.9/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04=
github.com/aws/aws-xray-sdk-go v1.0.1 h1:En3DuQ3fAIlNPKoMcAY7bv0lINCJPV0lElK8kEEXsKM=
github.com/aws/aws-xray-sdk-go v1.0.1/go.mod h1:tmxq1c+yeEbMh39OmRFuXOrse5ajRlMmDXJ6LrCVsIs=
github.com/awslabs/goformation/v3 v3.1.0/go.mod h1:hQ5RXo3GNm2laHWKizDzU5DsDy+yNcenSca2UxN0850=
github.com/awslabs/goformation/v4 v4.6.0 h1:5Dy1ZW4ruMlYlq6+PsSCEwW2w00wv7mkFr006VMIeng=
github.com/awslabs/goformation/v4 v4.6.0/go.mod h1:MBDN7u1lMNDoehbFuO4uPvgwPeolTMA2TzX1yO6KlxI=
github.com/awslabs/goformation/v4 v4.8.0 h1:UiUhyokRy3suEqBXTnipvY8klqY3Eyl4GCH17brraEc=
github.com/awslabs/goformation/v4 v4.8.0/go.mod h1:GcJULxCJfloT+3pbqCluXftdEK2AD/UqpS3hkaaBntg=
github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/coinbase/step v0.0.0-20200212195241-a6141d79bdd2 h1:d7hPr204gp/1D7XMw4/YLj++fyoUpXxUgpqtolSq+yw=
github.com/coinbase/step v0.0.0-20200212195241-a6141d79bdd2/go.mod h1:KofWhfd3TU0FFqZjUgwzIJesq92rmoRDU4fD50hVlWw=
github.com/coinbase/step v0.0.0-20200602175130-a93d5f027801 h1:r5DbiHjZQ+XX/2HplJDJG1kEXtfsGVtI18LjK0Tl4eQ=
github.com/coinbase/step v0.0.0-20200602175130-a93d5f027801/go.mod h1:Fj5jyW0N5uGKkxofpIlK04ZHgv9lvbpHbvwW0G1TP9o=
github.com/coinbase/step v1.0.1-beta h1:OX48iUl+qgVS7UO45fHJHn4nOJ9IOu15Z1W4Bb/ZBKM=
github.com/coinbase/step v1.0.2 h1:YFTSx3tv+KCHsazWwmOLyQbJgDcdbeXI+mR0Sp4RsBk=
github.com/coinbase/step v1.0.2/go.mod h1:Fj5jyW0N5uGKkxofpIlK04ZHgv9lvbpHbvwW0G1TP9o=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v0.0.0-20160907170601-6d212800a42e/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/grahamjenson/goformation/v4 v4.0.0-20200227205046-704c8e4046a8 h1:it/B9gzHESkO8iIw8HQP1C9yC5bIm7WsiSP57vxWJYo=
github.com/grahamjenson/goformation/v4 v4.0.0-20200227205046-704c8e4046a8/go.mod h1:GcJULxCJfloT+3pbqCluXftdEK2AD/UqpS3hkaaBntg=
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI=
github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/onsi/ginkgo v1.5.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.2.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/godef v1.1.2 h1:c5mCx0EcCORJOdVMREX7Lgh1raTxAHFmOfXdEB9u8Jw=
github.com/rogpeppe/godef v1.1.2/go.mod h1:WtY9A/ovuQ+UakAJ1/CEqwwulX/WJjb2kgkokCHi/GY=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sanathkr/go-yaml v0.0.0-20170819195128-ed9d249f429b h1:jUK33OXuZP/l6babJtnLo1qsGvq6G9so9KMflGAm4YA=
github.com/sanathkr/go-yaml v0.0.0-20170819195128-ed9d249f429b/go.mod h1:8458kAagoME2+LN5//WxE71ysZ3B7r22fdgb7qVmXSY=
github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522 h1:fOCp11H0yuyAt2wqlbJtbyPzSgaxHTv8uN1pMpkG1t8=
github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522/go.mod h1:tQTYKOQgxoH3v6dEmdHiz4JG+nbxWwM5fgPQUpSZqVQ=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
github.com/xeipuuv/gojsonschema v1.1.0 h1:ngVtJC9TY/lg0AA/1k48FYhBrhRoFlEmWzsehpNAaZg=
github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191021144547-ec77196f6094/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200226224502-204d844ad48d h1:loGv/4fxITSrCD4t2P8ZF4oUC4RlRFDAsczcoUS2g6c=
golang.org/x/tools v0.0.0-20200226224502-204d844ad48d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200601175630-2caf76543d99 h1:deddXmhOJb/bvD/4M/j2AUMrhHeh6GkqykJSCWyTNVk=
golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0=
Expand Down

0 comments on commit 3099787

Please sign in to comment.