Releases: ooni/probe-cli
OONI Probe CLI v3.20.0
This is a stable release. On a high-level, this is what changed since 3.19:
- ✨ Web Connectivity v0.5 is nearly production ready
- ✨ Initial support for Go 1.21
- 🚧 Scripting to make research faster
- 🚧 Refactoring and improvements for the experimental
dslx
package - 🚧 Release engineering (aka keeping the lights on)
- 🐛 Miscellaneous bug fixes
More in detail:
✨ Web Connectivity v0.5 is nearly production ready
We implemented the minipipeline
package, borrowing the https://github.com/ooni/data design, to make sure that Web Connectivity v0.5 produces the same top-level keys produced by Web Connectivity v0.4 for our GVisor-based QA test suite. Because of that, we're now ready to start enabling Web Connectivity v0.5 for all users for limited periods of time using the check-in API's feature flags. By doing this, we would be able to more thoroughly A/B test v0.4 and v0.5. In turn, this would allow us to fix additional bugs and hopefully v0.5 would be the default implementation of Web Connectivity in the 3.21 or 3.22 release cycles.
Related commits
- feat: minipipeline to analyze measurements by @bassosimone in #1393
- feat: qatool to run webconnectivity lte QA by @bassosimone in #1394
- fix(minipipeline): DNSLookupFailures must be a slice by @bassosimone in #1395
- refactor(webconnectivitylte): {Append,Prepend}Requests by @bassosimone in #1396
- feat(webconnectivityqa): add more QA tests by @bassosimone in #1397
- fix(webconnectivitylte): always save "connect" network events by @bassosimone in #1398
- chore(webconnectivitylte): sync {cleartext,secure}flow.go by @bassosimone in #1399
- cleanup(minipipeline): factor code into utility functions by @bassosimone in #1400
- fix(minipipeline/analysis): distinguish between None and empty by @bassosimone in #1401
- feat(minipipeline): introduce "classic" observations filtering by @bassosimone in #1402
- feat: add and process depth and fetch_body tags by @bassosimone in #1403
- chore: regenerate testdata for minipipeline by @bassosimone in #1404
- fix(minipipeline): include probe/control resolved addrs by @bassosimone in #1405
- cleanup(minipipeline/analysis): move utilities in other files by @bassosimone in #1406
- fix(minipipeline): change DNSDiff algorithm by @bassosimone in #1407
- refactor(minipipeline): change DNSDiff foundations by @bassosimone in #1408
- refactor(minipipeline): adjust how we compute DNS failures by @bassosimone in #1409
- refactor(minipipeline): adjust how we compute TCP and TLS anomalies by @bassosimone in #1410
- feat(minipipeline): distinguish failure by operation by @bassosimone in #1411
- refactor(minipipeline): tweak how we detect HTTP failures by @bassosimone in #1412
- refactor(minipipeline): separate unexplained tcp and tls failures by @bassosimone in #1413
- refactor(minipipeline): tweak HTTP code by @bassosimone in #1414
- feat(minipipeline): add metrics required by LTE compat analysis mode by @bassosimone in #1415
- cleanup(minipipeline): zap DNSPossiblyNonexistingDomains metric by @bassosimone in #1416
- fix(minipipeline): don't emit fetch_body=false in classic mode by @bassosimone in #1418
- fix(minipipeline): set control expectation for all observations by @bassosimone in #1419
- feat(minipipeline): implement linear analysis by @bassosimone in #1417
- feat(webconnectivitylte): introduce classic analysis by @bassosimone in #1420
- feat: make sure LTE and v0.4 emit the same test keys by @bassosimone in #1392
- doc(webconnectivitylte): document "orig" HTTP analysis bug by @bassosimone in #1422
✨ Initial support for Go 1.21
Community members asked us to add Go 1.21 support. It is now possible to compile OONI Probe using Go 1.21. Because Psiphon does not support Go 1.21 yet, when you're building using Go 1.21, it would not be possible to use Psiphon as a circumvention tunnel or to run the Psiphon experiment. (Psiphon should finish migrating to Go 1.21 soon, so OONI Probe 3.21 should have full Go 1.21 support.)
Related commits
- feat: allow go1.21 builds by @bassosimone in #1424
🚧 Scripting to make research faster
As part of our richer input efforts (https://github.com/ooni/2023-05-richer-input), we developed DSL code designed to executed from a scripting language environment. We have been also using this code for research purposes, to address cases where we need to iterate faster and deploying new binaries frequently slows down the process significantly. In this release, we are starting to merge part of this code into this repository and to expose it (as an experimental preview) to the miniooni
tool. Namely, we have merged the underlying DSL engine and the corresponding bindings for the https://github.com/dop251/goja JavaScript engine. We will add additional documentation about this functionality in the next release cycles, as we continue experimenting and using it for research. In the meanwhile, see https://github.com/bassosimone/2023-12-09-ooni-javascript/ for additional information and details about this experimental feature.
Related commits
- feat(miniooni): minimal JavaScript-ing capabilities by @bassosimone in #1437
🚧 Refactoring and improvements for the experimental dslx
package
We continued working on our experimental internal DSL prototype, by trying to simplify and make it suitable for production usage. We also used some of the refactored code in the scripting functionality implementation described above.
Related commits
- refactor(dslx): allow running w/o measurexlite as the backend by @bassosimone in #1376
- cleanup(dslx): use model.UnderlyingNetwork for testing by @bassosimone in #1377
- refactor(dslx): unify TLS and QUIC handshake options by @bassosimone in #1378
- refactor(dslx): start making functions stateless by @bassosimone in #1379
- refactor(dslx): prepare for making HTTPRequest stateless by @bassosimone in #1380
- refactor(dslx): finish making funcs stateless by @bassosimone in #1381
- refactor(dslx): pass Maybe[T] to Func.Apply by @bassosimone in #1382
- dslx: post-Func.Apply(Maybe[T])-introduction cleanups by @bassosimone in #1384
- refactor(dslx): collect observations using runtime by @bassosimone in #1383
- fix(dslx): remove Observations from Maybe by @bassosimone in #1385
- refactor(dslx): type Operation func(context, A) (B, error) by @bassosimone in #1386
- feat(dslx): implement DNSLookupParallel by @bassosimone in #1387
- feat(dslx): introduce MeasureResolvedAddresses by @bassosimone in #1388
🚧 Release engineering (aka keeping the lights on)
- chore: use 2023-12 database by @bassosimone in #1426
- chore: use go1.20.12 by @bassosimone in #1427
- chore: update user agent, reformat code, regenerate statics by @bassosimone in #1429
- chore: update easy-to-update deps by @bassosimone in #1430
- chore: more easy to update deps by @bassosimone in #1431
- chore: upgrade netem and miekg/dns by @bassosimone in #1432
- chore: update to quic-go@v0.40.1 by @bassosimone in #1428
- chore: try to upgrade all possible dependencies by @bassosimone
- cleanup: move dslx inside internal/x by @bassosimone in #1438
- chore: update C deps by @bassosimone in #1434
- cleanup(miniooni): rename kvstore2 to engine by @bassosimone in #1436
🐛 Miscellaneous bug fixes
- fix(oonimkall): make sure SoftwareName is set by @bassosimone in #1425
- fix(oonirun): make sure we can parse integers from JSON by @bassosimone in #1435
OONI Probe CLI v3.20.0-alpha
This is an alpha release for creating a branching point for the release/3.20
branch.
Please see release 3.20 for an explanatory changelog.
What's Changed
- chore: we're now hacking on v3.20.0-alpha by @bassosimone in #1356
- feat: mvp of conditionally enabling experiments by @bassosimone in #1355
- fix(torsf): bump the version number by @bassosimone in #1357
- feat: add echcheck to the experimental suite by @kelmenhorst in #1217
- fix(ooniprobe): make sure we actually run echcheck by @bassosimone in #1358
- fix(registry): mark torsf as disabled by default by @bassosimone in #1359
- cleanup(riseupvpn): remove summary keys by @bassosimone in #1360
- refactor(riseupvpn): rename structs, change progress, bump version by @bassosimone in #1361
- chore: use go1.20.10 by @bassosimone in #1362
- refactor(riseupvpn): handle failing API and simplify test keys by @bassosimone in #1363
- feat(riseupvpn): include bootstrap in progress by @bassosimone in #1364
- chore(ooniprobe): add riseupvpn to experimental test suite by @bassosimone in #1365
- refactor(buildtool): use list for OpenSSL ./Configure flags by @bassosimone in #1367
- cleanup(buildtool): disable unit tests when building tor by @bassosimone in #1368
- fix(buildtool): let libevent use OpenSSL's pkgconfig by @bassosimone in #1369
- feat(buildtool): build zlib, openssl, libevent, and tor for iOS by @bassosimone in #1370
- chore(buildtool): add ios-build unit tests by @bassosimone in #1371
- feat(ios): replace go-libtor with ./internal/libtor by @bassosimone in #1366
- fix(ios): publish libcrypto, libssl, libevent, libtor, libz frameworks by @bassosimone in #1372
- fix(nettests): failing to start a nettest is a warning by @bassosimone in #1373
- fix(registry): disable vanilla_tor by default by @bassosimone in #1374
- chore: upgrade NDKVERSION to latest r26 by @bassosimone in #1375
- refactor(dslx): allow running w/o measurexlite as the backend by @bassosimone in #1376
- cleanup(dslx): use model.UnderlyingNetwork for testing by @bassosimone in #1377
- refactor(dslx): unify TLS and QUIC handshake options by @bassosimone in #1378
- refactor(dslx): start making functions stateless by @bassosimone in #1379
- refactor(dslx): prepare for making HTTPRequest stateless by @bassosimone in #1380
- refactor(dslx): finish making funcs stateless by @bassosimone in #1381
- refactor(dslx): pass Maybe[T] to Func.Apply by @bassosimone in #1382
- dslx: post-Func.Apply(Maybe[T])-introduction cleanups by @bassosimone in #1384
- refactor(dslx): collect observations using runtime by @bassosimone in #1383
- fix(dslx): remove Observations from Maybe by @bassosimone in #1385
- refactor(dslx): type Operation func(context, A) (B, error) by @bassosimone in #1386
- feat(dslx): implement DNSLookupParallel by @bassosimone in #1387
- feat(dslx): introduce MeasureResolvedAddresses by @bassosimone in #1388
- Update signal test endpoints fixes probe/2627 by @hellais in #1389
- chore: use 2023-11 geoip database by @bassosimone in #1390
- chore: use go1.20.11 by @bassosimone in #1391
- feat: minipipeline to analyze measurements by @bassosimone in #1393
- feat: qatool to run webconnectivity lte QA by @bassosimone in #1394
- fix(minipipeline): DNSLookupFailures must be a slice by @bassosimone in #1395
- refactor(webconnectivitylte): {Append,Prepend}Requests by @bassosimone in #1396
- feat(webconnectivityqa): add more QA tests by @bassosimone in #1397
- fix(webconnectivitylte): always save "connect" network events by @bassosimone in #1398
- chore(webconnectivitylte): sync {cleartext,secure}flow.go by @bassosimone in #1399
- cleanup(minipipeline): factor code into utility functions by @bassosimone in #1400
- fix(minipipeline/analysis): distinguish between None and empty by @bassosimone in #1401
- feat(minipipeline): introduce "classic" observations filtering by @bassosimone in #1402
- feat: add and process depth and fetch_body tags by @bassosimone in #1403
- chore: regenerate testdata for minipipeline by @bassosimone in #1404
- fix(minipipeline): include probe/control resolved addrs by @bassosimone in #1405
- cleanup(minipipeline/analysis): move utilities in other files by @bassosimone in #1406
- fix(minipipeline): change DNSDiff algorithm by @bassosimone in #1407
- refactor(minipipeline): change DNSDiff foundations by @bassosimone in #1408
- refactor(minipipeline): adjust how we compute DNS failures by @bassosimone in #1409
- refactor(minipipeline): adjust how we compute TCP and TLS anomalies by @bassosimone in #1410
- feat(minipipeline): distinguish failure by operation by @bassosimone in #1411
- refactor(minipipeline): tweak how we detect HTTP failures by @bassosimone in #1412
- refactor(minipipeline): separate unexplained tcp and tls failures by @bassosimone in #1413
- refactor(minipipeline): tweak HTTP code by @bassosimone in #1414
- feat(minipipeline): add metrics required by LTE compat analysis mode by @bassosimone in #1415
- cleanup(minipipeline): zap DNSPossiblyNonexistingDomains metric by @bassosimone in #1416
- fix(minipipeline): don't emit fetch_body=false in classic mode by @bassosimone in #1418
- fix(minipipeline): set control expectation for all observations by @bassosimone in #1419
- feat(minipipeline): implement linear analysis by @bassosimone in #1417
- feat(webconnectivitylte): introduce classic analysis by @bassosimone in #1420
- feat: make sure LTE and v0.4 emit the same test keys by @bassosimone in #1392
- fix(signal): trim down tested endpoints by @bassosimone in #1421
- doc(webconnectivitylte): document "orig" HTTP analysis bug by @bassosimone in #1422
- fix(oonimkall): make sure SoftwareName is set by @bassosimone in #1425
- chore: use 2023-12 database by @bassosimone in #1426
- chore: use go1.20.12 by @bassosimone in #1427
- chore: update user agent, reformat code, regenerate statics by @bassosimone in #1429
- chore: update easy-to-update deps by @bassosimone in #1430
- chore: more easy to update deps by @bassosimone in #1431
- chore: upgrade netem and miekg/dns by @bassosimone in #1432
- chore: update to quic-go@v0.40.1 by @bassosimone in #1428
- chore: try to upgrade all possible dependencies by @bassosimone in #1433
- feat: allow go1.21 builds by @bassosimone in #1424
- fix: make sure we can parse integers from JSON by @bassosimone in #1435
- cleanup(miniooni): rename kvstore2 to engine by @bassosimone in #1436
- feat(miniooni): minimal JavaScript-ing capabilities by @bassosimone in #1437
- cleanup: move dslx inside internal/x by @bassosimone in #1438
- chore: update C deps by @bassosimone in #1434
Full Changelog: v3.19.0-alpha...v3.20.0-alpha
OONI Probe CLI v3.19.2
This is a stable release. On a high-level, this is what changed in 3.19:
- ✨ Better Support for Measuring Throttling
- ✨ Introducing OONI Probe Bridges
- ✨ Improving Measurements Scrubbing
- ✨ Netemx: A Better Unit/Integration Testing Framework
- ✨ OONI Run v2 Support
- ✨ Unit Testing Improvements (go test -short ./... does not use the host network anymore)
- 🐛 OONI Probe Bootstrap fixes
- 🐛 Web Connectivity v0.4 Fixes
- 🐛 Snowflake Fixes
We recommend reading v3.19.0-alpha's changelog because it contains an exhaustive description of the most significant changes in 3.19 compared to 3.18. The following is the complete list of all the releases that led to this release:
- v3.19.0-alpha.5,
- v3.19.0-alpha.4,
- v3.19.0-alpha.3,
- v3.19.0-alpha.2,
- v3.19.0-alpha.1,
- v3.19.0-alpha,
- v3.19.0,
- v3.19.1,
On top of the v3.19.1 release, this follow-up release adds the following changes backported from the master branch:
- 🐛 fix(signal): trim down tested endpoints 85c6d1b
OONI Probe CLI v3.19.1
This is a stable release. On a high-level, this is what changed in 3.19:
- ✨ Better Support for Measuring Throttling
- ✨ Introducing OONI Probe Bridges
- ✨ Improving Measurements Scrubbing
- ✨ Netemx: A Better Unit/Integration Testing Framework
- ✨ OONI Run v2 Support
- ✨ Unit Testing Improvements (go test -short ./... does not use the host network anymore)
- 🐛 OONI Probe Bootstrap fixes
- 🐛 Web Connectivity v0.4 Fixes
- 🐛 Snowflake Fixes
We recommend reading v3.19.0-alpha's changelog because it contains an exhaustive description of the most significant changes in 3.19 compared to 3.18. The following is the complete list of all the releases that led to this release:
- v3.19.0-alpha.5,
- v3.19.0-alpha.4,
- v3.19.0-alpha.3,
- v3.19.0-alpha.2,
- v3.19.0-alpha.1,
- v3.19.0-alpha,
- v3.19.0,
On top of the v3.19.0 release, this follow-up release adds the following changes backported from the master branch:
- 🐛 Update signal test endpoints 6b32fbf
OONI Probe CLI v3.19.0
This is a stable release. On a high-level, this is what changed in 3.19:
- ✨ Better Support for Measuring Throttling
- ✨ Introducing OONI Probe Bridges
- ✨ Improving Measurements Scrubbing
- ✨ Netemx: A Better Unit/Integration Testing Framework
- ✨ OONI Run v2 Support
- ✨ Unit Testing Improvements (go test -short ./... does not use the host network anymore)
- 🐛 OONI Probe Bootstrap fixes
- 🐛 Web Connectivity v0.4 Fixes
- 🐛 Snowflake Fixes
We recommend reading v3.19.0-alpha's changelog because it contains an exhaustive description of the most significant changes in 3.19 compared to 3.18. The following is the complete list of all the unstable releases that led to this release:
- v3.19.0-alpha.5,
- v3.19.0-alpha.4,
- v3.19.0-alpha.3,
- v3.19.0-alpha.2,
- v3.19.0-alpha.1, and
- v3.19.0-alpha.
On top of the v3.19.0-alpha.5 release, this follow-up release adds the following changes backported from the master branch:
- 🐛 fix(registry): disable vanilla_tor by default 6a40751
- 🚧 chore: upgrade NDKVERSION to latest r26 09d3102
- 🚧 chore: set version to 3.19.0 3cce54b
In short, we also marked vanilla_tor as disabled by default, because it has issues on Android. We'll enable it again using the check-in API, but we would like to take advantage of the possibility of deciding to disable it in the future. We also need to upgrade the NDK since there has been a new release of the r26 LTS.
OONI Probe CLI v3.19.0-alpha.5
This release is an alpha release. It is not ready for general availability and should only be used for QA.
A stable release will follow suit hopefully in a few days from today.
This release is based on v3.19.0-alpha.4. Make sure you also read the changelog of:
On top of the v3.19.0-alpha.4 release, this follow-up release adds the following changes backported from the master branch:
- 🐛 fix(nettests): failing to start a nettest is a warning 7c4e537
In short, without this diff, running experimental with default-disabled experiments such as riseupvpn when they are check-in-disabled shows a visual error that modifies the view and which is totally unnecessary to show.
OONI Probe CLI v3.19.0-alpha.4
This release is an alpha release. It is not ready for general availability and should only be used for QA.
A stable release will follow suit hopefully in a few days from today.
This release is based on v3.19.0-alpha.3. Make sure you also read the changelog of:
On top of the v3.19.0-alpha.3 release, this follow-up release adds the following changes backported from the master branch:
- 🐛 fix(ios): publish libcrypto, libssl, libevent, libtor, libz frameworks a2b71cb
In short, this release fixes the iOS build by publishing all the required dependencies frameworks.
OONI Probe CLI v3.19.0-alpha.3
This release is an alpha release. It is not ready for general availability and should only be used for QA.
A stable release will follow suit hopefully in a few days from today.
This release is based on v3.19.0-alpha.2. Make sure you also read the changelog of:
On top of the v3.19.0-alpha.2 release, this follow-up release adds the following changes backported from the master branch:
- 🚧 refactor(buildtool): use list for OpenSSL ./Configure flags 06cda7b
- 🚧 cleanup(buildtool): disable unit tests when building tor cfb3c85
- 🐛 fix(buildtool): let libevent use OpenSSL's pkgconfig 79740bc
- ✨ feat(buildtool): build zlib, openssl, libevent, and tor for iOS ed915b5
- 🚧 chore(buildtool): add ios-build unit tests d71e416
- ✨ feat(ios): replace go-libtor with ./internal/libtor 4513a12
In short, this release includes work to build tor for iOS using the same build tool used for Android.
OONI Probe CLI v3.19.0-alpha.2
This release is an alpha release. It is not ready for general availability and should only be used for QA.
A stable release will follow suit hopefully in a few days from today.
This release is based on v3.19.0-alpha.1. Make sure you read the changelog of v3.19.0-alpha.1 and v3.19.0-alpha.
On top of the v3.19.0-alpha.1 release, this follow-up release adds the following changes backported from the master branch:
- 🚧 cleanup(riseupvpn): remove summary keys 7c45887
- 🚧 refactor(riseupvpn): rename structs, change progress, bump version cafc118
- 🚧 refactor(riseupvpn): handle failing API and simplify test 3989fd4
- 🚧 feat(riseupvpn): include bootstrap in progress a1b7f60
- 🚧 chore(ooniprobe): add riseupvpn to experimental test suite 0eabe59
In short, this release includes work to re-enable the riseupvpn experiment as part of ooniprobe run experimental
. We are adding back this experiment as a data collection experimental experiment. We are not performing local classification of the results in the probe anymore. Also, this experiment is disabled-by-default, which means we can choose when to run it using the check-in API. We will slowly reintroduce this experiment to all users and monitor the results it is collecting as part of the 3.19 cycle. Further improvements to this experiment will be implemented in subsequent ooniprobe releases.
It's important to note that riseupvpn data format has changed, and the experiment minor version number has changed.
We now have just two top-level test keys:
api_failures
(a[]string
containing all API calls failures), andca_cert_status
(abool
which was also present in the previous version of riseupvpn and has not changed its semantics).
If you were processing riseupvpn measurements, you should update your code to use the new keys described above.
OONI Probe CLI v3.19.0-alpha.1
This release is an alpha release. It is not ready for general availability and should only be used for QA.
A stable release will follow suit hopefully in a few days from today.
This release is based on v3.19.0-alpha, whose changelog you are encouraged to read.
On top of the v3.19.0-alpha release, this follow-up release adds the following changes backported from the master branch:
- ✨ feat: mvp of conditionally enabling experiments 85b63eb
- 🐛 fix(torsf): bump the version number e5f950b
- ✨ feat: add echcheck to the experimental suite a8f4fc2
- 🐛 fix(ooniprobe): make sure we actually run echcheck d13a7ca
- 🐛 fix(registry): mark torsf as disabled by default 7bcf415
- 🚧 chore: use go1.20.10 a4037a2
In short, we're now based on go1.20.10 (released yesterday). Also, the echcheck
experiment now runs as part of ooniprobe run experimental
. However, and notably, both echcheck
and torsf
are now disabled-by-default experiments. This means that they will only run if in the last 24h the backend has told us it was safe to do so. (You can always bypass this restriction by setting the OONI_FORCE_ENABLE_EXPERIMENT
environment variable to 1
.)
We're setting echcheck
as disabled by default because it is a new experiment and we want to use the backend API to incrementally and gradually expose this experiment to all users. We're setting torsf
as disabled by default because Snowflake made changes during the ooniprobe 3.18 cycle that broke the torsf
experiment, and we want to be robust to potential future similar changes. Hence, while as part of this release we will configure the OONI backend API to allow all users to run torsf
, we reserve the possibility of disabling torsf
, should it be needed, anytime in the future.