Repository: scionproto/scion
Pull request #3419 (2019-11-21 12:25:53)

Add go.mod file, use as master for go_deps.bzl
Add `go.mod` file; semi-manually generated from bazel dependencies. Some tweaks:
* Explicitly specify version for dependencies vendored in quic-go (sidh, qtls, genny). This is required because go mod ignores indirect vendored dependencies.
* Update jaeger-client-go (to latest) to make go mod tidy work (cf. jaegertracing/jaeger-client-go#463)
* Add new dependency go.uber.org/atomic for jaeger-client-go
* Update go-colorable to fix warning about logrus importpath

Generate go_deps.bzl from `go.mod` by invoking `make godeps` -- the `godeps` target is just an alias for `make go_deps.bzl` to keep the usage somewhat consistent.

Remove `goenv`, `vendor` and make targets.
Remove  `bzlcompat` requirement.

To make the base build work, exclude various unused dependencies (these are indirect test dependencies) in fetch.sh.

Add CI step to check go_deps.bzl is up to date with go.mod, and that go.mod and go.sum are tidy.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/scionproto/scion/3419)
<!-- Reviewable:end -->


matzf: The `fetch.sh` seems even nastier now, it requires many trial-and-error steps to make it work. The only simple alternatives I can see are:
* run `bazel sync`; the generated cache is huge though (~3.5G, compressed)
* copy all the BUILD files into the build container and run something like `bazel fetch //:gazelle //:scion //:scion-ci //:lint //:build-tools //:nogo //docker/perapp:debug //docker/perapp:prod`; not tested, not sure if this would work

Patch:
diff --git a/.buildkite/scripts/build_scion_img b/.buildkite/scripts/build_scion_img
index 00370f487..94297d9d7 100755
--- a/.buildkite/scripts/build_scion_img
+++ b/.buildkite/scripts/build_scion_img
@@ -2,7 +2,7 @@
 
 set -e
 
-BASE_IMG=${BASE_IMG:-0205ea7cec1b767e10117a341730b08907233c5351e8ed0d7ca135ea8a5caa59}
+BASE_IMG=${BASE_IMG:-c0c1ef3cd34839113931328fd2400d38ce79c22b322070a1e03df5837290c124}
 
 docker pull scionproto/scion_base@sha256:$BASE_IMG
 docker tag scionproto/scion_base@sha256:$BASE_IMG scion_base:latest
diff --git a/Makefile b/Makefile
index a3c6a81bd..1904b8be6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all clean goenv gogen vendor mocks bazel gazelle setcap
+.PHONY: all clean godeps gogen mocks bazel gazelle setcap
 
 BRACCEPT = bin/braccept
 
