Skip to content

Commit

Permalink
feat: Rule engine set up, add expr ruleset executor, outgoing API, js…
Browse files Browse the repository at this point in the history
…onnet … (erda-project#5253)

* Rule engine set up, add expr ruleset executor, outgoing API, jsonnet parser.

* Update table name and fix import.

* Extract outgoing api, add dingTalk action.

* Move to dop, code refactor.

* Fix action output set.
  • Loading branch information
shuofan authored Jul 25, 2022
1 parent d6c4139 commit 48d79aa
Show file tree
Hide file tree
Showing 15 changed files with 1,340 additions and 0 deletions.
33 changes: 33 additions & 0 deletions .erda/migrations/dop/20220713-erda_rule_set-base.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
CREATE TABLE IF NOT EXISTS `erda_rule` (
`id` varchar(36) NOT NULL COMMENT 'primary key',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'created time',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'updated time',
`name` varchar(191) NOT NULL DEFAULT '' COMMENT 'name',
`scope` varchar(191) NOT NULL DEFAULT '' COMMENT 'scope',
`scope_id` varchar(191) NOT NULL DEFAULT '' COMMENT 'scope id',
`event_type` varchar(191) NOT NULL DEFAULT '' COMMENT 'event type',
`code` varchar(1024) NOT NULL DEFAULT '' COMMENT 'code',
`params` varchar(2048) NOT NULL DEFAULT '' COMMENT 'actions',
`enabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'enabled',
`updator` varchar(191) NOT NULL DEFAULT '' COMMENT 'updator',
`soft_deleted_at` bigint(20) NOT NULL DEFAULT '0' COMMENT 'deleted at',
PRIMARY KEY (`id`),
KEY `idx_scope` (`scope`,`scope_id`, `event_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='erda rule';

CREATE TABLE IF NOT EXISTS `erda_rule_exec_history` (
`id` varchar(36) NOT NULL COMMENT 'primary key',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'created time',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'updated time',
`scope` varchar(191) NOT NULL DEFAULT '' COMMENT 'scope',
`scope_id` varchar(191) NOT NULL DEFAULT '' COMMENT 'scope id',
`rule_id` varchar(36) NOT NULL DEFAULT '' COMMENT 'rule_id',
`code` varchar(1024) NOT NULL DEFAULT '' COMMENT 'code',
`env` varchar(2048) NOT NULL DEFAULT '' COMMENT 'env',
`succeed` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'succeed',
`action_output` varchar(2048) NOT NULL DEFAULT '' COMMENT 'action output info',
`soft_deleted_at` bigint(20) NOT NULL DEFAULT '0' COMMENT 'deleted at',
PRIMARY KEY (`id`),
KEY `idx_rule_id` (`rule_id`),
KEY `idx_scope` (`scope`,`scope_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='erda rule execution history';
219 changes: 219 additions & 0 deletions api/proto/dop/rule/rule.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
syntax = "proto3";

package erda.dop.rule;
option go_package = "github.com/erda-project/erda-proto-go/dop/rule/pb";
import "google/api/annotations.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "common/openapi.proto";

service RuleService {
option (erda.common.openapi_service) = {
service: "dop",
auth: {
check_login: true,
check_token: true,
}
};

rpc Fire(FireRequest) returns (FireResponse) {
option (google.api.http) = {
post: "/api/rules/actions/fire",
};
option (erda.common.openapi) = {
path: "/api/rules/actions/fire",
};
};

rpc CreateRule(CreateRuleRequest) returns (CreateRuleResponse) {
option (google.api.http) = {
post: "/api/rules",
};
option (erda.common.openapi) = {
path: "/api/rules",
};
};

rpc GetRule(GetRuleRequest) returns (GetRuleResponse) {
option (google.api.http) = {
get: "/api/rules/{id}",
};
option (erda.common.openapi) = {
path: "/api/rules/{id}",
};
};

rpc UpdateRule(UpdateRuleRequest) returns (UpdateRuleResponse) {
option (google.api.http) = {
put: "/api/rules/{id}",
};
option (erda.common.openapi) = {
path: "/api/rules/{id}",
};
};

rpc ListRules(ListRulesRequest) returns (ListRulesResponse) {
option (google.api.http) = {
get: "/api/rules",
};
option (erda.common.openapi) = {
path: "/api/rules",
};
};

rpc DeleteRule(DeleteRuleRequest) returns (DeleteRuleResponse) {
option (google.api.http) = {
delete: "/api/rules/{id}",
};
option (erda.common.openapi) = {
path: "/api/rules/{id}",
};
};

rpc ListRuleExecHistory(ListRuleExecHistoryRequest) returns (ListRuleExecHistoryResponse) {
option (google.api.http) = {
get: "/api/rules/actions/list-exec-history",
};
option (erda.common.openapi) = {
path: "/api/rules/actions/list-exec-history",
};
};
}

message FireRequest {
string scope = 1;
string scopeID = 2;
string eventType = 3;
map<string, google.protobuf.Value> env = 4;
}

message Config {
optional string code = 2;
map<string, google.protobuf.Value> env = 4;
map<string, google.protobuf.Value> params = 5;
}

message FireResponse {
repeated bool output = 1;
}

message CreateRuleRequest {
string scope = 1;
string scopeID = 2;
string eventType = 3;
optional string code = 4;
string name = 5;
ActionParams params = 6;
bool enabled = 7;
}

message CreateRuleResponse {}

message GetRuleRequest {
string id = 1;
}

message GetRuleResponse {
Rule data = 1;
repeated string userIDs = 2;
}

message Rule {
string id = 1;
string name = 2;
string scope = 3;
string scopeID = 4;
string eventType = 5;
string code = 6;
ActionParams params = 7;
bool enabled = 8;
string updator = 9;
google.protobuf.Timestamp createdAt = 10;
google.protobuf.Timestamp updatedAt = 11;
}

message ActionParams {
repeated ActionNode nodes = 1;
}

message ActionNode {
DingTalkConfig dingTalk = 1;
string snippet = 2;
}

message DingTalkConfig {
string webhook = 1;
string signature = 2;
}

message UpdateRuleRequest {
string id = 1;
string scope = 2;
string scopeID = 3;
string code = 4;
string eventType = 5;
optional bool enabled = 6;
string name = 7;
ActionParams params = 8;
}

message UpdateRuleResponse {}

message ListRulesRequest {
string scope = 1;
string scopeID = 2;
string eventType = 3;
optional bool enabled = 4;
string name = 5;
string updator = 6;
int64 pageNo = 7;
int64 pageSize = 8;
}

message ListRulesResponse {
ListRulesResponseData data = 1;
repeated string userIDs = 2;
}

message ListRulesResponseData {
int64 total = 1;
repeated Rule list = 2;
}

message DeleteRuleRequest {
string id = 1;
}

message DeleteRuleResponse {}

message ListRuleExecHistoryRequest {
string scope = 1;
string scopeID = 2;
string eventType = 3;
int64 pageNo = 4;
int64 pageSize = 5;
string ruleID = 6;
optional bool succeed = 7;
}

message ListRuleExecHistoryResponse {
ListRuleExecHistoryResponseData data = 1;
repeated string userIDs = 2;
}

message ListRuleExecHistoryResponseData {
int64 total = 1;
repeated RuleExecHistory list = 2;
}

message RuleExecHistory {
string id = 1;
google.protobuf.Timestamp createdAt = 11;
string scope = 3;
string scopeID = 4;
string ruleID = 5;
string code = 6;
google.protobuf.Value env = 7;
bool succeed = 8;
string actionOutput = 9;
}
3 changes: 3 additions & 0 deletions cmd/dop/bootstrap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,7 @@ audit:
erda.core.user: {}
erda.core.user.kratos: {}
erda.core.user.uc: {}

erda.dop.rule: {}
erda.dop.rule.action.api: {}

1 change: 1 addition & 0 deletions cmd/dop/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import (
_ "github.com/erda-project/erda/internal/apps/dop/providers/issue/sync"
_ "github.com/erda-project/erda/internal/apps/dop/providers/project/home"
_ "github.com/erda-project/erda/internal/apps/dop/providers/projectpipeline"
_ "github.com/erda-project/erda/internal/apps/dop/providers/rule"
_ "github.com/erda-project/erda/internal/apps/dop/providers/taskerror"
_ "github.com/erda-project/erda/internal/pkg/audit"

Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ require (
github.com/aliyun/aliyun-oss-go-sdk v2.1.4+incompatible
github.com/andrianbdn/iospng v0.0.0-20180730113000-dccef1992541
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220314183648-97c793e446ba
github.com/antonmedv/expr v1.9.0
github.com/apache/thrift v0.14.2
github.com/appscode/go v0.0.0-20191119085241-0887d8ec2ecc
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
Expand Down Expand Up @@ -84,6 +85,7 @@ require (
github.com/golang/protobuf v1.5.2
github.com/golang/snappy v0.0.4
github.com/google/btree v1.0.1 // indirect
github.com/google/go-jsonnet v0.18.0
github.com/google/uuid v1.3.0
github.com/googlecloudplatform/flink-operator v0.0.0-00010101000000-000000000000
github.com/gorilla/mux v1.8.0
Expand Down
16 changes: 16 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4s
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
github.com/CloudyKit/jet v2.1.2+incompatible h1:ybZoYzMBdoijK6I+Ke3vg9GZsmlKo/ZhKdNMWz0P26c=
github.com/CloudyKit/jet v2.1.2+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20180321230639-1e456b1c68cb/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo=
Expand Down Expand Up @@ -231,6 +232,8 @@ github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQY
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220314183648-97c793e446ba h1:GzYOm7fQbUZvAWPPBKxGqCmzTXJ2AYuWz4187HVxjno=
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220314183648-97c793e446ba/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
github.com/antonmedv/expr v1.9.0 h1:j4HI3NHEdgDnN9p6oI6Ndr0G5QryMY0FNxT4ONrFDGU=
github.com/antonmedv/expr v1.9.0/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.14.2 h1:hY4rAyg7Eqbb27GB6gkhUKrRAuc8xRjlNtJq+LseKeY=
Expand Down Expand Up @@ -423,6 +426,7 @@ github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+
github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37 h1:X6mKGhCFOxrKeeHAjv/3UvT6e5RRxW6wRdlqlV6/H4w=
github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37/go.mod h1:DC3JtzuG7kxMvJ6dZmf2ymjNyoXwgtklr7FN+Um2B0U=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/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=
Expand Down Expand Up @@ -575,6 +579,8 @@ github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwL
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8=
github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM=
github.com/getkin/kin-openapi v0.49.0 h1:nKSq662fS0kZ11+Wu3FLg3GQGL0UuH1VxF8wV1QuDEU=
github.com/getkin/kin-openapi v0.49.0/go.mod h1:ZJSfy1PxJv2QQvH9EdBj3nupRTVvV42mkW6zKUlRBwk=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
Expand Down Expand Up @@ -838,6 +844,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-jsonnet v0.18.0 h1:/6pTy6g+Jh1a1I2UMoAODkqELFiVIdOxbNwv0DDzoOg=
github.com/google/go-jsonnet v0.18.0/go.mod h1:C3fTzyVJDslXdiTqw/bTFk7vSGyCtH3MGRbDfvEwGd0=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
Expand Down Expand Up @@ -1136,6 +1144,8 @@ github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH
github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk=
github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao=
github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58=
github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
Expand Down Expand Up @@ -1177,6 +1187,7 @@ github.com/mattn/go-oci8 v0.0.7/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mN
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
Expand Down Expand Up @@ -1586,6 +1597,8 @@ github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
Expand Down Expand Up @@ -1616,6 +1629,7 @@ github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIH
github.com/sabhiram/go-gitignore v0.0.0-20201211210132-54b8a0bf510f h1:8P2MkG70G76gnZBOPGwmMIgwBb/rESQuwsJ7K8ds4NE=
github.com/sabhiram/go-gitignore v0.0.0-20201211210132-54b8a0bf510f/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4=
github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10=
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
Expand Down Expand Up @@ -1716,6 +1730,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/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.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
Expand Down Expand Up @@ -2180,6 +2195,7 @@ golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down
Loading

0 comments on commit 48d79aa

Please sign in to comment.