# OONI Probe CLI 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 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` 4. Run `ooniprobe run` to perform all the tests Optional: Add a crontab entry (on linux) to run `ooniprobe` daily at a random time: ``` (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`. 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. ``` Label org.ooni.probe.daily-run KeepAlive RunAtLoad Program /PATH/TO/BINARY/ooniprobe ProgramArguments --config="/PATH/TO/CONFIG/config-100sites.json" --batch run StartInterval 3600 StandardErrorPath /tmp/ooniprobe-cli.err StandardOutPath /tmp/ooniprobe-cli.out ``` Once you have written the file, you can enable to run automatically by doing: `launchctl load org.ooni.probe.cli.plist`. ## Development setup Be sure you have golang >= 1.13. We use golang modules. Run ``` ./build.sh help ``` to get information on the supported systems as well as to get instructions on how to install dependencies. ## Updating dependencies 1. update every direct dependency in `go.mod` except `probe-engine` using `go get -u -v $dependency` 2. pin to the latest version of the `probe-engine` with `go get -v github.com/ooni/probe-engine@tag` 3. remove all indirect dependencies from `go.mod` and merge the content of `probe-engine`'s `go.mod` into our `go.mod` 4. `go mod tidy` The rationale of this procedure is that we want to pin exactly to 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: ``` ./build.sh release ``` and follow instructions.