@@ -9,7 +9,7 @@ all: bazel
 clean:
 	bazel clean
 	rm -f bin/*
-	if [ -e go/vendor ]; then rm -r go/vendor; fi
+	if [ -e go/vendor ]; then rm -r go/vendor; fi  # Cleanup from old setup with vendor
 
 gogen:
 ifndef GOGEN_SKIP
@@ -18,20 +18,23 @@ else
 	@echo "gogen: skipped"
 endif
 
-goenv: vendor
-	bazel fetch "kind('go_(default_library|test|binary)', //...)"
+ifndef GODEPS_SKIP
+godeps: go_deps.bzl
+else
+godeps:
+	@echo "godeps: skipped"
+endif
 
-vendor:
-	if [ -e go/vendor ]; then rm -r go/vendor; fi
-	bzlcompat -vendorBase=go
+go_deps.bzl: go.mod
+	@tools/godeps.sh
 
-bazel: vendor gogen
+bazel: godeps gogen
 	rm -f bin/*
 	bazel build //:scion //:scion-ci
 	tar -kxf bazel-bin/scion.tar -C bin
 	tar -kxf bazel-bin/scion-ci.tar -C bin
 
-mocks: goenv
+mocks:
 	./tools/gomocks
 
 gazelle:
diff --git a/README.md b/README.md
index 708ecff28..494cd1ad1 100644
--- a/README.md
+++ b/README.md
@@ -44,13 +44,6 @@ Necessary steps in order to run SCION:
    rm ./bazel-0.26.1-installer-linux-x86_64.sh
    ```
 
-1. Install [bzlcompat](https://github.com/kormat/bzlcompat) version v0.6:
-
-   ```bash
-   wget https://github.com/kormat/bzlcompat/releases/download/v0.6/bzlcompat-v0.6-linux-x86_64 -O ~/bin/bzlcompat
-   chmod 755 ~/bin/bzlcompat
-   ```
-
 1. Make sure that you have a
    [Go workspace](https://golang.org/doc/code.html#GOPATH) setup, and that
    `~/.local/bin`, and `$GOPATH/bin` can be found in your `$PATH` variable. For example:
diff --git a/WORKSPACE b/WORKSPACE
index 5a3f81446..cd6472347 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -122,6 +122,7 @@ load("//:tool_deps.bzl", "tool_deps")
 
 tool_deps()
 
+# gazelle:repository_macro go_deps.bzl%go_deps
 load("//:go_deps.bzl", "go_deps")
 
 go_deps()
diff --git a/docker/perapp/base/Dockerfile.builder b/docker/perapp/base/Dockerfile.builder
index 60a7f2ef0..f0e87f4fa 100644
--- a/docker/perapp/base/Dockerfile.builder
+++ b/docker/perapp/base/Dockerfile.builder
@@ -1,3 +1,3 @@
 FROM scion:latest
 COPY bazelrc.quiet ~/.bazelrc
-RUN make -s GOGEN_SKIP=1 all setcap && bazel clean
+RUN make -s GODEPS_SKIP=1 GOGEN_SKIP=1 all setcap && bazel clean
diff --git a/go.mod b/go.mod
new file mode 100644
index 000000000..d8955ca7e
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,61 @@
+module github.com/scionproto/scion
+
+require (
+	github.com/BurntSushi/toml v0.3.1
+	github.com/antlr/antlr4 v0.0.0-20181218183524-be58ebffde8e
+	github.com/buildkite/go-buildkite v2.2.1-0.20190413010238-568b6651b687+incompatible
+	github.com/cenkalti/backoff v2.2.1+incompatible // indirect
+	github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 // indirect
+	github.com/cloudflare/sidh v0.0.0-20181111220428-fc8e6378752b // indirect
+	github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect
+	github.com/dchest/cmac v0.0.0-20150527144652-62ff55a1048c
+	github.com/go-ini/ini v1.32.0
+	github.com/golang/mock v1.2.1-0.20190329180013-73dc87cad333
+	github.com/google/go-cmp v0.3.0
+	github.com/google/go-querystring v1.0.1-0.20190318165438-c8c88dbee036 // indirect
+	github.com/google/gopacket v1.1.16-0.20190123011826-102d5ca2098c
+	github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365
+	github.com/inconshreveable/log15 v0.0.0-20161013181240-944cbfb97b44
+	github.com/inconshreveable/mousetrap v1.0.0 // indirect
+	github.com/kormat/fmt15 v0.0.0-20181112140556-ee69fecb2656
+	github.com/lucas-clemente/quic-go v0.7.1-0.20190212114006-fd7246d7ed6e
+	github.com/marten-seemann/qtls v0.0.0-20190207043627-591c71538704 // indirect
+	github.com/mattn/go-colorable v0.1.4 // indirect
+	github.com/mattn/go-isatty v0.0.8
+	github.com/mattn/go-sqlite3 v1.9.1-0.20180719091609-b3511bfdd742
+	github.com/onsi/ginkgo v1.10.3 // indirect
+	github.com/onsi/gomega v1.7.1 // indirect
+	github.com/opentracing/opentracing-go v1.1.0
+	github.com/patrickmn/go-cache v2.1.1-0.20180815053127-5633e0862627+incompatible
+	github.com/pierrec/lz4 v1.0.1
+	github.com/pierrec/xxHash v0.0.0-20170714082455-a0006b13c722 // indirect
+	github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9 // indirect
+	github.com/prometheus/client_golang v1.1.0
+	github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
+	github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44
+	github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d
+	github.com/smartystreets/goconvey v1.6.4
+	github.com/songgao/water v0.0.0-20170524165202-99d07fc117af
+	github.com/spf13/cobra v0.0.3-0.20180408161736-cd30c2a7e91a
+	github.com/spf13/pflag v1.0.1-0.20180403115518-1ce0cc6db402 // indirect
+	github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709
+	github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4
+	github.com/uber/jaeger-client-go v2.20.1+incompatible
+	github.com/uber/jaeger-lib v2.0.0+incompatible // indirect
+	github.com/vishvananda/netlink v0.0.0-20170924180554-177f1ceba557
+	github.com/vishvananda/netns v0.0.0-20170219233438-54f0e4339ce7 // indirect
+	go.uber.org/atomic v1.5.1 // indirect
+	golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
+	golang.org/x/net v0.0.0-20191105084925-a882066a44e0
+	golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c
+	golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
+	gopkg.in/ini.v1 v1.51.0 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.0.0-20161007184028-e21e5cbec0cd
+	gopkg.in/restruct.v1 v1.0.0-20151213023948-80ede2e57cc2
+	gopkg.in/yaml.v2 v2.2.4
+	zombiezen.com/go/capnproto2 v0.0.0-20190813022230-ddfb9bb855fa
+)
+
+replace github.com/smartystreets/goconvey => github.com/kormat/goconvey v0.0.0-20191113114839-63cc4eee0dbc
+
+go 1.13
diff --git a/go.sum b/go.sum
new file mode 100644
index 000000000..19a0b26d8
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,208 @@
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/antlr/antlr4 v0.0.0-20181218183524-be58ebffde8e h1:yxMh4HIdsSh2EqxUESWvzszYMNzOugRyYCeohfwNULM=
+github.com/antlr/antlr4 v0.0.0-20181218183524-be58ebffde8e/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/buildkite/go-buildkite v2.2.1-0.20190413010238-568b6651b687+incompatible h1:wELXQi9HWcUzDcns3k5p3Qj9hLN6jrnO8uwcC6ba/ac=
+github.com/buildkite/go-buildkite v2.2.1-0.20190413010238-568b6651b687+incompatible/go.mod h1:WTV0aX5KnQ9ofsKMg2CLUBLJNsQ0RwOEKPhrXXZWPcE=
+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/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 h1:a1zrFsLFac2xoM6zG1u72DWJwZG3ayttYLfmLbxVETk=
+github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
+github.com/cloudflare/sidh v0.0.0-20181111220428-fc8e6378752b h1:pqwbJdj1rgMkE38tDSNnP97wdMYHzV+Lt/aLL2qw2LQ=
+github.com/cloudflare/sidh v0.0.0-20181111220428-fc8e6378752b/go.mod h1:o/DcCuWFr9jFzwO+c3y1hhwqKHHKfJ7HvLhWUwRnqfo=
+github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
+github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+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/cmac v0.0.0-20150527144652-62ff55a1048c h1:qoavXEzRRUfup81LsDQv4fnUQbLyorpPz6WxiwdiU7A=
+github.com/dchest/cmac v0.0.0-20150527144652-62ff55a1048c/go.mod h1:vWqNmss2I/DL9JKC95Lkwp+lzw+v8hwsQs7hQKyQpwk=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-ini/ini v1.32.0 h1:/MArBHSS0TFR28yPPDK1vPIjt4wUnPBfb81i6iiyKvA=
+github.com/go-ini/ini v1.32.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang/mock v1.2.1-0.20190329180013-73dc87cad333 h1:T7BbTPTeAnatnqlwwWt+77l0YF8UBKcWf1GEK5M9YQ8=
+github.com/golang/mock v1.2.1-0.20190329180013-73dc87cad333/go.mod h1:L3bP22mxdfCUHSUVMs+SPJMx55FrxQew7MSXT11Q86g=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-querystring v1.0.1-0.20190318165438-c8c88dbee036 h1:Avad62mreCc9la5buHvHZXbvsY+GPYUVjd8xsi48FYY=
+github.com/google/go-querystring v1.0.1-0.20190318165438-c8c88dbee036/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gopacket v1.1.16-0.20190123011826-102d5ca2098c h1:eR3RuANqlK0CQoHJxUdXQNsco+gJykcti01+wqBCuPs=
+github.com/google/gopacket v1.1.16-0.20190123011826-102d5ca2098c/go.mod h1:UCLx9mCmAwsVbn6qQl1WIEt2SO7Nd2fD0th1TBAsqBw=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww=
+github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
+github.com/inconshreveable/log15 v0.0.0-20161013181240-944cbfb97b44 h1:KyyrbB0Qcnv9SwgbcYQKK6L191WKsIq2hiYj6lsrcTU=
+github.com/inconshreveable/log15 v0.0.0-20161013181240-944cbfb97b44/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
+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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kormat/fmt15 v0.0.0-20181112140556-ee69fecb2656 h1:aG3mi6+atPavBL5PM/s0XqiRuJ2n08aEY9xza16XGTo=
+github.com/kormat/fmt15 v0.0.0-20181112140556-ee69fecb2656/go.mod h1:8fpYQL5jskFnAq4zE2UpspqEVHuTjurptCxHPpdoBgM=
+github.com/kormat/goconvey v0.0.0-20191113114839-63cc4eee0dbc h1:NMGRuyMGEPkT+2ll1+M00ubrzqHa4Kfboygqql2mcgA=
+github.com/kormat/goconvey v0.0.0-20191113114839-63cc4eee0dbc/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/lucas-clemente/quic-go v0.7.1-0.20190212114006-fd7246d7ed6e h1:Y07tY5Q2/7WwkwZHxYlQC4mQeD1kM6BQLk/6S64KHY4=
+github.com/lucas-clemente/quic-go v0.7.1-0.20190212114006-fd7246d7ed6e/go.mod h1:wuD+2XqEx8G9jtwx5ou2BEYBsE+whgQmlj0Vz/77PrY=
+github.com/marten-seemann/qtls v0.0.0-20190207043627-591c71538704 h1:7Fx1paF8onfPhcIMlwgznBklz62TrCZjOjoBbUod/3Y=
+github.com/marten-seemann/qtls v0.0.0-20190207043627-591c71538704/go.mod h1:DWDPNN1eWKaT5wsnMz2LR336Zh9hlw/YSRXxqEukrT8=
+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 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-sqlite3 v1.9.1-0.20180719091609-b3511bfdd742 h1:CxNxKbYu7Gc9ATyoSyjSLzf9wEryOLLhU5YCOR6x6MU=
+github.com/mattn/go-sqlite3 v1.9.1-0.20180719091609-b3511bfdd742/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/patrickmn/go-cache v2.1.1-0.20180815053127-5633e0862627+incompatible h1:MUIwjEiAMYk8zkXXUQeb5itrXF+HpS2pfxNsA2a7AiY=
+github.com/patrickmn/go-cache v2.1.1-0.20180815053127-5633e0862627+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
+github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
+github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
+github.com/pierrec/lz4 v1.0.1 h1:w6GMGWSsCI04fTM8wQRdnW74MuJISakuUU0onU0TYB4=
+github.com/pierrec/lz4 v1.0.1/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/xxHash v0.0.0-20170714082455-a0006b13c722 h1:nDDVHJzMIpkkKZpBBhV60OLwII/BvZSn4PijkMEKdTo=
+github.com/pierrec/xxHash v0.0.0-20170714082455-a0006b13c722/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9 h1:PCj9X21C4pet4sEcElTfAi6LSl5ShkjE8doieLc+cbU=
+github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9/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_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc=
+github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/songgao/water v0.0.0-20170524165202-99d07fc117af h1:ubYDIJXsE4CmJ0CB0j57XpQ4s8hdxQhnl/OOpe9EA8s=
+github.com/songgao/water v0.0.0-20170524165202-99d07fc117af/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E=
+github.com/spf13/cobra v0.0.3-0.20180408161736-cd30c2a7e91a h1:fkxjXeX1GqxICegQuav3Fpff2VNAMfqaPWZvI+dRqa0=
+github.com/spf13/cobra v0.0.3-0.20180408161736-cd30c2a7e91a/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.1-0.20180403115518-1ce0cc6db402 h1:PzXGtoglK0gKAmoFi5ec8tZKKnTTxJM+3i7w/qw+Hf0=
+github.com/spf13/pflag v1.0.1-0.20180403115518-1ce0cc6db402/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+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.3.1-0.20190311161405-34c6fa2dc709 h1:Ko2LQMrRU+Oy/+EDBwX7eZ2jp3C47eDBB8EIhKTun+I=
+github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4 h1:w58e6FAOMd+rUgOfhaBb+ZVOQIOfUkpv5AAQVmf6hsI=
+github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
+github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
+github.com/uber/jaeger-client-go v2.20.1+incompatible h1:HgqpYBng0n7tLJIlyT4kPCIv5XgCsF+kai1NnnrJzEU=
+github.com/uber/jaeger-client-go v2.20.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw=
+github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/vishvananda/netlink v0.0.0-20170924180554-177f1ceba557 h1:rg73JByvxSA/EIL/nVpTcVKP2DKy4Jw5bNJ+DxD4B+U=
+github.com/vishvananda/netlink v0.0.0-20170924180554-177f1ceba557/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
+github.com/vishvananda/netns v0.0.0-20170219233438-54f0e4339ce7 h1:n630V+sEHbl2OrlWFxLoMoGPnUuniQ9eDvUaEmUdXaY=
+github.com/vishvananda/netns v0.0.0-20170219233438-54f0e4339ce7/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
+go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM=
+go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/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-20191105084925-a882066a44e0 h1:QPlSTtPE2k6PZPasQUbzuK3p9JbS+vMXYVto8g/yrsg=
+golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c h1:IGkKhmfzcztjm6gYkykvu/NiS8kaqbCWAEWWAyf8J5U=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0-20161007184028-e21e5cbec0cd h1:UbkH2e+uFHEHh0PqjhdFQAdnx2KuBdcF6HpYSdJBDMw=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0-20161007184028-e21e5cbec0cd/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/restruct.v1 v1.0.0-20151213023948-80ede2e57cc2 h1:pqzOumCQ6icMR4sIIYRe2w7xCERvcPOFx22W9jSRsWg=
+gopkg.in/restruct.v1 v1.0.0-20151213023948-80ede2e57cc2/go.mod h1:WJaLhyHHEQFOgwIxu/SJxvUHJA18glYsMETBTMIySTY=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+zombiezen.com/go/capnproto2 v0.0.0-20190813022230-ddfb9bb855fa h1:oaUsHxHA/DGY+XtWA4i5FLMxwWheqW21Az6xSLS1OzY=
+zombiezen.com/go/capnproto2 v0.0.0-20190813022230-ddfb9bb855fa/go.mod h1:lwDtzVwsLXcHGddc2q1vAWPfocWiFh07Mmeqo/Oatko=
diff --git a/go_deps.bzl b/go_deps.bzl
index 44b69015f..4fcf98162 100644
--- a/go_deps.bzl
+++ b/go_deps.bzl
@@ -1,311 +1,557 @@
+# Generated from go.mod by gazelle. DO NOT EDIT
 load("@bazel_gazelle//:deps.bzl", "go_repository")
 
 def go_deps():
+    go_repository(
+        name = "com_github_alecthomas_template",
+        importpath = "github.com/alecthomas/template",
+        sum = "h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=",
+        version = "v0.0.0-20160405071501-a0175ee3bccc",
+    )
+    go_repository(
+        name = "com_github_alecthomas_units",
+        importpath = "github.com/alecthomas/units",
+        sum = "h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=",
+        version = "v0.0.0-20151022065526-2efee857e7cf",
+    )
+    go_repository(
+        name = "com_github_antlr_antlr4",
+        importpath = "github.com/antlr/antlr4",
+        sum = "h1:yxMh4HIdsSh2EqxUESWvzszYMNzOugRyYCeohfwNULM=",
+        version = "v0.0.0-20181218183524-be58ebffde8e",
+    )
+    go_repository(
+        name = "com_github_beorn7_perks",
+        importpath = "github.com/beorn7/perks",
+        sum = "h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=",
+        version = "v1.0.1",
+    )
+    go_repository(
+        name = "com_github_buildkite_go_buildkite",
+        importpath = "github.com/buildkite/go-buildkite",
+        sum = "h1:wELXQi9HWcUzDcns3k5p3Qj9hLN6jrnO8uwcC6ba/ac=",
+        version = "v2.2.1-0.20190413010238-568b6651b687+incompatible",
+    )
     go_repository(
         name = "com_github_burntsushi_toml",
-        commit = "a368813c5e648fee92e5f6c30e3944ff9d5e8895",
         importpath = "github.com/BurntSushi/toml",
+        sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=",
+        version = "v0.3.1",
     )
-
     go_repository(
-        name = "com_github_antlr_antlr4",
-        commit = "be58ebffde8e29c154192c019608f0a5b8e6a064",
-        importpath = "github.com/antlr/antlr4",  # runtime/Go/antlr
+        name = "com_github_cenkalti_backoff",
+        importpath = "github.com/cenkalti/backoff",
+        sum = "h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=",
+        version = "v2.2.1+incompatible",
     )
-
     go_repository(
-        name = "com_github_axw_gocov",
-        commit = "54b98cfcac0c63fb3f9bd8e7ad241b724d4e985b",
-        importpath = "github.com/axw/gocov",
+        name = "com_github_cheekybits_genny",
+        importpath = "github.com/cheekybits/genny",
+        sum = "h1:a1zrFsLFac2xoM6zG1u72DWJwZG3ayttYLfmLbxVETk=",
+        version = "v0.0.0-20170328200008-9127e812e1e9",
     )
-
     go_repository(
-        name = "com_github_beorn7_perks",
-        commit = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9",
-        importpath = "github.com/beorn7/perks",  # histogram
+        name = "com_github_cloudflare_sidh",
+        importpath = "github.com/cloudflare/sidh",
+        sum = "h1:pqwbJdj1rgMkE38tDSNnP97wdMYHzV+Lt/aLL2qw2LQ=",
+        version = "v0.0.0-20181111220428-fc8e6378752b",
+    )
+    go_repository(
+        name = "com_github_codahale_hdrhistogram",
+        importpath = "github.com/codahale/hdrhistogram",
+        sum = "h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=",
+        version = "v0.0.0-20161010025455-3a0bb77429bd",
+    )
+    go_repository(
+        name = "com_github_davecgh_go_spew",
+        importpath = "github.com/davecgh/go-spew",
+        sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=",
+        version = "v1.1.1",
     )
-
     go_repository(
         name = "com_github_dchest_cmac",
-        commit = "62ff55a1048c485e83f1882466f535da624e944a",
         importpath = "github.com/dchest/cmac",
+        sum = "h1:qoavXEzRRUfup81LsDQv4fnUQbLyorpPz6WxiwdiU7A=",
+        version = "v0.0.0-20150527144652-62ff55a1048c",
+    )
+    go_repository(
+        name = "com_github_fsnotify_fsnotify",
+        importpath = "github.com/fsnotify/fsnotify",
+        sum = "h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=",
+        version = "v1.4.7",
     )
-
     go_repository(
         name = "com_github_go_ini_ini",
-        commit = "32e4c1e6bc4e7d0d8451aa6b75200d19e37a536a",
         importpath = "github.com/go-ini/ini",
+        sum = "h1:/MArBHSS0TFR28yPPDK1vPIjt4wUnPBfb81i6iiyKvA=",
+        version = "v1.32.0",
+    )
+    go_repository(
+        name = "com_github_go_kit_kit",
+        importpath = "github.com/go-kit/kit",
+        sum = "h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=",
+        version = "v0.8.0",
+    )
+    go_repository(
+        name = "com_github_go_logfmt_logfmt",
+        importpath = "github.com/go-logfmt/logfmt",
+        sum = "h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=",
+        version = "v0.4.0",
     )
-
     go_repository(
         name = "com_github_go_stack_stack",
-        commit = "100eb0c0a9c5b306ca2fb4f165df21d80ada4b82",
         importpath = "github.com/go-stack/stack",
+        sum = "h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=",
+        version = "v1.8.0",
+    )
+    go_repository(
+        name = "com_github_gogo_protobuf",
+        importpath = "github.com/gogo/protobuf",
+        sum = "h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=",
+        version = "v1.1.1",
     )
-
     go_repository(
         name = "com_github_golang_mock",
-        commit = "73dc87cad333b55a02058f4b3d872dbbafddc2b0",
-        importpath = "github.com/golang/mock",  # gomock
+        importpath = "github.com/golang/mock",
+        sum = "h1:T7BbTPTeAnatnqlwwWt+77l0YF8UBKcWf1GEK5M9YQ8=",
+        version = "v1.2.1-0.20190329180013-73dc87cad333",
+    )
+    go_repository(
+        name = "com_github_golang_protobuf",
+        importpath = "github.com/golang/protobuf",
+        sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=",
+        version = "v1.3.2",
     )
-
     go_repository(
         name = "com_github_google_go_cmp",
-        commit = "2248b49eaa8e1c8c0963ee77b40841adbc19d4ca",
-        importpath = "github.com/google/go-cmp",  # cmp
+        importpath = "github.com/google/go-cmp",
+        sum = "h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=",
+        version = "v0.3.0",
+    )
+    go_repository(
+        name = "com_github_google_go_querystring",
+        importpath = "github.com/google/go-querystring",
+        sum = "h1:Avad62mreCc9la5buHvHZXbvsY+GPYUVjd8xsi48FYY=",
+        version = "v1.0.1-0.20190318165438-c8c88dbee036",
+    )
+    go_repository(
+        name = "com_github_google_gofuzz",
+        importpath = "github.com/google/gofuzz",
+        sum = "h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=",
+        version = "v1.0.0",
     )
-
     go_repository(
         name = "com_github_google_gopacket",
-        commit = "102d5ca2098cc070c7fdc9d7dbd504658bc92363",
         importpath = "github.com/google/gopacket",
+        sum = "h1:eR3RuANqlK0CQoHJxUdXQNsco+gJykcti01+wqBCuPs=",
+        version = "v1.1.16-0.20190123011826-102d5ca2098c",
     )
-
     go_repository(
-        name = "com_github_hashicorp_golang_lru",
-        commit = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3",
-        importpath = "github.com/hashicorp/golang-lru",
+        name = "com_github_gopherjs_gopherjs",
+        importpath = "github.com/gopherjs/gopherjs",
+        sum = "h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=",
+        version = "v0.0.0-20181017120253-0766667cb4d1",
+    )
+    go_repository(
+        name = "com_github_hpcloud_tail",
+        importpath = "github.com/hpcloud/tail",
+        sum = "h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=",
+        version = "v1.0.0",
+    )
+    go_repository(
+        name = "com_github_iancoleman_strcase",
+        importpath = "github.com/iancoleman/strcase",
+        sum = "h1:ECW73yc9MY7935nNYXUkK7Dz17YuSUI9yqRqYS8aBww=",
+        version = "v0.0.0-20190422225806-e506e3ef7365",
     )
-
     go_repository(
         name = "com_github_inconshreveable_log15",
-        commit = "944cbfb97b448e4f63f0bdb69c2850e3de1aeae9",
         importpath = "github.com/inconshreveable/log15",
+        sum = "h1:KyyrbB0Qcnv9SwgbcYQKK6L191WKsIq2hiYj6lsrcTU=",
+        version = "v0.0.0-20161013181240-944cbfb97b44",
     )
-
     go_repository(
         name = "com_github_inconshreveable_mousetrap",
-        commit = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75",
         importpath = "github.com/inconshreveable/mousetrap",
+        sum = "h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=",
+        version = "v1.0.0",
+    )
+    go_repository(
+        name = "com_github_json_iterator_go",
+        importpath = "github.com/json-iterator/go",
+        sum = "h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=",
+        version = "v1.1.7",
     )
-
     go_repository(
         name = "com_github_jtolds_gls",
-        commit = "b4936e06046bbecbb94cae9c18127ebe510a2cb9",
         importpath = "github.com/jtolds/gls",
+        sum = "h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=",
+        version = "v4.20.0+incompatible",
+    )
+    go_repository(
+        name = "com_github_julienschmidt_httprouter",
+        importpath = "github.com/julienschmidt/httprouter",
+        sum = "h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g=",
+        version = "v1.2.0",
+    )
+    go_repository(
+        name = "com_github_konsorten_go_windows_terminal_sequences",
+        importpath = "github.com/konsorten/go-windows-terminal-sequences",
+        sum = "h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=",
+        version = "v1.0.1",
     )
-
     go_repository(
         name = "com_github_kormat_fmt15",
-        commit = "ee69fecb2656a4de8ac47df338ad7e7f9e056dd5",
         importpath = "github.com/kormat/fmt15",
+        sum = "h1:aG3mi6+atPavBL5PM/s0XqiRuJ2n08aEY9xza16XGTo=",
+        version = "v0.0.0-20181112140556-ee69fecb2656",
+    )
+    go_repository(
+        name = "com_github_kr_logfmt",
+        importpath = "github.com/kr/logfmt",
+        sum = "h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=",
+        version = "v0.0.0-20140226030751-b84e30acd515",
+    )
+    go_repository(
+        name = "com_github_kylelemons_godebug",
+        importpath = "github.com/kylelemons/godebug",
+        sum = "h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=",
+        version = "v1.1.0",
     )
-
     go_repository(
         name = "com_github_lucas_clemente_quic_go",
-        commit = "fd7246d7ed6eeb79eb4dc8b7b1bfa8a13047105a",
         importpath = "github.com/lucas-clemente/quic-go",
+        sum = "h1:Y07tY5Q2/7WwkwZHxYlQC4mQeD1kM6BQLk/6S64KHY4=",
+        version = "v0.7.1-0.20190212114006-fd7246d7ed6e",
+    )
+    go_repository(
+        name = "com_github_marten_seemann_qtls",
+        importpath = "github.com/marten-seemann/qtls",
+        sum = "h1:7Fx1paF8onfPhcIMlwgznBklz62TrCZjOjoBbUod/3Y=",
+        version = "v0.0.0-20190207043627-591c71538704",
     )
-
     go_repository(
         name = "com_github_mattn_go_colorable",
-        commit = "6c903ff4aa50920ca86087a280590b36b3152b9c",
         importpath = "github.com/mattn/go-colorable",
+        sum = "h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=",
+        version = "v0.1.4",
     )
-
     go_repository(
         name = "com_github_mattn_go_isatty",
-        commit = "fc9e8d8ef48496124e79ae0df75490096eccf6fe",
         importpath = "github.com/mattn/go-isatty",
+        sum = "h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=",
+        version = "v0.0.8",
     )
-
     go_repository(
         name = "com_github_mattn_go_sqlite3",
-        commit = "b3511bfdd742af558b54eb6160aca9446d762a19",
         importpath = "github.com/mattn/go-sqlite3",
+        sum = "h1:CxNxKbYu7Gc9ATyoSyjSLzf9wEryOLLhU5YCOR6x6MU=",
+        version = "v1.9.1-0.20180719091609-b3511bfdd742",
     )
-
     go_repository(
         name = "com_github_matttproud_golang_protobuf_extensions",
-        commit = "c12348ce28de40eed0136aa2b644d0ee0650e56c",
-        importpath = "github.com/matttproud/golang_protobuf_extensions",  # ext
+        importpath = "github.com/matttproud/golang_protobuf_extensions",
+        sum = "h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=",
+        version = "v1.0.1",
+    )
+    go_repository(
+        name = "com_github_modern_go_concurrent",
+        importpath = "github.com/modern-go/concurrent",
+        sum = "h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=",
+        version = "v0.0.0-20180306012644-bacd9c7ef1dd",
+    )
+    go_repository(
+        name = "com_github_modern_go_reflect2",
+        importpath = "github.com/modern-go/reflect2",
+        sum = "h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=",
+        version = "v1.0.1",
+    )
+    go_repository(
+        name = "com_github_mwitkow_go_conntrack",
+        importpath = "github.com/mwitkow/go-conntrack",
+        sum = "h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=",
+        version = "v0.0.0-20161129095857-cc309e4a2223",
+    )
+    go_repository(
+        name = "com_github_onsi_ginkgo",
+        importpath = "github.com/onsi/ginkgo",
+        sum = "h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY=",
+        version = "v1.10.3",
+    )
+    go_repository(
+        name = "com_github_onsi_gomega",
+        importpath = "github.com/onsi/gomega",
+        sum = "h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ=",
+        version = "v1.7.1",
+    )
+    go_repository(
+        name = "com_github_opentracing_opentracing_go",
+        importpath = "github.com/opentracing/opentracing-go",
+        sum = "h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=",
+        version = "v1.1.0",
     )
-
     go_repository(
         name = "com_github_patrickmn_go_cache",
-        commit = "5633e0862627c011927fa39556acae8b1f1df58a",
         importpath = "github.com/patrickmn/go-cache",
+        sum = "h1:MUIwjEiAMYk8zkXXUQeb5itrXF+HpS2pfxNsA2a7AiY=",
+        version = "v2.1.1-0.20180815053127-5633e0862627+incompatible",
+    )
+    go_repository(
+        name = "com_github_philhofer_fwd",
+        importpath = "github.com/philhofer/fwd",
+        sum = "h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=",
+        version = "v1.0.0",
     )
-
     go_repository(
         name = "com_github_pierrec_lz4",
-        commit = "08c27939df1bd95e881e2c2367a749964ad1fceb",
         importpath = "github.com/pierrec/lz4",
+        sum = "h1:w6GMGWSsCI04fTM8wQRdnW74MuJISakuUU0onU0TYB4=",
+        version = "v1.0.1",
     )
-
     go_repository(
         name = "com_github_pierrec_xxhash",
-        commit = "a0006b13c722f7f12368c00a3d3c2ae8a999a0c6",
-        importpath = "github.com/pierrec/xxHash",  # xxhsum
+        importpath = "github.com/pierrec/xxHash",
+        sum = "h1:nDDVHJzMIpkkKZpBBhV60OLwII/BvZSn4PijkMEKdTo=",
+        version = "v0.0.0-20170714082455-a0006b13c722",
+    )
+    go_repository(
+        name = "com_github_pkg_errors",
+        importpath = "github.com/pkg/errors",
+        sum = "h1:PCj9X21C4pet4sEcElTfAi6LSl5ShkjE8doieLc+cbU=",
+        version = "v0.8.2-0.20190227000051-27936f6d90f9",
+    )
+    go_repository(
+        name = "com_github_pmezard_go_difflib",
+        importpath = "github.com/pmezard/go-difflib",
+        sum = "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=",
+        version = "v1.0.0",
     )
-
     go_repository(
         name = "com_github_prometheus_client_golang",
-        commit = "170205fb58decfd011f1550d4cfb737230d7ae4f",  #v1.1.0
-        importpath = "github.com/prometheus/client_golang",  # prometheus
+        importpath = "github.com/prometheus/client_golang",
+        sum = "h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8=",
+        version = "v1.1.0",
     )
-
     go_repository(
         name = "com_github_prometheus_client_model",
-        commit = "14fe0d1b01d4d5fc031dd4bec1823bd3ebbe8016",
         importpath = "github.com/prometheus/client_model",
+        sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=",
+        version = "v0.0.0-20190812154241-14fe0d1b01d4",
     )
-
     go_repository(
         name = "com_github_prometheus_common",
-        commit = "31bed53e4047fd6c510e43a941f90cb31be0972a",  #v0.6.0
-        importpath = "github.com/prometheus/common",  # model
+        importpath = "github.com/prometheus/common",
+        sum = "h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=",
+        version = "v0.6.0",
     )
-
     go_repository(
         name = "com_github_prometheus_procfs",
-        commit = "3f98efb27840a48a7a2898ec80be07674d19f9c8",  #v0.0.3
         importpath = "github.com/prometheus/procfs",
+        sum = "h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=",
+        version = "v0.0.3",
+    )
+    go_repository(
+        name = "com_github_sergi_go_diff",
+        importpath = "github.com/sergi/go-diff",
+        sum = "h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc=",
+        version = "v1.0.1-0.20180205163309-da645544ed44",
+    )
+    go_repository(
+        name = "com_github_sirupsen_logrus",
+        importpath = "github.com/sirupsen/logrus",
+        sum = "h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=",
+        version = "v1.2.0",
     )
-
     go_repository(
         name = "com_github_smartystreets_assertions",
-        commit = "b2de0cb4f26d0705483a2f495d89896d0b808573",
         importpath = "github.com/smartystreets/assertions",
+        sum = "h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=",
+        version = "v0.0.0-20180927180507-b2de0cb4f26d",
     )
-
     go_repository(
         name = "com_github_smartystreets_goconvey",
-        commit = "63cc4eee0dbc998a86d3aef8b7d7eb8fc765b748",
         importpath = "github.com/smartystreets/goconvey",
-        vcs = "git",
-        remote = "https://github.com/kormat/goconvey.git",
+        replace = "github.com/kormat/goconvey",
+        sum = "h1:NMGRuyMGEPkT+2ll1+M00ubrzqHa4Kfboygqql2mcgA=",
+        version = "v0.0.0-20191113114839-63cc4eee0dbc",
     )
-
     go_repository(
         name = "com_github_songgao_water",
-        commit = "fd331bda3f4bbc9aad07ccd4bd2abaa1e363a852",
         importpath = "github.com/songgao/water",
+        sum = "h1:ubYDIJXsE4CmJ0CB0j57XpQ4s8hdxQhnl/OOpe9EA8s=",
+        version = "v0.0.0-20170524165202-99d07fc117af",
     )
-
     go_repository(
         name = "com_github_spf13_cobra",
-        commit = "cd30c2a7e91a1d63fd9a0027accf18a681e9d50b",
         importpath = "github.com/spf13/cobra",
+        sum = "h1:fkxjXeX1GqxICegQuav3Fpff2VNAMfqaPWZvI+dRqa0=",
+        version = "v0.0.3-0.20180408161736-cd30c2a7e91a",
     )
-
     go_repository(
         name = "com_github_spf13_pflag",
-        commit = "1ce0cc6db4029d97571db82f85092fccedb572ce",
         importpath = "github.com/spf13/pflag",
+        sum = "h1:PzXGtoglK0gKAmoFi5ec8tZKKnTTxJM+3i7w/qw+Hf0=",
+        version = "v1.0.1-0.20180403115518-1ce0cc6db402",
+    )
+    go_repository(
+        name = "com_github_stretchr_objx",
+        importpath = "github.com/stretchr/objx",
+        sum = "h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=",
+        version = "v0.1.1",
+    )
+    go_repository(
+        name = "com_github_stretchr_testify",
+        importpath = "github.com/stretchr/testify",
+        sum = "h1:Ko2LQMrRU+Oy/+EDBwX7eZ2jp3C47eDBB8EIhKTun+I=",
+        version = "v1.3.1-0.20190311161405-34c6fa2dc709",
     )
-
     go_repository(
         name = "com_github_syndtr_gocapability",
-        commit = "e7cb7fa329f456b3855136a2642b197bad7366ba",
-        importpath = "github.com/syndtr/gocapability",  # capability
+        importpath = "github.com/syndtr/gocapability",
+        sum = "h1:w58e6FAOMd+rUgOfhaBb+ZVOQIOfUkpv5AAQVmf6hsI=",
+        version = "v0.0.0-20160928074757-e7cb7fa329f4",
+    )
+    go_repository(
+        name = "com_github_tinylib_msgp",
+        importpath = "github.com/tinylib/msgp",
+        sum = "h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=",
+        version = "v1.1.0",
+    )
+    go_repository(
+        name = "com_github_uber_jaeger_client_go",
+        importpath = "github.com/uber/jaeger-client-go",
+        sum = "h1:HgqpYBng0n7tLJIlyT4kPCIv5XgCsF+kai1NnnrJzEU=",
+        version = "v2.20.1+incompatible",
+    )
+    go_repository(
+        name = "com_github_uber_jaeger_lib",
+        importpath = "github.com/uber/jaeger-lib",
+        sum = "h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw=",
+        version = "v2.0.0+incompatible",
     )
-
     go_repository(
         name = "com_github_vishvananda_netlink",
-        commit = "177f1ceba557262b3f1c3aba4df93a29199fb4eb",
         importpath = "github.com/vishvananda/netlink",
+        sum = "h1:rg73JByvxSA/EIL/nVpTcVKP2DKy4Jw5bNJ+DxD4B+U=",
+        version = "v0.0.0-20170924180554-177f1ceba557",
     )
-
     go_repository(
         name = "com_github_vishvananda_netns",
-        commit = "54f0e4339ce73702a0607f49922aaa1e749b418d",
         importpath = "github.com/vishvananda/netns",
+        sum = "h1:n630V+sEHbl2OrlWFxLoMoGPnUuniQ9eDvUaEmUdXaY=",
+        version = "v0.0.0-20170219233438-54f0e4339ce7",
     )
-
     go_repository(
-        name = "org_golang_x_crypto",
-        commit = "8ac0e0d97ce45cd83d1d7243c060cb8461dda5e9",
-        importpath = "golang.org/x/crypto",  # acme
+        name = "com_zombiezen_go_capnproto2",
+        importpath = "zombiezen.com/go/capnproto2",
+        sum = "h1:oaUsHxHA/DGY+XtWA4i5FLMxwWheqW21Az6xSLS1OzY=",
+        version = "v0.0.0-20190813022230-ddfb9bb855fa",
+    )
+    go_repository(
+        name = "in_gopkg_alecthomas_kingpin_v2",
+        importpath = "gopkg.in/alecthomas/kingpin.v2",
+        sum = "h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=",
+        version = "v2.2.6",
+    )
+    go_repository(
+        name = "in_gopkg_check_v1",
+        importpath = "gopkg.in/check.v1",
+        sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=",
+        version = "v0.0.0-20161208181325-20d25e280405",
+    )
+    go_repository(
+        name = "in_gopkg_fsnotify_v1",
+        importpath = "gopkg.in/fsnotify.v1",
+        sum = "h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=",
+        version = "v1.4.7",
+    )
+    go_repository(
+        name = "in_gopkg_ini_v1",
+        importpath = "gopkg.in/ini.v1",
+        sum = "h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=",
+        version = "v1.51.0",
     )
-
     go_repository(
         name = "in_gopkg_natefinch_lumberjack_v2",
-        commit = "e21e5cbec0cd0861b9dc302736ad5666c529d93f",
         importpath = "gopkg.in/natefinch/lumberjack.v2",
+        sum = "h1:UbkH2e+uFHEHh0PqjhdFQAdnx2KuBdcF6HpYSdJBDMw=",
+        version = "v2.0.0-20161007184028-e21e5cbec0cd",
     )
-
     go_repository(
         name = "in_gopkg_restruct_v1",
-        commit = "80ede2e57cc280052ab88753387703aa62475571",
         importpath = "gopkg.in/restruct.v1",
+        sum = "h1:pqzOumCQ6icMR4sIIYRe2w7xCERvcPOFx22W9jSRsWg=",
+        version = "v1.0.0-20151213023948-80ede2e57cc2",
+    )
+    go_repository(
+        name = "in_gopkg_tomb_v1",
+        importpath = "gopkg.in/tomb.v1",
+        sum = "h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=",
+        version = "v1.0.0-20141024135613-dd632973f1e7",
     )
-
     go_repository(
         name = "in_gopkg_yaml_v2",
-        commit = "51d6538a90f86fe93ac480b35f37b2be17fef232",
         importpath = "gopkg.in/yaml.v2",
+        sum = "h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=",
+        version = "v2.2.4",
     )
-
     go_repository(
-        name = "com_zombiezen_go_capnproto2",
-        commit = "ddfb9bb855fad9979ae59da7211fca20967d5669",
-        importpath = "zombiezen.com/go/capnproto2",
+        name = "org_golang_google_appengine",
+        importpath = "google.golang.org/appengine",
+        sum = "h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=",
+        version = "v1.4.0",
     )
-
     go_repository(
-        name = "com_github_sergi_go_diff",
-        commit = "da645544ed44df016359bd4c0e3dc60ee3a0da43",
-        importpath = "github.com/sergi/go-diff",  # diffmatchpatch
+        name = "org_golang_x_crypto",
+        importpath = "golang.org/x/crypto",
+        sum = "h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=",
+        version = "v0.0.0-20190308221718-c2843e01d9a2",
     )
-
     go_repository(
-        name = "com_github_stretchr_testify",
-        commit = "34c6fa2dc70986bccbbffcc6130f6920a924b075",
-        importpath = "github.com/stretchr/testify",
+        name = "org_golang_x_lint",
+        importpath = "golang.org/x/lint",
+        sum = "h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=",
+        version = "v0.0.0-20190930215403-16217165b5de",
     )
-
     go_repository(
-        name = "com_github_buildkite_go_buildkite",
-        commit = "568b6651b687ccf6893ada08086ce58b072538b6",
-        importpath = "github.com/buildkite/go-buildkite",  # buildkite
-    )
-
-    go_repository(
-        name = "com_github_google_go_querystring",
-        commit = "c8c88dbee036db4e4808d1f2ec8c2e15e11c3f80",
-        importpath = "github.com/google/go-querystring",  # query
+        name = "org_golang_x_net",
+        importpath = "golang.org/x/net",
+        sum = "h1:QPlSTtPE2k6PZPasQUbzuK3p9JbS+vMXYVto8g/yrsg=",
+        version = "v0.0.0-20191105084925-a882066a44e0",
     )
-
     go_repository(
-        name = "com_github_opentracing_opentracing_go",
-        commit = "659c90643e714681897ec2521c60567dd21da733",
-        importpath = "github.com/opentracing/opentracing-go",
+        name = "org_golang_x_sync",
+        importpath = "golang.org/x/sync",
+        sum = "h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=",
+        version = "v0.0.0-20190423024810-112230192c58",
     )
-
     go_repository(
-        name = "com_github_uber_jaeger_client_go",
-        commit = "2f47546e3facd43297739439600bcf43f44cce5d",
-        importpath = "github.com/uber/jaeger-client-go",
+        name = "org_golang_x_sys",
+        importpath = "golang.org/x/sys",
+        sum = "h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0=",
+        version = "v0.0.0-20190801041406-cbf593c0f2f3",
     )
-
     go_repository(
-        name = "com_github_uber_jaeger_lib",
-        commit = "0e30338a695636fe5bcf7301e8030ce8dd2a8530",
-        importpath = "github.com/uber/jaeger-lib",  # metrics
+        name = "org_golang_x_text",
+        importpath = "golang.org/x/text",
+        sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=",
+        version = "v0.3.0",
     )
-
     go_repository(
-        name = "com_github_pkg_errors",
-        commit = "27936f6d90f9c8e1145f11ed52ffffbfdb9e0af7",
-        importpath = "github.com/pkg/errors",
+        name = "org_golang_x_tools",
+        importpath = "golang.org/x/tools",
+        sum = "h1:IGkKhmfzcztjm6gYkykvu/NiS8kaqbCWAEWWAyf8J5U=",
+        version = "v0.0.0-20191029041327-9cc4af7d6b2c",
     )
-
     go_repository(
         name = "org_golang_x_xerrors",
-        commit = "a985d3407aa71f30cf86696ee0a2f409709f22e1",
         importpath = "golang.org/x/xerrors",
+        sum = "h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=",
+        version = "v0.0.0-20190717185122-a985d3407aa7",
     )
-
     go_repository(
-        name = "com_github_iancoleman_strcase",
-        commit = "e506e3ef73653e84c592ba44aab577a46678f68c",
-        importpath = "github.com/iancoleman/strcase",
-    )
-
-    go_repository(
-        name = "org_golang_x_net",
-        importpath = "golang.org/x/net", # ipv4
-        sum = "h1:QPlSTtPE2k6PZPasQUbzuK3p9JbS+vMXYVto8g/yrsg=",
-        version = "v0.0.0-20191105084925-a882066a44e0",
+        name = "org_uber_go_atomic",
+        importpath = "go.uber.org/atomic",
+        sum = "h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM=",
+        version = "v1.5.1",
     )
diff --git a/nogo.json b/nogo.json
index 081d9767f..ec1b267f9 100644
--- a/nogo.json
+++ b/nogo.json
@@ -17,14 +17,15 @@
       "gazelle/cmd/gazelle/diff.go": "",
       "/in_gopkg_yaml_v2/decode.go": "https://github.com/go-yaml/yaml/pull/492",
       "/com_github_mattn_go_sqlite3": "",
-      "/com_github_lucas_clemente_quic_go": "many vendored dependencies have issues",
+      "/com_github_lucas_clemente_quic_go": "",
+      "/com_github_cloudflare_sidh": "",
       "/com_github_vishvananda_netlink": ""
     }
   },
   "printf": {
     "exclude_files": {
       "/com_github_antlr_antlr4/runtime/Go/antlr/": "",
-      "/com_github_lucas_clemente_quic_go/": ""
+      "/com_github_cloudflare_sidh/": ""
     }
   },
   "unreachable": {
@@ -45,7 +46,7 @@
   },
   "shift": {
     "exclude_files": {
-      "/com_github_lucas_clemente_quic_go/": ""
+      "/com_github_marten_seemann_qtls/": ""
     }
   },
   "stdmethods": {
diff --git a/tools/ci/checkgodeps b/tools/ci/checkgodeps
new file mode 100755
index 000000000..ec337dc98
--- /dev/null
+++ b/tools/ci/checkgodeps
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -ex
+
+./docker.sh exec "set -eo pipefail; (
+                    cp go.mod go.sum go_deps.bzl /tmp/;
+                    make godeps -B;
+                    bazel-scion/external/go_sdk/bin/go mod tidy;
+                    diff -u /tmp/go.mod go.mod;
+                    diff -u /tmp/go.sum go.sum;
+                    diff -u /tmp/go_deps.bzl go_deps.bzl;
+                  ) |& tee logs/checkgodeps.run"
diff --git a/tools/fetch.sh b/tools/fetch.sh
index e702306b5..57bcf16e2 100755
--- a/tools/fetch.sh
+++ b/tools/fetch.sh
@@ -50,6 +50,8 @@ extra_import() {
             echo "unix" ;;
         org_golang_x_sync)
             echo "semaphore" ;;
+        org_golang_x_tools)
+            echo "go/packages" ;;
         com_github_pmezard_go_difflib)
             echo "difflib" ;;
         com_github_bazelbuild_buildtools)
@@ -79,7 +81,18 @@ genrule(
 EOF
 
 for q in $(bazel query "kind('go_repository rule', //external:*)" --noshow_progress); do
-    if [[ $q == *com_github_jmhodges_bazel_gomock ]]; then
+    # Ignore some indirect test dependencies (will not be used) that would require extra_import for fetching
+    if echo $q | grep -qF -e "com_github_jmhodges_bazel_gomock" \
+                          -e "com_github_tinylib_msgp" \
+                          -e "com_github_kylelemons_godebug" \
+                          -e "com_github_gopherjs_gopherjs" \
+                          -e "com_github_golang_protobuf" \
+                          -e "com_github_gogo_protobuf" \
+                          -e "com_github_go_kit_kit" \
+                          -e "com_github_davecgh_go_spew" \
+                          -e "com_github_cloudflare_sidh" \
+                          -e "org_golang_google_appengine"
+    then
         continue
     fi
     if [[ $q == //external* ]]; then
diff --git a/tools/godeps.sh b/tools/godeps.sh
new file mode 100755
index 000000000..c825a589b
--- /dev/null
+++ b/tools/godeps.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# This script uses gazelle to generate go_deps.bzl from go.mod.
+# You don't need to invoke this directly, just run `make godeps`.
+
+set -e
+
+ROOTDIR=$(dirname "$0")/..
+
+# Wipe go_deps.bzl file first, -prune seems ineffective
+cat <<EOF > $ROOTDIR/go_deps.bzl
+# Generated from go.mod by gazelle. DO NOT EDIT
+load("@bazel_gazelle//:deps.bzl", "go_repository")
+
+def go_deps():
+  pass
+EOF
+
+bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=go_deps.bzl%go_deps
diff --git a/tools/install_bazel b/tools/install_bazel
index 02ad166a7..f6de44192 100755
--- a/tools/install_bazel
+++ b/tools/install_bazel
@@ -26,10 +26,3 @@ BAZEL_FILE="bazel-${BAZEL_VER}-linux-${MACH}"
 BAZEL_URL=https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VER}/${BAZEL_FILE}
 
 dl_install "$BAZEL_URL" "$BAZEL_CKSUM" ~/bin/bazel
-
-BZLCOMPAT_VER=v0.6
-BZLCOMPAT_CKSUM=6bc16ca57421d2a33408dbdc75e5eed8e5e29df9352cc0e3871086db44c5b03c
-BZLCOMPAT_FILE="bzlcompat-${BZLCOMPAT_VER}-linux-${MACH}"
-BZLCOMPAT_URL=https://github.com/kormat/bzlcompat/releases/download/${BZLCOMPAT_VER}/${BZLCOMPAT_FILE}
-
-dl_install "$BZLCOMPAT_URL" "$BZLCOMPAT_CKSUM" ~/bin/bzlcompat


Test patch:
diff --git a/.buildkite/steps/test.yml b/.buildkite/steps/test.yml
index 2e3fb6f3e..d440e042e 100644
--- a/.buildkite/steps/test.yml
+++ b/.buildkite/steps/test.yml
@@ -1,3 +1,10 @@
+- label: "Check generated go_deps.bzl file is up to date with go.mod"
+  command: $BASE/run_step checkgodeps
+  retry:
+    automatic:
+      - exit_status: -1  # Agent was lost
+      - exit_status: 255 # Forced agent shutdown
+  timeout_in_minutes: 10
 - label: "Check generated go/proto files in git"
   command: $BASE/run_step checkgogen
   retry: