From 4c651470091d976a19289a98cbe7831565c3f811 Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Sat, 22 Aug 2020 11:20:50 +0200 Subject: [PATCH] WIP: Start preparing release v3.0.7 (#147) * Use ooni/probe-engine 0.16.0 * Update all the other dependencies * Use GitHub Actions rather than Travis CI * Automatically build and test binaries on the target OS (for Windows, macOS, Linux on amd64) * Make sure we correctly measure coverage * Make sure we use `-race` when running tests * Remove unnecessary scripts * Make sure the README is up-to-date * Write small script to update binary data and add GitHub Actions checks for it * Notice that we needed to run ./updatebindata.sh and run it * Self documenting instructions regarding cross compiling * Set version number to v3.0.7-beta Part of https://github.com/ooni/probe-engine/issues/748 --- .dockerignore | 4 - .github/workflows/bindata.yml | 22 +++++ .github/workflows/cross.yml | 57 +++++++++++ .github/workflows/golang.yml | 32 +++++++ .github/workflows/linux.yml | 20 ++++ .github/workflows/macos.yml | 20 ++++ .github/workflows/windows.yml | 20 ++++ .gitignore | 6 +- .travis.yml | 8 -- CLI/linux/amd64/.gitignore | 1 + CLI/macos/amd64/.gitignore | 1 + CLI/windows/amd64/.gitignore | 1 + Dockerfile | 2 - Readme.md | 47 ++++++--- build.sh | 174 ++++++++++------------------------ go.mod | 8 +- go.sum | 56 ++++++----- internal/bindata/bindata.go | 133 ++++++++++++++++++-------- nettests/web_connectivity.go | 3 - scripts/travis_test.sh | 6 -- smoketest.sh | 9 ++ updatebindata.sh | 10 ++ version/version.go | 2 +- 23 files changed, 408 insertions(+), 234 deletions(-) delete mode 100644 .dockerignore create mode 100644 .github/workflows/bindata.yml create mode 100644 .github/workflows/cross.yml create mode 100644 .github/workflows/golang.yml create mode 100644 .github/workflows/linux.yml create mode 100644 .github/workflows/macos.yml create mode 100644 .github/workflows/windows.yml delete mode 100644 .travis.yml create mode 100644 CLI/linux/amd64/.gitignore create mode 100644 CLI/macos/amd64/.gitignore create mode 100644 CLI/windows/amd64/.gitignore delete mode 100644 Dockerfile delete mode 100755 scripts/travis_test.sh create mode 100755 smoketest.sh create mode 100755 updatebindata.sh diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index b91a3ae..0000000 --- a/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -/dist -/ooniprobe -/ooniprobe.exe -/testdata/gotmp diff --git a/.github/workflows/bindata.yml b/.github/workflows/bindata.yml new file mode 100644 index 0000000..c6ef933 --- /dev/null +++ b/.github/workflows/bindata.yml @@ -0,0 +1,22 @@ +# Make sure we can embed bindata +name: bindata +on: + push: + schedule: + - cron: "14 17 * * 3" +jobs: + test: + runs-on: "${{ matrix.os }}" + strategy: + fail-fast: false + matrix: + os: ["ubuntu-latest"] + go: ["1.14"] + steps: + - uses: actions/setup-go@v1 + with: + go-version: ${{ matrix.go }} + - uses: actions/checkout@v2 + - run: ./updatebindata.sh + - run: go mod tidy # revert changes caused by installing bindata + - run: git diff --exit-code # if this fails, run ./updatebindata.sh locally and push diff --git a/.github/workflows/cross.yml b/.github/workflows/cross.yml new file mode 100644 index 0000000..bdb99b3 --- /dev/null +++ b/.github/workflows/cross.yml @@ -0,0 +1,57 @@ +# Shows how to cross compile ooniprobe +name: cross +on: + push: + schedule: + - cron: "14 17 * * 3" +jobs: + + windows_from_linux_build: + runs-on: "ubuntu-latest" + steps: + - uses: actions/setup-go@v1 + with: + go-version: "1.14" + - uses: actions/checkout@v2 + - run: sudo apt update + - run: sudo apt install --yes mingw-w64 + - run: ./build.sh windows + - uses: actions/upload-artifact@v1 + with: + name: ooniprobe-windows-amd64-compiled-from-linux + path: ./CLI/windows/amd64/ooniprobe.exe + + test_build_from_linux: + needs: windows_from_linux_build + runs-on: "windows-latest" + steps: + - uses: actions/checkout@v2 + - uses: actions/download-artifact@v2 + with: + name: ooniprobe-windows-amd64-compiled-from-linux + - run: bash.exe ./smoketest.sh ./ooniprobe.exe + + windows_from_macos_build: + runs-on: "macos-latest" + steps: + - uses: actions/setup-go@v1 + with: + go-version: "1.14" + - uses: actions/checkout@v2 + - run: brew update + - run: brew install mingw-w64 + - run: ./build.sh windows + - uses: actions/upload-artifact@v1 + with: + name: ooniprobe-windows-amd64-compiled-from-macos + path: ./CLI/windows/amd64/ooniprobe.exe + + test_build_from_macos: + needs: windows_from_macos_build + runs-on: "windows-latest" + steps: + - uses: actions/checkout@v2 + - uses: actions/download-artifact@v2 + with: + name: ooniprobe-windows-amd64-compiled-from-macos + - run: bash.exe ./smoketest.sh ./ooniprobe.exe diff --git a/.github/workflows/golang.yml b/.github/workflows/golang.yml new file mode 100644 index 0000000..52ee6d5 --- /dev/null +++ b/.github/workflows/golang.yml @@ -0,0 +1,32 @@ +# Run tests and measure coverage +name: golang +on: + push: + pull_request: + schedule: + - cron: "14 17 * * 3" +jobs: + test: + runs-on: "${{ matrix.os }}" + strategy: + fail-fast: false + matrix: + os: ["ubuntu-latest"] + go: ["1.14"] + steps: + - uses: actions/setup-go@v1 + with: + go-version: ${{ matrix.go }} + - uses: actions/checkout@v2 + - run: go test -race -tags shaping -v -coverprofile=probe-cli.cov -coverpkg=./... ./... + - uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: probe-cli.cov + parallel: true + finish: + needs: test + runs-on: ubuntu-latest + steps: + - uses: shogo82148/actions-goveralls@v1 + with: + parallel-finished: true diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..e35dcc6 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,20 @@ +# Build and test Linux binary +name: linux +on: + push: + schedule: + - cron: "14 17 * * 3" +jobs: + build: + runs-on: "ubuntu-latest" + steps: + - uses: actions/setup-go@v1 + with: + go-version: "1.14" + - uses: actions/checkout@v2 + - run: ./build.sh linux + - run: ./smoketest.sh ./CLI/linux/amd64/ooniprobe + - uses: actions/upload-artifact@v1 + with: + name: ooniprobe-linux-amd64 + path: ./CLI/linux/amd64/ooniprobe diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 0000000..72b3941 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,20 @@ +# Build and test macOS binary +name: macos +on: + push: + schedule: + - cron: "14 17 * * 3" +jobs: + build: + runs-on: "macos-latest" + steps: + - uses: actions/setup-go@v1 + with: + go-version: "1.14" + - uses: actions/checkout@v2 + - run: ./build.sh macos + - run: ./smoketest.sh ./CLI/macos/amd64/ooniprobe + - uses: actions/upload-artifact@v1 + with: + name: ooniprobe-macos-amd64 + path: ./CLI/macos/amd64/ooniprobe diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 0000000..a25502d --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,20 @@ +# Build and test Windows binary +name: windows +on: + push: + schedule: + - cron: "14 17 * * 3" +jobs: + build: + runs-on: "windows-latest" + steps: + - uses: actions/setup-go@v1 + with: + go-version: "1.14" + - uses: actions/checkout@v2 + - run: bash.exe ./build.sh windows + - run: bash.exe ./smoketest.sh ./CLI/windows/amd64/ooniprobe.exe + - uses: actions/upload-artifact@v1 + with: + name: ooniprobe-windows-amd64 + path: ./CLI/windows/amd64/ooniprobe.exe diff --git a/.gitignore b/.gitignore index 93b9605..916fd3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,9 @@ -/dist /ooniprobe /coverage.cov /testdata/gotmp -*.njson +*.jsonl .DS_Store - -# Build artifacts *.tar.gz +*.zip ooniprobe_checksums.txt ooniprobe_checksums.txt.asc diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7566f6a..0000000 --- a/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -os: linux -dist: xenial -language: minimal -services: -- docker -script: -- ./build.sh _travis-${TRAVIS_OS_NAME} -- ./scripts/travis_test.sh diff --git a/CLI/linux/amd64/.gitignore b/CLI/linux/amd64/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/CLI/linux/amd64/.gitignore @@ -0,0 +1 @@ +* diff --git a/CLI/macos/amd64/.gitignore b/CLI/macos/amd64/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/CLI/macos/amd64/.gitignore @@ -0,0 +1 @@ +* diff --git a/CLI/windows/amd64/.gitignore b/CLI/windows/amd64/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/CLI/windows/amd64/.gitignore @@ -0,0 +1 @@ +* diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index f02be93..0000000 --- a/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM openobservatory/mk-alpine:20200721 -RUN apk add --no-progress git go diff --git a/Readme.md b/Readme.md index b17bf37..2fb542b 100644 --- a/Readme.md +++ b/Readme.md @@ -4,11 +4,13 @@ The next generation OONI Probe Command Line Interface. ## User setup -1. Go [into the releases](https://github.com/ooni/probe-cli/releases) and download the release for your architecture and platform +1. Go [into the releases](https://github.com/ooni/probe-cli/releases) and download the +release for your architecture and platform 2. Extract the tarball with `tar xvzf ooniprobe_*.tar.gz` -3. Copy the `ooniprobe` binary into a location in your `$PATH`, for example `/usr/local/bin/ooniprobe` +3. Copy the `ooniprobe` binary into a location in your `$PATH`, for example +`/usr/local/bin/ooniprobe` 4. Run `ooniprobe run` to perform all the tests @@ -16,19 +18,22 @@ Optional: Add a crontab entry (on linux) to run `ooniprobe` daily at a random time: -``` +```bash (crontab -l 2>/dev/null; echo "$(( ( RANDOM % 60 ) + 1 )) $(( ( RANDOM % 24 ) + 1 )) * * * ooniprobe run") | crontab - ``` On macOS you can configure OONI Probe to run automatically using launchd. -Below is a sample launchd script, that should be placed inside of `~/Library/LaunchAgents/org.ooni.probe.cli.plist`. +Below is a sample launchd script, that should be placed inside of +`~/Library/LaunchAgents/org.ooni.probe.cli.plist`. -Be sure to replace `/PATH/TO/BINARY/ooniprobe` with the actual install location of the `ooniprobe` binary and `/PATH/TO/CONFIG/config-100sites.json` with the location of a file which limits the testing to 100 URLs. +Be sure to replace `/PATH/TO/BINARY/ooniprobe` with the actual install location of the +`ooniprobe` binary and `/PATH/TO/CONFIG/config-100sites.json` with the location of a file +which limits the testing to 100 URLs. You may also want to adjust the locations of the logs. -``` +```xml @@ -62,25 +67,40 @@ You may also want to adjust the locations of the logs. ``` -Once you have written the file, you can enable to run automatically by doing: `launchctl load org.ooni.probe.cli.plist`. +Once you have written the file, you can enable `ooniprobe` to run automatically by +doing: `launchctl load org.ooni.probe.cli.plist`. ## Development setup -Be sure you have golang >= 1.14. We use golang modules. Run +Be sure you have golang >= 1.14 and a C compiler (when developing for Windows, you +need Mingw-w64 installed). The most basic build command is: +```bash +go build -v ./cmd/ooniprobe ``` + +To compile a release used the `build.sh` script. For more information + +```bash ./build.sh help ``` -to get information on the supported systems as well as to get -instructions on how to install dependencies. +The output generated by this command should provide you with updated information +regarding the pre-requisites for building (and cross-building) `ooniprobe` as well +as useful information regarding cross compiling. + +To update bundled binary data use: + +```bash +./updatebindata.sh +``` ## Updating dependencies 1. update every direct dependency in `go.mod` except `probe-engine` using `go get -u -v $dependency`: -``` +```bash for name in `grep -v indirect go.mod | grep -v probe-engine | awk '/^\t/{print $1}'`; do \ go get -u -v $name; \ done @@ -99,10 +119,9 @@ a specific version of psiphon and of its dependencies. ## Releasing -Make sure you have updated dependencies. Specifically, make sure -you update homebrew to get the latest Measurement Kit. Then: +Make sure you have updated dependencies. Then run -``` +```bash ./build.sh release ``` diff --git a/build.sh b/build.sh index 76c9a9e..27c44e4 100755 --- a/build.sh +++ b/build.sh @@ -1,133 +1,57 @@ #!/bin/sh -set -e +set -ex -buildtags="-tags ooni" -ldflags="-s -w" +# We don't have a git repository when running in github actions +v=`git describe --tags || echo $GITHUB_SHA` -if [ "$1" = "bindata" ]; then - GO_BINDATA_V=$(go-bindata -version | grep go-bin | cut -d ' ' -f2) - if [ "$GO_BINDATA_V" = "3.2.0" ]; then - echo "Updating bindata" - go-bindata -nometadata -o internal/bindata/bindata.go -pkg bindata data/... - echo "DONE" - exit 0 - else - echo "Wrong go-bindata-version" - echo "Please install go-bindata with:" - echo " go get -u github.com/shuLhan/go-bindata/..." - exit 1 - fi -fi +case $1 in + windows) + # Note! This assumes we've installed the mingw-w64 compiler. + GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc \ + go build -ldflags='-s -w' ./cmd/ooniprobe + tar -cvzf ooniprobe_${v}_windows_amd64.tar.gz LICENSE.md Readme.md ooniprobe.exe + # We don't have zip inside the github actions runner + zip ooniprobe_${v}_windows_amd64.zip LICENSE.md Readme.md ooniprobe.exe || true + mv ooniprobe.exe ./CLI/windows/amd64/ + ;; -if [ "$1" = "windows" ]; then - set -x - CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ \ - CGO_LDFLAGS_ALLOW='-fstack-.*' CGO_ENABLED=1 GOOS=windows GOARCH=amd64 \ - go build $buildtags -ldflags="$ldflags" \ - -o dist/windows/amd64/ooniprobe.exe -v ./cmd/ooniprobe + linux) + docker run -v`pwd`:/ooni -w/ooni golang:1.14-alpine ./build.sh _alpine + tar -cvzf ooniprobe_${v}_linux_amd64.tar.gz LICENSE.md Readme.md ooniprobe + mv ooniprobe ./CLI/linux/amd64/ + ;; -elif [ "$1" = "linux" ]; then - set -x - $0 __docker go build $buildtags -ldflags="$ldflags" \ - -o dist/linux/amd64/ooniprobe -v ./cmd/ooniprobe + _alpine) + apk add --no-progress gcc git linux-headers musl-dev + go build -tags netgo -ldflags='-s -w -extldflags "-static"' ./cmd/ooniprobe + ;; -elif [ "$1" = "macos" ]; then - set -x - go build $buildtags -ldflags="$ldflags" \ - -o dist/macos/amd64/ooniprobe -v ./cmd/ooniprobe + macos) + # Note! The following line _assumes_ you have a working C compiler. If you + # have Xcode command line tools installed, you are fine. + go build -ldflags='-s -w' ./cmd/ooniprobe + tar -cvzf ooniprobe_${v}_macos_amd64.tar.gz LICENSE.md Readme.md ooniprobe + mv ooniprobe ./CLI/macos/amd64/ + ;; -elif [ "$1" = "release" ]; then - set -x - v=`git describe --tags` - $0 linux - tar -czf ooniprobe_${v}_linux_amd64.tar.gz LICENSE.md Readme.md \ - -C ./dist/linux/amd64 ooniprobe - shasum -a 256 ooniprobe_${v}_linux_amd64.tar.gz > ooniprobe_checksums.txt - $0 macos - tar -czf ooniprobe_${v}_darwin_amd64.tar.gz LICENSE.md Readme.md \ - -C ./dist/macos/amd64 ooniprobe - shasum -a 256 ooniprobe_${v}_darwin_amd64.tar.gz >> ooniprobe_checksums.txt - $0 windows - tar -czf ooniprobe_${v}_windows_amd64.tar.gz LICENSE.md Readme.md \ - -C dist/windows/amd64 ooniprobe.exe - shasum -a 256 ooniprobe_${v}_windows_amd64.tar.gz >> ooniprobe_checksums.txt - echo "" - echo "Now sign ooniprobe_checksums.txt and upload it along with tarballs to GitHub" + release) + $0 linux + $0 windows + $0 macos + ;; -elif [ "$1" = "__docker" ]; then - set -x - shift - docker build -t oonibuild . - docker run -v `pwd`:/oonibuild \ - -w /oonibuild \ - -t \ - --cap-drop=all \ - --user `id -u`:`id -g` \ - -e 'GOCACHE=/oonibuild/testdata/gotmp/cache' \ - -e 'GOPATH=/oonibuild/testdata/gotmp/path' \ - -e "TRAVIS_JOB_ID=$TRAVIS_JOB_ID" \ - -e "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST" \ - oonibuild "$@" - -elif [ "$1" = "_travis-linux" ]; then - set -x - $0 linux - # TODO -race does not work on alpine. - # See: https://travis-ci.org/ooni/probe-cli/builds/619631256#L962 - $0 __docker go get -v golang.org/x/tools/cmd/cover - $0 __docker go get -v github.com/mattn/goveralls - $0 __docker go test $buildtags -v -coverprofile=coverage.cov -coverpkg=./... ./... - $0 __docker /oonibuild/testdata/gotmp/path/bin/goveralls \ - -coverprofile=coverage.cov -service=travis-ci - -elif [ "$1" = "_travis-osx" ]; then - set -x - brew tap measurement-kit/measurement-kit - brew update - brew upgrade - brew install measurement-kit - $0 macos - go test -v -race -coverprofile=coverage.cov -coverpkg=./... ./... - -elif [ "$1" = "help" ]; then - echo "Usage: $0 linux | macos | release | windows" - echo "" - echo "Builds OONI on supported systems. The output binary will" - echo "be saved at './dist///ooniprobe[.exe]'." - echo "" - echo "# Linux" - echo "" - echo "To compile for Linux we use a docker container with the binary" - echo "Measurement Kit dependency installed. So you need docker installed." - echo "" - echo "# macOS" - echo "" - echo "You must be on macOS. You must install Measurement Kit once using:" - echo "" - echo "- brew tap measurement-kit/measurement-kit" - echo "- brew install measurement-kit" - echo "" - echo "You should keep Measurement Kit up-to-date using:" - echo "" - echo "- brew upgrade" - echo "" - echo "# Release" - echo "" - echo "Will build ooniprobe for all supported systems." - echo "" - echo "# Windows" - echo "" - echo "You must be on macOS. You must install Measurement Kit once using:" - echo "" - echo "- brew tap measurement-kit/measurement-kit" - echo "- brew install mingw-w64-measurement-kit" - echo "" - echo "You should keep Measurement Kit up-to-date using:" - echo "" - echo "- brew upgrade" - echo "" - -else - echo "Invalid usage; try '$0 help' for more help." 1>&2 - exit 1 -fi + *) + echo "Usage: $0 linux|macos|windows|release" + echo "" + echo "You need a C compiler and Go >= 1.14. The C compiler must be a" + echo "UNIX like compiler like GCC, Clang, Mingw-w64." + echo "" + echo "To build a static Linux binary, we use Docker and Alpine." + echo "" + echo "You can cross compile for Windows from macOS or Linux. You can" + echo "compile for Linux as long as you have Docker. Cross compiling for" + echo "macOS has never been tested. We have a bunch of cross compiling" + echo "checks inside the .github/workflows/cross.yml file." + echo "" + ;; +esac diff --git a/go.mod b/go.mod index 2a16ed4..90dddf5 100644 --- a/go.mod +++ b/go.mod @@ -4,13 +4,17 @@ go 1.14 require ( github.com/alecthomas/kingpin v2.2.6+incompatible - github.com/apex/log v1.6.0 + github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect + github.com/apex/log v1.9.0 + github.com/certifi/gocertifi v0.0.0-20200211180108-c7c1fbc02894 // indirect github.com/fatih/color v1.9.0 github.com/getsentry/raven-go v0.0.0-20190419175539-919484f041ea github.com/mattn/go-colorable v0.1.7 - github.com/ooni/probe-engine v0.15.2 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/ooni/probe-engine v0.16.0 github.com/pkg/errors v0.9.1 github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 + golang.org/x/sys v0.0.0-20200820212457-1fb795427249 // indirect gopkg.in/AlecAivazis/survey.v1 v1.8.8 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect upper.io/db.v3 v3.7.1+incompatible diff --git a/go.sum b/go.sum index b1553f2..2f20fa5 100644 --- a/go.sum +++ b/go.sum @@ -25,8 +25,8 @@ github.com/Psiphon-Labs/goptlib v0.0.0-20200406165125-c0e32a7a3464 h1:VmnMMMheFX github.com/Psiphon-Labs/goptlib v0.0.0-20200406165125-c0e32a7a3464/go.mod h1:Pe5BqN2DdIdChorAXl6bDaQd/wghpCleJfid2NoSli0= github.com/Psiphon-Labs/net v0.0.0-20191204183604-f5d60dada742 h1:te4lDZfA3tFwaheo+h/GZYGiLGJvm7Dcq2YkFh13QmE= github.com/Psiphon-Labs/net v0.0.0-20191204183604-f5d60dada742/go.mod h1:3mBCrUrPxFCKAhG0ZdEfiU7QU6zl2+gr1HUk1sKYdjI= -github.com/Psiphon-Labs/psiphon-tunnel-core v2.0.12-0.20200706190114-761b4842e923+incompatible h1:c76E9yKZiStloyBp1lNFFuGmjf73Kldsk3jpgahE7Mc= -github.com/Psiphon-Labs/psiphon-tunnel-core v2.0.12-0.20200706190114-761b4842e923+incompatible/go.mod h1:VcNEtiQ0z2sCGJf16ZGcpwCas5+r9rt+P20r6LlJ06U= +github.com/Psiphon-Labs/psiphon-tunnel-core v2.0.12-0.20200819184412-10cb0192d244+incompatible h1:Fyx8JihDBE+YZG8iZTrJ+hgDIQd6OaRYMJ1lqf9R+Xk= +github.com/Psiphon-Labs/psiphon-tunnel-core v2.0.12-0.20200819184412-10cb0192d244+incompatible/go.mod h1:VcNEtiQ0z2sCGJf16ZGcpwCas5+r9rt+P20r6LlJ06U= github.com/Psiphon-Labs/quic-go v0.14.1-0.20200306193310-474e74c89fab h1:LYp5/y2XR38yyDtNyEZBt0TtFaWgrYMNu3hEcN+om6c= github.com/Psiphon-Labs/quic-go v0.14.1-0.20200306193310-474e74c89fab/go.mod h1:I0Z7XA8KzHZl2MzwqEbZJhBQOHT8ajGUQ5+SWf5KHw0= github.com/Psiphon-Labs/tls-tris v0.0.0-20200610161156-7d791789810f h1:DZpr9KUNwaL+OjdT7JR+bkr7xXkvikTSMdpt6L1XX6Y= @@ -48,17 +48,19 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apex/log v1.6.0 h1:Y50wF1PBIIexIgTm0/7G6gcLitkO5jHK5Mb6wcMY0UI= -github.com/apex/log v1.6.0/go.mod h1:x7s+P9VtvFBXge9Vbn+8TrqKmuzmD35TTkeBHul8UtY= +github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0= +github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA= github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= -github.com/aristanetworks/goarista v0.0.0-20200609010056-95bcf8053598 h1:VbwKXgO1O1JSbI8o3PQqlC/KTem5t3YD7LqvfBT+0Gk= -github.com/aristanetworks/goarista v0.0.0-20200609010056-95bcf8053598/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE= +github.com/aristanetworks/goarista v0.0.0-20200812190859-4cb0e71f3c0e h1:tkEt0le4Lv5+VmcxZPIVSrP8LVPLhndIm/BOP7iPh/w= +github.com/aristanetworks/goarista v0.0.0-20200812190859-4cb0e71f3c0e/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE= github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= @@ -193,12 +195,14 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gxui v0.0.0-20151028112939-f85e0a97b3a4 h1:OL2d27ueTKnlQJoqLW2fc9pWYulFnJYLWzomGV7HqZo= github.com/google/gxui v0.0.0-20151028112939-f85e0a97b3a4/go.mod h1:Pw1H1OjSNHiqeuxAduB1BKYXIwFtsyrY47nEqSgEiCM= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= @@ -243,8 +247,8 @@ github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFEB7inlalqfNqw65aNkM1lGX2yt3NmbS8= -github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/iancoleman/strcase v0.1.0 h1:Lar8rut26AXkJUmVOb2bRsFGv//+tJBeJLxXvpZpF1Q= +github.com/iancoleman/strcase v0.1.0/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= @@ -320,9 +324,11 @@ github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsO github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.30 h1:Qww6FseFn8PRfw07jueqIXqodm0JKiiKuK0DeXSqfyo= -github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo= +github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -358,8 +364,8 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/ooni/probe-engine v0.15.2 h1:qlOPuCBTl+S2V1vK8JZqwBtL/SOlzA2I4AdfeVzSgOM= -github.com/ooni/probe-engine v0.15.2/go.mod h1:Gnn57oU1Sc1hUQamTPkjCO4pxWMJjl3rEVYY1LV1A6E= +github.com/ooni/probe-engine v0.16.0 h1:aLhbSWculnYDxESseSzPSZFQOiqFcKQT/+QefSeCQvA= +github.com/ooni/probe-engine v0.16.0/go.mod h1:MvO2uFbFy3D9M9hO3DA5bN6Sw+Ns+J4Nb+5cFK/PbNg= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= @@ -379,7 +385,7 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pborman/getopt/v2 v2.0.0/go.mod h1:4NtW75ny4eBw9fO1bhtNdYTlZKYX5/tBLtsOpwKIKd0= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= @@ -422,16 +428,16 @@ github.com/redjack/marionette v0.0.0-20180818172807-360dd8f58226 h1:8+dAj8X8Lmdu github.com/redjack/marionette v0.0.0-20180818172807-360dd8f58226/go.mod h1:yJd0pT0e04p+VSmLGjce8BoPlRDlrGrdfXf2En7oq9A= github.com/refraction-networking/gotapdance v0.0.0-20190909202946-3a6e1938ad70 h1:EUwVKYIxba8xd9YeCG+63W2HiwKDPIw92F4pccOmXug= github.com/refraction-networking/gotapdance v0.0.0-20190909202946-3a6e1938ad70/go.mod h1:iBzxMSHu9kVV7v3Rc6vcDVCUDLsRGqLL3vtiR74JBvk= -github.com/refraction-networking/utls v0.0.0-20200601200209-ada0bb9b38a0 h1:vIkvetWOJZSADSKCF9MLTsQNW2httdBmYz47dQQteP8= -github.com/refraction-networking/utls v0.0.0-20200601200209-ada0bb9b38a0/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= +github.com/refraction-networking/utls v0.0.0-20200729012536-186025ac7b77 h1:f+9aczEfJx9WNE7NMhRmQqPCspsFM+O/XAaiz8E5O1Q= +github.com/refraction-networking/utls v0.0.0-20200729012536-186025ac7b77/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.6.0 h1:IZRgg4sfrDH7nsAD1Y/Nwj+GzIfEwpJSLjCaNC3SbsI= -github.com/rogpeppe/go-internal v1.6.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 h1:HXr/qUllAWv9riaI4zh2eXWKmCSDqVS/XH1MRHLKRwk= github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -486,7 +492,7 @@ github.com/tj/assert v0.0.0-20171129193455-018094318fb0 h1:Rw8kxzWo1mr6FSaYXjQEL github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= -github.com/tj/go-buffer v1.0.1/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj52Uc= +github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj52Uc= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= @@ -575,12 +581,13 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc h1:zK/HqS5bZxDptfPJNq8v7vJfXtkU7r9TLIoSr1bXaP4= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -620,8 +627,9 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8= -golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200819171115-d785dc25833f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200820212457-1fb795427249 h1:tKP05IMsVLZ4VeeCEFmrIUmxAAx6UD8IBdPtYlYNa8g= +golang.org/x/sys v0.0.0-20200820212457-1fb795427249/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= diff --git a/internal/bindata/bindata.go b/internal/bindata/bindata.go index 08f833e..044dc3f 100644 --- a/internal/bindata/bindata.go +++ b/internal/bindata/bindata.go @@ -6,6 +6,7 @@ package bindata + import ( "bytes" "compress/gzip" @@ -38,6 +39,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { return buf.Bytes(), nil } + type asset struct { bytes []byte info fileInfoEx @@ -78,37 +80,45 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _dataDefaultConfigJson = []byte( - "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x91\x41\x4f\xc3\x30\x0c\x85\xef\xfd\x15\x56\xce\xb0\xc2\xb5\xff\x80" + - "\x0b\x43\x82\x7b\x94\x25\xee\x6a\x29\xb3\x2b\x3b\x19\x9a\xd0\xfe\x3b\x4a\x57\x46\xe1\xfa\x3e\xdb\xef\x59\xef\xab" + - "\x03\x70\xde\x0d\xe0\x3e\x26\x32\x20\x83\x8b\x54\x85\xfd\xfe\xf5\x05\xde\x54\x0e\x08\x51\x78\xa4\x23\x8c\x94\x71" + - "\x07\xef\x88\x30\x95\x32\xdb\xd0\xf7\x22\x4c\x3b\x92\x7e\xc2\x3c\xf7\x73\x9b\x7d\x8c\x99\x60\x14\x85\x26\xb9\x87" + - "\xe5\xf4\x19\xd5\x48\xd8\x0d\xf0\x7c\x13\x88\x47\xd1\x13\x26\x1f\x85\x0d\xb9\xb8\x01\xc6\x90\x0d\x17\x6a\x53\x50" + - "\xe2\xa3\x1b\xa0\x05\x03\x70\xc4\x31\xd7\x84\x9e\xe6\xed\xdc\x06\x04\x6b\xb7\x8b\xd6\xff\x20\x4a\xe5\xa2\x97\xbf" + - "\xb0\xce\x59\x42\xf2\x8a\x56\x73\xb1\x95\x75\x00\xd7\xc5\x9d\xb1\x14\xb4\x45\x5f\xed\x3f\xf1\x60\x54\xd0\x7c\xd5" + - "\xec\x33\x9d\xa8\xc5\x7d\xba\x2f\x84\x74\x0e\x1c\x31\xfd\x2e\x54\x43\x9f\xe4\x14\x88\xfd\xa8\xc2\xe5\xf6\xcc\x36" + - "\xb8\x21\x27\x1f\x35\xd8\xe4\x15\x67\xd1\x7b\x8c\x95\x47\xc9\x19\x63\x11\x6d\x9e\xad\x18\xb7\x82\x83\x54\x8e\x78" + - "\x97\x7f\x6a\x58\xe5\xdd\x5a\x87\x6b\xe1\xba\x6b\xf7\x1d\x00\x00\xff\xff\x8e\xc0\xab\xe6\xd9\x01\x00\x00") +var _bindataDataDefaultconfigjson = []byte( + "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8f\x41\x4e\xc4\x30\x0c\x45\xf7\x3d\x85\x95\x35\x9a\x81\x6d\x2f\x63" + + "\x65\x12\x0f\xb5\x94\xda\x95\xed\x0c\x42\x68\xee\x8e\x5a\xaa\x52\xd8\xfe\x97\x9f\xff\xfc\x35\x00\x24\x7c\x90\x39" + + "\xab\xa4\x11\xde\x5e\xb6\x80\xe5\xae\x36\x53\xc5\xa2\xe2\x24\x91\x46\xb8\xe7\xe6\xb4\x51\x9f\xb2\xb1\xbc\xa7\x11" + + "\xd6\x36\x40\x62\x29\xad\x57\x42\x5e\xce\xef\x4e\x20\xfb\xfa\x77\x58\xff\x0f\x8a\x76\x09\xfb\xfc\x0b\xfb\xd2\x34" + + "\x57\x34\xf2\xde\xc2\x77\x36\x00\x3c\xb7\x75\xa1\x08\xf2\x2d\xdf\xe7\x3f\xe8\xe6\x1c\xe4\xd8\xad\x61\xe3\x99\x57" + + "\xdd\xd7\xa3\x90\xeb\x23\x4b\xa1\xfa\x5b\xe8\x4e\x58\x75\xce\x2c\x78\x37\x95\xf8\x39\xe6\x2c\xee\x24\x15\x8b\x65" + + "\x9f\xd0\x68\x51\x3b\x34\x76\x5e\xb4\x35\x2a\xa1\xb6\x6e\xa6\x11\x52\xda\xc1\x4d\xbb\x14\x3a\xe2\x29\x62\xf1\xf1" + + "\x7a\xdd\xe3\x8b\xaa\xf0\x85\x35\xad\x72\xc3\x73\xf8\x0e\x00\x00\xff\xff\xfb\x1f\x97\x64\x7e\x01\x00\x00") -func dataDefaultConfigJsonBytes() ([]byte, error) { +func bindataDataDefaultconfigjsonBytes() ([]byte, error) { return bindataRead( - _dataDefaultConfigJson, + _bindataDataDefaultconfigjson, "data/default-config.json", ) } -func dataDefaultConfigJson() (*asset, error) { - bytes, err := dataDefaultConfigJsonBytes() + + +func bindataDataDefaultconfigjson() (*asset, error) { + bytes, err := bindataDataDefaultconfigjsonBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "data/default-config.json", size: 0, md5checksum: "", mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{ + name: "data/default-config.json", + size: 0, + md5checksum: "", + mode: os.FileMode(0), + modTime: time.Unix(0, 0), + } + a := &asset{bytes: bytes, info: info} + return a, nil } -var _dataMigrations1_create_msmt_resultsSql = []byte( +var _bindataDataMigrations1createmsmtresultssql = []byte( "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x59\x6d\x73\xdb\x36\x12\xfe\xee\x5f\xb1\xe3\xe9\xf4\xec\x39\x49\x76" + "\x72\x69\xe6\xce\xd7\x4e\xc7\xb5\x99\x9c\xda\x58\xca\xc8\xf2\x35\x99\x9b\x1b\x11\x22\x97\x12\x2a\x10\x60\xf0\x22" + "\x46\xf7\xeb\x6f\x16\x00\x29\x52\x56\x1c\x67\xda\x0f\xa9\x48\x02\x8b\x7d\x7d\xf6\x59\x78\x38\x84\xbf\x96\x7c\xa5" + @@ -206,25 +216,35 @@ var _dataMigrations1_create_msmt_resultsSql = []byte( "\x7f\x10\x08\x32\x73\x9a\xdc\x6b\x14\x22\xf8\xa6\x6f\x4c\x6c\x24\xe7\x3d\x1b\xfc\xdf\xdb\xf6\xdf\x68\x00\xfe\xe2" + "\x5f\xf5\xfe\x1f\x00\x00\xff\xff\x38\xc6\x64\x22\x78\x1c\x00\x00") -func dataMigrations1_create_msmt_resultsSqlBytes() ([]byte, error) { +func bindataDataMigrations1createmsmtresultssqlBytes() ([]byte, error) { return bindataRead( - _dataMigrations1_create_msmt_resultsSql, + _bindataDataMigrations1createmsmtresultssql, "data/migrations/1_create_msmt_results.sql", ) } -func dataMigrations1_create_msmt_resultsSql() (*asset, error) { - bytes, err := dataMigrations1_create_msmt_resultsSqlBytes() + + +func bindataDataMigrations1createmsmtresultssql() (*asset, error) { + bytes, err := bindataDataMigrations1createmsmtresultssqlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "data/migrations/1_create_msmt_results.sql", size: 0, md5checksum: "", mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{ + name: "data/migrations/1_create_msmt_results.sql", + size: 0, + md5checksum: "", + mode: os.FileMode(0), + modTime: time.Unix(0, 0), + } + a := &asset{bytes: bytes, info: info} + return a, nil } -var _dataMigrations2_single_msmt_fileSql = []byte( +var _bindataDataMigrations2singlemsmtfilesql = []byte( "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x56\x4d\x6f\xdb\x38\x10\xbd\xf3\x57\xcc\xd1\xc6\x2a\x8b\xdd\xb6\xc9" + "\xc5\xe8\x81\x91\x99\x54\xad\x4c\xa5\x14\x53\x34\x27\x89\xb5\x68\x47\x88\x4c\x0a\x24\xd5\x20\xff\xbe\x90\x3f\x6a" + "\xda\x96\x8d\x3a\x28\x8a\x1e\x74\x9d\x8f\xc7\x21\xe7\x0d\xe7\x5d\x5c\xc0\x3f\x8b\x72\x6e\x84\x93\x30\xd6\xcf\x0a" + @@ -252,27 +272,40 @@ var _dataMigrations2_single_msmt_fileSql = []byte( "\x57\xde\xef\x5e\x79\xfb\x77\xec\x45\xc9\xdf\xd7\xa1\xf6\x0b\xe9\x96\x26\xba\x2a\x4e\x49\x93\x95\xfb\x7c\x69\xf2" + "\x23\x00\x00\xff\xff\xca\xeb\xb6\x24\x7c\x10\x00\x00") -func dataMigrations2_single_msmt_fileSqlBytes() ([]byte, error) { +func bindataDataMigrations2singlemsmtfilesqlBytes() ([]byte, error) { return bindataRead( - _dataMigrations2_single_msmt_fileSql, + _bindataDataMigrations2singlemsmtfilesql, "data/migrations/2_single_msmt_file.sql", ) } -func dataMigrations2_single_msmt_fileSql() (*asset, error) { - bytes, err := dataMigrations2_single_msmt_fileSqlBytes() + + +func bindataDataMigrations2singlemsmtfilesql() (*asset, error) { + bytes, err := bindataDataMigrations2singlemsmtfilesqlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "data/migrations/2_single_msmt_file.sql", size: 0, md5checksum: "", mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{ + name: "data/migrations/2_single_msmt_file.sql", + size: 0, + md5checksum: "", + mode: os.FileMode(0), + modTime: time.Unix(0, 0), + } + a := &asset{bytes: bytes, info: info} + return a, nil } + +// // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. +// func Asset(name string) ([]byte, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { @@ -285,9 +318,11 @@ func Asset(name string) ([]byte, error) { return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist} } +// // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. // nolint: deadcode +// func MustAsset(name string) []byte { a, err := Asset(name) if err != nil { @@ -297,9 +332,10 @@ func MustAsset(name string) []byte { return a } +// // AssetInfo loads and returns the asset info for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. +// It returns an error if the asset could not be found or could not be loaded. +// func AssetInfo(name string) (os.FileInfo, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { @@ -312,8 +348,10 @@ func AssetInfo(name string) (os.FileInfo, error) { return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist} } +// // AssetNames returns the names of the assets. // nolint: deadcode +// func AssetNames() []string { names := make([]string, 0, len(_bindata)) for name := range _bindata { @@ -322,13 +360,16 @@ func AssetNames() []string { return names } +// // _bindata is a table, holding each asset generator, mapped to its name. +// var _bindata = map[string]func() (*asset, error){ - "data/default-config.json": dataDefaultConfigJson, - "data/migrations/1_create_msmt_results.sql": dataMigrations1_create_msmt_resultsSql, - "data/migrations/2_single_msmt_file.sql": dataMigrations2_single_msmt_fileSql, + "data/default-config.json": bindataDataDefaultconfigjson, + "data/migrations/1_create_msmt_results.sql": bindataDataMigrations1createmsmtresultssql, + "data/migrations/2_single_msmt_file.sql": bindataDataMigrations2singlemsmtfilesql, } +// // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the @@ -342,6 +383,7 @@ var _bindata = map[string]func() (*asset, error){ // AssetDir("data/img") would return []string{"a.png", "b.png"} // AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. +// func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { @@ -350,12 +392,20 @@ func AssetDir(name string) ([]string, error) { for _, p := range pathList { node = node.Children[p] if node == nil { - return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist} + return nil, &os.PathError{ + Op: "open", + Path: name, + Err: os.ErrNotExist, + } } } } if node.Func != nil { - return nil, &os.PathError{Op: "open", Path: name, Err: os.ErrNotExist} + return nil, &os.PathError{ + Op: "open", + Path: name, + Err: os.ErrNotExist, + } } rv := make([]string, 0, len(node.Children)) for childName := range node.Children { @@ -364,17 +414,18 @@ func AssetDir(name string) ([]string, error) { return rv, nil } + type bintree struct { Func func() (*asset, error) Children map[string]*bintree } -var _bintree = &bintree{nil, map[string]*bintree{ - "data": {nil, map[string]*bintree{ - "default-config.json": {dataDefaultConfigJson, map[string]*bintree{}}, - "migrations": {nil, map[string]*bintree{ - "1_create_msmt_results.sql": {dataMigrations1_create_msmt_resultsSql, map[string]*bintree{}}, - "2_single_msmt_file.sql": {dataMigrations2_single_msmt_fileSql, map[string]*bintree{}}, +var _bintree = &bintree{Func: nil, Children: map[string]*bintree{ + "data": {Func: nil, Children: map[string]*bintree{ + "default-config.json": {Func: bindataDataDefaultconfigjson, Children: map[string]*bintree{}}, + "migrations": {Func: nil, Children: map[string]*bintree{ + "1_create_msmt_results.sql": {Func: bindataDataMigrations1createmsmtresultssql, Children: map[string]*bintree{}}, + "2_single_msmt_file.sql": {Func: bindataDataMigrations2singlemsmtfilesql, Children: map[string]*bintree{}}, }}, }}, }} diff --git a/nettests/web_connectivity.go b/nettests/web_connectivity.go index ae8899c..f16f3c7 100644 --- a/nettests/web_connectivity.go +++ b/nettests/web_connectivity.go @@ -50,9 +50,6 @@ func (n WebConnectivity) Run(ctl *Controller) error { if err != nil { return err } - if err := builder.SetOptionString("LogLevel", "INFO"); err != nil { - return err - } return ctl.Run(builder, urls) } diff --git a/scripts/travis_test.sh b/scripts/travis_test.sh deleted file mode 100755 index fef26ca..0000000 --- a/scripts/travis_test.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -ex - -./dist/${TRAVIS_OS_NAME}/amd64/ooniprobe onboard --yes -./dist/${TRAVIS_OS_NAME}/amd64/ooniprobe run --config testdata/testing-config.json -v --no-collector diff --git a/smoketest.sh b/smoketest.sh new file mode 100755 index 0000000..03dc1f1 --- /dev/null +++ b/smoketest.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -ex +if [ "$#" != 1 ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi +$1 onboard --yes +# Important! DO NOT run performance from CI b/c it will overload m-lab servers +$1 run websites --config testdata/testing-config.json -v --no-collector diff --git a/updatebindata.sh b/updatebindata.sh new file mode 100755 index 0000000..9f7416a --- /dev/null +++ b/updatebindata.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -ex +go get -u github.com/shuLhan/go-bindata/... +gobindata=`go env GOPATH`/bin/go-bindata +version=`$gobindata -version | grep go-bin | cut -d ' ' -f2` +if [ "$version" != "3.3.0" ]; then + echo "FATAL: unexpected go-bindata version" 1>&2 + exit 1 +fi +$gobindata -nometadata -o internal/bindata/bindata.go -pkg bindata data/... diff --git a/version/version.go b/version/version.go index c3e3a5a..ed199c0 100644 --- a/version/version.go +++ b/version/version.go @@ -3,5 +3,5 @@ package version const ( // Version is the software version - Version = "3.0.6" + Version = "3.0.7-beta" )