diff --git a/build b/build index c76140f7f..2789a6097 100755 --- a/build +++ b/build @@ -1,4 +1,5 @@ #!/usr/bin/env bash + source ./scripts/test_lib.sh GIT_SHA=$(git rev-parse --short HEAD || echo "GitNotFound") diff --git a/build.sh b/build.sh new file mode 120000 index 000000000..c795b054e --- /dev/null +++ b/build.sh @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/scripts/fix.sh b/scripts/fix.sh new file mode 100755 index 000000000..4508c44df --- /dev/null +++ b/scripts/fix.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -e + +source ./scripts/test_lib.sh +source ./scripts/updatebom.sh + +function mod_tidy_fix { + run rm ./go.sum || return 2 + run go mod tidy || return 2 +} + +log_callout -e "\nFixing etcd code for you...\n" + +run_for_modules run go fmt || exit 2 +run_for_modules mod_tidy_fix || exit 2 +run_for_module tests bom_fix || exit 2 + +log_success -e "\nSUCCESS: etcd code is fixed :)" diff --git a/scripts/install_tool.sh b/scripts/install_tool.sh deleted file mode 100755 index 05a788825..000000000 --- a/scripts/install_tool.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Usage ./install_tool.sh {go_module} -# -# Install given tool and makes it available on $PATH (assuming standard config), -# without modification to vendor or go.mod file. -# -# When https://github.com/golang/go/issues/40276 is implemented, usage -# of this script should get replaced by pure: -# -# go install {go_module}@latest -# -set -e - ->&2 echo "installing: ${1}" -( - cd "$(mktemp -d)" - GO111MODULE=on go get "$1" -) diff --git a/scripts/test_lib.sh b/scripts/test_lib.sh index f14c887e5..cd8b5b32d 100644 --- a/scripts/test_lib.sh +++ b/scripts/test_lib.sh @@ -1,6 +1,11 @@ #!/usr/bin/env bash -ETCD_ROOT_DIR="$(pwd)" +if [[ "$(go list)" != "go.etcd.io/etcd/v3" ]]; then + echo "must be run from 'go.etcd.io/etcd/v3' module directory" + exit 255 +fi + +ETCD_ROOT_DIR=$(go list -f '{{.Dir}}' "go.etcd.io/etcd/v3") #### Convenient IO methods ##### @@ -8,11 +13,13 @@ COLOR_RED='\033[0;31m' COLOR_ORANGE='\033[0;33m' COLOR_GREEN='\033[0;32m' COLOR_LIGHTCYAN='\033[0;36m' - +COLOR_BLUE='\033[0;94m' +COLOR_MAGENTA='\033[95m' +COLOR_BOLD='\033[1m' COLOR_NONE='\033[0m' # No Color function log_error { - >&2 echo -n -e "${COLOR_RED}" + >&2 echo -n -e "${COLOR_BOLD}${COLOR_RED}" >&2 echo "$@" >&2 echo -n -e "${COLOR_NONE}" } @@ -29,6 +36,12 @@ function log_callout { >&2 echo -n -e "${COLOR_NONE}" } +function log_cmd { + >&2 echo -n -e "${COLOR_BLUE}" + >&2 echo "$@" + >&2 echo -n -e "${COLOR_NONE}" +} + function log_success { >&2 echo -n -e "${COLOR_GREEN}" >&2 echo "$@" @@ -70,8 +83,8 @@ function run { repro="${command[*]}" fi - log_callout "% ${repro}" - "${@}" 2> >(while read -r line; do echo -e "\e[01;31m$line\e[0m" >&2; done) + log_cmd "% ${repro}" + "${@}" 2> >(while read -r line; do echo -e "stderr: ${COLOR_MAGENTA}${line}${COLOR_NONE}" >&2; done) local error_code=$? if [ ${error_code} -ne 0 ]; then log_error -e "FAIL: (code:${error_code}):\n % ${repro}" @@ -87,7 +100,7 @@ function run_for_module { local module=${1:-"."} shift 1 ( - cd "${module}" && "$@" + cd "${ETCD_ROOT_DIR}/${module}" && "$@" ) } @@ -211,13 +224,15 @@ function tool_exists { # tool_get_bin [tool] - returns absolute path to a tool binary (or returns error) function tool_get_bin { - tool_exists "gobin" "GO111MODULE=off go get -u github.com/myitcv/gobin" || return 2 + tool_exists "gobin" "GO111MODULE=off go get github.com/myitcv/gobin" || return 2 local tool="$1" if [[ "$tool" == *"@"* ]]; then - run gobin -p "${tool}" || return 2 + # shellcheck disable=SC2086 + run gobin ${GOBINARGS} -p "${tool}" || return 2 else - run_for_module ./tools/mod run gobin -p -m --mod=readonly "${tool}" || return 2 + # shellcheck disable=SC2086 + run_for_module ./tools/mod run gobin ${GOBINARGS} -p -m --mod=readonly "${tool}" || return 2 fi } @@ -237,3 +252,5 @@ function run_go_tool { run "${cmdbin}" "$@" || return 2 } +# Ensure gobin is available, as it runs majority of the tools +run env GO111MODULE=off go get github.com/myitcv/gobin diff --git a/scripts/updatebom.sh b/scripts/updatebom.sh index d479abb86..ec2551f6e 100755 --- a/scripts/updatebom.sh +++ b/scripts/updatebom.sh @@ -1,17 +1,38 @@ #!/usr/bin/env bash set -e +source ./scripts/test_lib.sh -if ! [[ "$0" =~ scripts/updatebom.sh ]]; then - echo "must be run from repository root" - exit 255 -fi +function bom_fixlet { + log_callout "generating bill-of-materials.json" -./scripts/install_tool.sh github.com/coreos/license-bill-of-materials + cp go.mod go.mod.tmp + cp go.sum go.sum.tmp -echo "generating bill-of-materials.json" -license-bill-of-materials \ - --override-file ./bill-of-materials.override.json \ - go.etcd.io/etcd/v3 go.etcd.io/etcd/v3/etcdctl > bill-of-materials.json + local modules + # shellcheck disable=SC2207 + modules=($(modules_exp)) -echo "generated bill-of-materials.json" + if GOFLAGS=-mod=mod run_go_tool "github.com/coreos/license-bill-of-materials" \ + --override-file ../bill-of-materials.override.json \ + "${modules[@]}" > ../bill-of-materials.json.tmp; then + cp ../bill-of-materials.json.tmp ../bill-of-materials.json + log_success "bom refreshed" + else + log_error "FAIL: bom refreshing failed" + fi + mv go.mod.tmp go.mod + mv go.sum.tmp go.sum +} + +function bom_fix { + # We regenerate bom from the tests directory, as it's a module + # that depends on all other modules, so we can generate comprehensive content. + # TODO: Migrate to root module, when root module depends on everything (including server & tests). + run_for_module "./tests" bom_fixlet +} + +# only build when called directly, not sourced +if [[ "$0" =~ updatebom.sh$ ]]; then + bom_fix +fi \ No newline at end of file diff --git a/test b/test index 9c38ca0e6..b1b576a72 100755 --- a/test +++ b/test @@ -33,13 +33,17 @@ # $ go tool cover -html ./coverage/cover.out set -e +# Consider command as failed when any component of the pipe fails: +# https://stackoverflow.com/questions/1221833/pipe-output-and-capture-exit-status-in-bash +set -o pipefail + # The test script is not supposed to make any changes to the files # e.g. add/update missing dependencies. Such divergences should be # detected and trigger a failure that needs explicit developer's action. export GOFLAGS=-mod=readonly -source ./build source ./scripts/test_lib.sh +source ./build PASSES=${PASSES:-"fmt bom dep build unit"} PKG=${PKG:-} @@ -207,12 +211,6 @@ function pkg_to_coverprofileflag { } function cov_pass { - # gocovmerge merges coverage files - if ! command -v gocovmerge >/dev/null; then - log_error "gocovmerge not installed (need: ./scripts/install_tool.sh github.com/gyuho/gocovmerge)" - return 255 - fi - # shellcheck disable=SC2153 if [ -z "$COVERDIR" ]; then log_error "COVERDIR undeclared" @@ -267,7 +265,7 @@ function cov_pass { # incrementally merge to get coverage data even if some coverage files are corrupted for f in "${coverdir}"/*.coverprofile; do echo "merging test coverage file ${f}" - gocovmerge "${f}" "${cover_out_file}" > "${coverdir}/cover.tmp" || failed="$failed gocovmerge:$f" + run_go_tool "github.com/gyuho/gocovmerge" "${f}" "${cover_out_file}" > "${coverdir}/cover.tmp" || failed="$failed gocovmerge:$f" if [ -s "${coverdir}"/cover.tmp ]; then mv "${coverdir}/cover.tmp" "${cover_out_file}" fi @@ -336,50 +334,38 @@ function govet_pass { } function govet_shadow_pass { - if tool_exists "shadow" "./scripts/install_tool.sh golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow"; then - run_for_modules generic_checker run go vet -all -vettool="$(command -v shadow)" - fi + local shadow + shadow=$(tool_get_bin "golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow") + run_for_modules generic_checker run go vet -all -vettool="${shadow}" } function unparam_pass { - if tool_exists "unparam" "./scripts/install_tool.sh mvdan.cc/unparam"; then - run_for_modules generic_checker run unparam - fi + run_for_modules generic_checker run_go_tool "mvdan.cc/unparam" } function staticcheck_pass { - if tool_exists "staticcheck" "./scripts/install_tool.sh honnef.co/go/tools/cmd/staticcheck"; then - run_for_modules generic_checker run staticcheck - fi + run_for_modules generic_checker run_go_tool "honnef.co/go/tools/cmd/staticcheck" } function revive_pass { - if tool_exists "revive" "./scripts/install_tool.sh github.com/mgechev/revive"; then - run_for_modules generic_checker run revive -config "${ETCD_ROOT_DIR}/tests/revive.toml" -exclude "vendor/..." - fi + run_for_modules generic_checker run_go_tool "github.com/mgechev/revive" -config "${ETCD_ROOT_DIR}/tests/revive.toml" -exclude "vendor/..." } function unconvert_pass { - if tool_exists "unconvert" "./scripts/install_tool.sh github.com/mdempsky/unconvert"; then - run_for_modules generic_checker run unconvert -v - fi + run_for_modules generic_checker run_go_tool "github.com/mdempsky/unconvert" unconvert -v } function ineffassign_per_package { mapfile -t gofiles < <(go_srcs_in_module "$1") - run ineffassign "${gofiles[@]}" + run_go_tool github.com/gordonklaus/ineffassign "${gofiles[@]}" } function ineffassign_pass { - if tool_exists "ineffassign" "./scripts/install_tool.sh github.com/gordonklaus/ineffassign"; then - run_for_modules generic_checker ineffassign_per_package - fi + run_for_modules generic_checker ineffassign_per_package } function nakedret_pass { - if tool_exists "nakedret" "./scripts/install_tool.sh github.com/alexkohler/nakedret"; then - run_for_modules generic_checker run nakedret - fi + run_for_modules generic_checker run_go_tool "github.com/alexkohler/nakedret" } function license_header_pass { @@ -441,23 +427,31 @@ function commit_title_pass { # goword_for_package package # checks spelling and comments in the 'package' in the current module +# function goword_for_package { mapfile -t gofiles < <(go_srcs_in_module "$1") + local gowordRes + + # spellchecking can be enabled with GOBINARGS="--tags=spell" + # but it requires heavy dependencies installation, like: + # apt-get install libaspell-dev libhunspell-dev hunspell-en-us aspell-en + # only check for broke exported godocs - gowordRes=$(run goword -use-spell=false "${gofiles[@]}" | grep godoc-export | sort) - if [ -n "$gowordRes" ]; then + if gowordRes=$(run_go_tool "github.com/chzchzchz/goword" -use-spell=false "${gofiles[@]}" | grep godoc-export | sort); then log_error -e "goword checking failed:\\n${gowordRes}" return 255 fi + if [ -n "$gowordRes" ]; then + log_error -e "goword checking returned output:\\n${gowordRes}" + return 255 + fi } function goword_pass { - if tool_exists "goword" "./scripts_install_tool.sh github.com/chzchzchz/goword"; then - run_for_modules goword_for_package - fi + run_for_modules goword_for_package || return 255 # check some spelling - gowordRes=$(run goword -ignore-file=.words clientv3/{*,*/*}.go | grep spell | sort) + gowordRes=$(run_go_tool "github.com/chzchzchz/goword" -ignore-file=.words clientv3/{*,*/*}.go | grep spell | sort) if [ -n "$gowordRes" ]; then log_error -e "goword checking failed:\\n${gowordRes}" return 255 @@ -475,11 +469,6 @@ function gofmt_pass { } function bom_pass { - if ! command -v license-bill-of-materials >/dev/null; then - log_warning "./license-bill-of-materials not FOUND" - log_warning "USE: ./scripts/install_tool.sh github.com/coreos/license-bill-of-materials" - return - fi log_callout "Checking bill of materials..." # https://github.com/golang/go/commit/7c388cc89c76bc7167287fb488afcaf5a4aa12bf ( @@ -491,7 +480,7 @@ function bom_pass { run cp go.sum go.sum.tmp || return 2 run cp go.mod go.mod.tmp || return 2 - output=$(GOFLAGS=-mod=mod run license-bill-of-materials \ + output=$(GOFLAGS=-mod=mod run_go_tool github.com/coreos/license-bill-of-materials \ --override-file ../bill-of-materials.override.json \ "${modules[@]}") code="$?" diff --git a/test.sh b/test.sh new file mode 120000 index 000000000..30d74d258 --- /dev/null +++ b/test.sh @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/tests/Dockerfile b/tests/Dockerfile index d21c50204..52923686a 100644 --- a/tests/Dockerfile +++ b/tests/Dockerfile @@ -44,16 +44,8 @@ WORKDIR ${GOPATH}/src/go.etcd.io/etcd ADD ./scripts/install-marker.sh /tmp/install-marker.sh -RUN go get -v -u -tags spell github.com/chzchzchz/goword \ - && go get -v -u github.com/coreos/license-bill-of-materials \ - && go get -v -u github.com/mgechev/revive \ - && go get -v -u github.com/mdempsky/unconvert \ - && go get -v -u mvdan.cc/unparam \ - && go get -v -u honnef.co/go/tools/cmd/staticcheck \ - && go get -v -u github.com/gyuho/gocovmerge \ - && go get -v -u github.com/gordonklaus/ineffassign \ - && go get -v -u github.com/alexkohler/nakedret \ - && /tmp/install-marker.sh amd64 \ +RUN GO111MODULE=off go get github.com/myitcv/gobin +RUN /tmp/install-marker.sh amd64 \ && rm -f /tmp/install-marker.sh \ && curl -s https://codecov.io/bash >/codecov \ - && chmod 700 /codecov \ No newline at end of file + && chmod 700 /codecov diff --git a/tools/mod/go.mod b/tools/mod/go.mod index 0634a330d..522b394ec 100644 --- a/tools/mod/go.mod +++ b/tools/mod/go.mod @@ -3,13 +3,24 @@ module go.etcd.io/etcd/tools/v3 go 1.15 require ( + github.com/akhenakh/hunspellgo v0.0.0-20160221122622-9db38fa26e19 // indirect + github.com/alexkohler/nakedret v1.0.0 + github.com/chzchzchz/goword v0.0.0-20170907005317-a9744cb52b03 + github.com/coreos/license-bill-of-materials v0.0.0-20190913234955-13baff47494e github.com/ghodss/yaml v1.0.0 // indirect github.com/go-openapi/loads v0.19.5 // indirect github.com/go-openapi/spec v0.19.9 // indirect github.com/gogo/protobuf v1.0.0 + github.com/gordonklaus/ineffassign v0.0.0-20200809085317-e36bfde3bb78 github.com/grpc-ecosystem/grpc-gateway v1.4.1 + github.com/gyuho/gocovmerge v0.0.0-20171205171859-50c7e6afd535 github.com/hexfusion/schwag v0.0.0-20170606222847-b7d0fc9aadaa + github.com/mdempsky/unconvert v0.0.0-20200228143138-95ecdbfc0b5f + github.com/mgechev/revive v1.0.2 + github.com/trustmaster/go-aspell v0.0.0-20200701131845-c2b1f55bec8f // indirect go.etcd.io/protodoc v0.0.0-20180829002748-484ab544e116 google.golang.org/genproto v0.0.0-20201008135153-289734e2e40c // indirect gopkg.in/yaml.v2 v2.3.0 // indirect + honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc + mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 ) diff --git a/tools/mod/go.sum b/tools/mod/go.sum index 7c1745a4d..3242eb391 100644 --- a/tools/mod/go.sum +++ b/tools/mod/go.sum @@ -1,24 +1,38 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/akhenakh/hunspellgo v0.0.0-20160221122622-9db38fa26e19 h1:bYOD6QJnBJY79MJQR1i9cyQePG5oNDZXDKL2bhN/uvE= +github.com/akhenakh/hunspellgo v0.0.0-20160221122622-9db38fa26e19/go.mod h1:HcqyLXmWoESd/vPSbCPqvgw5l5cMM5PtoqFOnXLjSeM= +github.com/alexkohler/nakedret v1.0.0 h1:S/bzOFhZHYUJp6qPmdXdFHS5nlWGFmLmoc8QOydvotE= +github.com/alexkohler/nakedret v1.0.0/go.mod h1:tfDQbtPt67HhBK/6P0yNktIX7peCxfOp0jO9007DrLE= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzchzchz/goword v0.0.0-20170907005317-a9744cb52b03 h1:0wUHjDfbCAROEAZ96zAJGwcNMkPIheFaIjtQyv3QqfM= +github.com/chzchzchz/goword v0.0.0-20170907005317-a9744cb52b03/go.mod h1:uFE9hX+zXEwvyUThZ4gDb9vkAwc5DoHUnRSEpH0VrOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/license-bill-of-materials v0.0.0-20190913234955-13baff47494e h1:vHRufSa2k8tfkcDdia1vJFa+oiBvvPxW94mg76PPAoA= +github.com/coreos/license-bill-of-materials v0.0.0-20190913234955-13baff47494e/go.mod h1:4xMOusJ7xxc84WclVxKT8+lNfGYDwojOUC2OQNCwcj4= 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/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.19.10 h1:5BHISBAXOc/aJK25irLZnx2D3s6WyYaY9D4gmuz9fdE= github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= @@ -99,8 +113,12 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gordonklaus/ineffassign v0.0.0-20200809085317-e36bfde3bb78 h1:U/zHjaVG/sECz5xhnh7kPH+Fv/maPbhZPcaTquo5sPg= +github.com/gordonklaus/ineffassign v0.0.0-20200809085317-e36bfde3bb78/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/grpc-ecosystem/grpc-gateway v1.4.1 h1:pX7cnDwSSmG0dR9yNjCQSSpmsJOqFdT7SzVp5Yl9uVw= github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/gyuho/gocovmerge v0.0.0-20171205171859-50c7e6afd535 h1:BGeD3v3lyKZy+ocGtprXiDXjIiXvZDfuyII7Lym7GbQ= +github.com/gyuho/gocovmerge v0.0.0-20171205171859-50c7e6afd535/go.mod h1:xV7b0Cn2irnP1jU+mMYvqPAPuFPNjtgB+rvKu/dLIz4= github.com/hexfusion/schwag v0.0.0-20170606222847-b7d0fc9aadaa h1:oDcxzjIf33MTX7b8Eu7eO3a/z8mlTT+blyEoVxBmUUg= github.com/hexfusion/schwag v0.0.0-20170606222847-b7d0fc9aadaa/go.mod h1:wSgrm+n3LvHOVxUJo2ha5ffLqRmt6+oGoD6J/suB66c= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -125,19 +143,39 @@ github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8 github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mdempsky/unconvert v0.0.0-20200228143138-95ecdbfc0b5f h1:Kc3s6QFyh9DLgInXpWKuG+8I7R7lXbnP7mcoOVIt6KY= +github.com/mdempsky/unconvert v0.0.0-20200228143138-95ecdbfc0b5f/go.mod h1:AmCV4WB3cDMZqgPk+OUQKumliiQS4ZYsBt3AXekyuAU= +github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81 h1:QASJXOGm2RZ5Ardbc86qNFvby9AqkLDibfChMtAg5QM= +github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.0.2 h1:v0NxxQ7fSFz/u1NQydPo6EGdq7va0J1BtsZmae6kzUg= +github.com/mgechev/revive v1.0.2/go.mod h1:rb0dQy1LVAxW9SWy5R3LPUjevzUbUS316U5MFySA2lo= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w= +github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -153,8 +191,11 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/trustmaster/go-aspell v0.0.0-20200701131845-c2b1f55bec8f h1:92ZQJRegaqnKjz9HY9an696Sw5EmAqRv0eie/U2IE6k= +github.com/trustmaster/go-aspell v0.0.0-20200701131845-c2b1f55bec8f/go.mod h1:wxUiQ1klFJmwnM41kQI7IT2g8jjOKbtuL54LdjkxAI0= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/protodoc v0.0.0-20180829002748-484ab544e116 h1:QQiUXlqz+d96jyNG71NE+IGTgOK6Xlhdx+PzvfbLHlQ= go.etcd.io/protodoc v0.0.0-20180829002748-484ab544e116/go.mod h1:F9kog+iVAuvPJucb1dkYcDcbV0g4uyGEHllTP5NrXiw= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -165,10 +206,14 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +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-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -176,6 +221,7 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r 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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -185,15 +231,19 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= @@ -208,7 +258,14 @@ golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 h1:QjA/9ArTfVTLfEhClDCG7SGrZkZixxWpwNCDiwJfh88= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200225230052-807dcd883420/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b h1:zSzQJAznWxAh9fZxiPy2FZo+ZZEYoYFYYDYdOrU7AaM= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/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/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= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -234,6 +291,9 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -242,4 +302,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 h1:kAREL6MPwpsk1/PQPFD3Eg7WAQR5mPTWZJaBiG5LDbY= +mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= diff --git a/tools/mod/install_all.sh b/tools/mod/install_all.sh new file mode 100755 index 000000000..7de5fb014 --- /dev/null +++ b/tools/mod/install_all.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +cd ./tools/mod || exit 2 +go list --tags tools -f '{{ join .Imports "\n" }}' | xargs gobin -p diff --git a/tools/mod/libs.go b/tools/mod/libs.go new file mode 100644 index 000000000..0d05c2185 --- /dev/null +++ b/tools/mod/libs.go @@ -0,0 +1,25 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build libs + +// This file implements that pattern: +// https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module +// for etcd. Thanks to this file 'go mod tidy' does not removes dependencies. + +package libs + +import ( + _ "github.com/gogo/protobuf/proto" +) diff --git a/tools/mod/tools.go b/tools/mod/tools.go index f358ec691..36be0523c 100644 --- a/tools/mod/tools.go +++ b/tools/mod/tools.go @@ -21,10 +21,18 @@ package tools import ( - _ "github.com/gogo/protobuf/proto" // Uncomment when upgrading to >1.9.0 version // _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" + _ "github.com/alexkohler/nakedret" + _ "github.com/chzchzchz/goword" + _ "github.com/coreos/license-bill-of-materials" + _ "github.com/gordonklaus/ineffassign" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" + _ "github.com/gyuho/gocovmerge" _ "github.com/hexfusion/schwag" + _ "github.com/mdempsky/unconvert" + _ "github.com/mgechev/revive" _ "go.etcd.io/protodoc" + _ "honnef.co/go/tools/cmd/staticcheck" + _ "mvdan.cc/unparam" )