Skip to content

Minimize the required version for each dependency.

Nick Mathewson requested to merge nickm/arti:minimize_deps into main

I found these versions empirically, by using the following process:

First, I used cargo tree --depth 1 -e all to get a list of every immediate dependency we had.

Then, I used cargo upgrade --workspace package@version to change each dependency to the earliest version with which (in theory) the current version is semver-compatible. IOW, if the current version was 3.2.3, I picked "3". If the current version was 0.12.8, I picked "0.12".

Then, I used cargo +nightly upgrade -Z minimal-versions to downgrade Cargo.lock to the minimal listed version for each dependency. (I had to override a few packages; see .gitlab-ci.yml for details).

Finally, I repeatedly increased the version of each of our dependencies until our code compiled and the tests passed. Here's what I found that we need:

anyhow >= 1.0.5: Earlier versions break our hyper example.

async-broadcast >= 0.3.2: Earlier versions fail our tests.

async-compression 0.3.5: Earlier versions handled futures and tokio differently.

async-trait >= 0.1.2: Earlier versions are too buggy to compile our code.

clap 2.33.0: For Arg::default_value_os().

generic-array 0.14.3: Earlier versions don't implement From<&[T; 32]>

httparse >= 1.2: Earlier versions didn't implement Error.

itertools at 0.10.1: For at_most_once.

serde 1.0.103: Older versions break our code.

serde_json >= 1.0.50: Since we need its Value type to implement Eq.

tokio >= 1.4: For Handle::block_on().

tracing >= 0.1.18: Previously, tracing_core and tracing had separate LevelFilter types.

Closes #275 (closed).

Edited by Nick Mathewson

Merge request reports