kbknapp / cargo-outdated

A cargo subcommand for displaying when Rust dependencies are out of date
MIT License
1.2k stars 94 forks source link

Non-deterministic output #389

Open dtolnay opened 6 months ago

dtolnay commented 6 months ago

I was surprised to find that cargo outdated produces wildly different output each time I run it. I am unsure how to interpret what is going on here.

Repro:

$ cargo new repro
$ cd repro
$ cargo add image

Sometimes when I run cargo outdated, it shows this:

Name                             Project  Compat   Latest   Kind    Platform
----                             -------  ------   ------   ----    --------
libfuzzer-sys->arbitrary         1.3.2    0.4.7    0.4.7    Normal  ---
libfuzzer-sys->once_cell         1.19.0   Removed  Removed  Normal  ---
num-derive->syn                  2.0.52   1.0.109  1.0.109  Normal  ---
proc-macro2->unicode-ident       1.0.12   Removed  Removed  Normal  ---
profiling->profiling-procmacros  1.0.15   Removed  Removed  Normal  ---
profiling-procmacros->quote      1.0.35   Removed  Removed  Normal  ---
profiling-procmacros->syn        2.0.52   Removed  Removed  Normal  ---
quote->proc-macro2               1.0.79   Removed  Removed  Normal  ---
rav1e->arbitrary                 1.3.2    0.4.7    0.4.7    Normal  cfg(fuzzing)
rav1e->bitstream-io              2.2.0    1.10.0   1.10.0   Normal  ---
rav1e->built                     0.7.1    0.5.2    0.5.2    Build   ---
rav1e->itertools                 0.12.1   0.10.5   0.10.5   Normal  ---
rav1e->libfuzzer-sys             0.4.7    0.3.5    0.3.5    Normal  cfg(fuzzing)
rav1e->num-derive                0.4.2    0.3.3    0.3.3    Normal  ---
rav1e->profiling                 1.0.15   Removed  Removed  Normal  ---
ravif->rav1e                     0.7.1    0.6.6    0.6.6    Normal  ---
syn->proc-macro2                 1.0.79   Removed  Removed  Normal  ---
syn->quote                       1.0.35   Removed  Removed  Normal  ---
syn->unicode-ident               1.0.12   Removed  Removed  Normal  ---

Sometimes it shows this:

Name                                              Project  Compat   Latest   Kind    Platform
----                                              -------  ------   ------   ----    --------
built->cargo-lock                                 8.0.3    Removed  Removed  Normal  ---
cargo-lock->semver                                1.0.22   Removed  Removed  Normal  ---
cargo-lock->serde                                 1.0.197  Removed  Removed  Normal  ---
cargo-lock->toml                                  0.5.11   Removed  Removed  Normal  ---
cargo-lock->url                                   2.5.0    Removed  Removed  Normal  ---
form_urlencoded->percent-encoding                 2.3.1    Removed  Removed  Normal  ---
idna->unicode-bidi                                0.3.15   Removed  Removed  Normal  ---
idna->unicode-normalization                       0.1.23   Removed  Removed  Normal  ---
libfuzzer-sys->arbitrary                          0.4.7    1.3.2    1.3.2    Normal  ---
num-derive->syn                                   1.0.109  2.0.52   2.0.52   Normal  ---
proc-macro2->unicode-ident                        1.0.12   Removed  Removed  Normal  ---
quote->proc-macro2                                1.0.79   Removed  Removed  Normal  ---
rav1e->arbitrary                                  0.4.7    1.3.2    1.3.2    Normal  cfg(fuzzing)
rav1e->bitstream-io                               1.10.0   2.2.0    2.2.0    Normal  ---
rav1e->built                                      0.5.2    0.7.1    0.7.1    Build   ---
rav1e->itertools                                  0.10.5   0.12.1   0.12.1   Normal  ---
rav1e->libfuzzer-sys                              0.3.5    0.4.7    0.4.7    Normal  cfg(fuzzing)
rav1e->num-derive                                 0.3.3    0.4.2    0.4.2    Normal  ---
rav1e->rust_hawktracer                            0.7.0    Removed  Removed  Normal  ---
rav1e->rustc_version                              0.4.0    Removed  Removed  Build   ---
rav1e->wasm-bindgen                               0.2.92   Removed  Removed  Normal  ---
ravif->rav1e                                      0.6.6    0.7.1    0.7.1    Normal  cfg(target = "wasm32-unknown-unknown")
rust_hawktracer->rust_hawktracer_normal_macro     0.4.1    Removed  Removed  Normal  ---
rust_hawktracer->rust_hawktracer_proc_macro       0.4.1    Removed  Removed  Normal  ---
rustc_version->semver                             1.0.22   Removed  Removed  Normal  ---
semver->serde                                     1.0.197  Removed  Removed  Normal  ---
serde->serde_derive                               1.0.197  Removed  Removed  Normal  ---
serde_derive->proc-macro2                         1.0.79   Removed  Removed  Normal  ---
serde_derive->quote                               1.0.35   Removed  Removed  Normal  ---
serde_derive->syn                                 2.0.52   Removed  Removed  Normal  ---
syn->proc-macro2                                  1.0.79   Removed  Removed  Normal  ---
syn->quote                                        1.0.35   Removed  Removed  Normal  ---
syn->unicode-ident                                1.0.12   Removed  Removed  Normal  ---
tinyvec->tinyvec_macros                           0.1.1    Removed  Removed  Normal  ---
toml->serde                                       1.0.197  Removed  Removed  Normal  ---
unicode-normalization->tinyvec                    1.6.0    Removed  Removed  Normal  ---
url->form_urlencoded                              1.2.1    Removed  Removed  Normal  ---
url->idna                                         0.5.0    Removed  Removed  Normal  ---
url->percent-encoding                             2.3.1    Removed  Removed  Normal  ---
wasm-bindgen->cfg-if                              1.0.0    Removed  Removed  Normal  ---
wasm-bindgen->wasm-bindgen-macro                  0.2.92   Removed  Removed  Normal  ---
wasm-bindgen-backend->bumpalo                     3.15.4   Removed  Removed  Normal  ---
wasm-bindgen-backend->log                         0.4.21   Removed  Removed  Normal  ---
wasm-bindgen-backend->once_cell                   1.19.0   Removed  Removed  Normal  ---
wasm-bindgen-backend->proc-macro2                 1.0.79   Removed  Removed  Normal  ---
wasm-bindgen-backend->quote                       1.0.35   Removed  Removed  Normal  ---
wasm-bindgen-backend->syn                         2.0.52   Removed  Removed  Normal  ---
wasm-bindgen-backend->wasm-bindgen-shared         0.2.92   Removed  Removed  Normal  ---
wasm-bindgen-macro->quote                         1.0.35   Removed  Removed  Normal  ---
wasm-bindgen-macro->wasm-bindgen-macro-support    0.2.92   Removed  Removed  Normal  ---
wasm-bindgen-macro-support->proc-macro2           1.0.79   Removed  Removed  Normal  ---
wasm-bindgen-macro-support->quote                 1.0.35   Removed  Removed  Normal  ---
wasm-bindgen-macro-support->syn                   2.0.52   Removed  Removed  Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-backend  0.2.92   Removed  Removed  Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-shared   0.2.92   Removed  Removed  Normal  ---

Other times it shows this:

Name                                              Project  Compat   Latest   Kind    Platform
----                                              -------  ------   ------   ----    --------
built->cargo-lock                                 8.0.3    Removed  ---      Normal  ---
cargo-lock->semver                                1.0.22   Removed  ---      Normal  ---
cargo-lock->serde                                 1.0.197  Removed  ---      Normal  ---
cargo-lock->toml                                  0.5.11   Removed  ---      Normal  ---
cargo-lock->url                                   2.5.0    Removed  ---      Normal  ---
form_urlencoded->percent-encoding                 2.3.1    Removed  ---      Normal  ---
idna->unicode-bidi                                0.3.15   Removed  ---      Normal  ---
idna->unicode-normalization                       0.1.23   Removed  ---      Normal  ---
libfuzzer-sys->arbitrary                          0.4.7    1.3.2    ---      Normal  ---
libfuzzer-sys->arbitrary                          1.3.2    ---      0.4.7    Normal  ---
libfuzzer-sys->once_cell                          1.19.0   ---      Removed  Normal  ---
num-derive->syn                                   1.0.109  2.0.52   ---      Normal  ---
num-derive->syn                                   2.0.52   ---      1.0.109  Normal  ---
proc-macro2->unicode-ident                        1.0.12   ---      Removed  Normal  ---
proc-macro2->unicode-ident                        1.0.12   Removed  ---      Normal  ---
profiling->profiling-procmacros                   1.0.15   ---      Removed  Normal  ---
profiling-procmacros->quote                       1.0.35   ---      Removed  Normal  ---
profiling-procmacros->syn                         2.0.52   ---      Removed  Normal  ---
quote->proc-macro2                                1.0.79   ---      Removed  Normal  ---
quote->proc-macro2                                1.0.79   Removed  ---      Normal  ---
rav1e->arbitrary                                  0.4.7    1.3.2    ---      Normal  cfg(fuzzing)
rav1e->arbitrary                                  1.3.2    ---      0.4.7    Normal  cfg(fuzzing)
rav1e->bitstream-io                               1.10.0   2.2.0    ---      Normal  ---
rav1e->bitstream-io                               2.2.0    ---      1.10.0   Normal  ---
rav1e->built                                      0.5.2    0.7.1    ---      Build   ---
rav1e->built                                      0.7.1    ---      0.5.2    Build   ---
rav1e->itertools                                  0.10.5   0.12.1   ---      Normal  ---
rav1e->itertools                                  0.12.1   ---      0.10.5   Normal  ---
rav1e->libfuzzer-sys                              0.3.5    0.4.7    ---      Normal  cfg(fuzzing)
rav1e->libfuzzer-sys                              0.4.7    ---      0.3.5    Normal  cfg(fuzzing)
rav1e->num-derive                                 0.3.3    0.4.2    ---      Normal  ---
rav1e->num-derive                                 0.4.2    ---      0.3.3    Normal  ---
rav1e->profiling                                  1.0.15   ---      Removed  Normal  ---
rav1e->rust_hawktracer                            0.7.0    Removed  ---      Normal  ---
rav1e->rustc_version                              0.4.0    Removed  ---      Build   ---
rav1e->wasm-bindgen                               0.2.92   Removed  ---      Normal  ---
ravif->rav1e                                      0.6.6    0.7.1    ---      Normal  cfg(target = "wasm32-unknown-unknown")
ravif->rav1e                                      0.7.1    ---      0.6.6    Normal  ---
rust_hawktracer->rust_hawktracer_normal_macro     0.4.1    Removed  ---      Normal  ---
rust_hawktracer->rust_hawktracer_proc_macro       0.4.1    Removed  ---      Normal  ---
rustc_version->semver                             1.0.22   Removed  ---      Normal  ---
semver->serde                                     1.0.197  Removed  ---      Normal  ---
serde->serde_derive                               1.0.197  Removed  ---      Normal  ---
serde_derive->proc-macro2                         1.0.79   Removed  ---      Normal  ---
serde_derive->quote                               1.0.35   Removed  ---      Normal  ---
serde_derive->syn                                 2.0.52   Removed  ---      Normal  ---
syn->proc-macro2                                  1.0.79   ---      Removed  Normal  ---
syn->proc-macro2                                  1.0.79   Removed  ---      Normal  ---
syn->quote                                        1.0.35   ---      Removed  Normal  ---
syn->quote                                        1.0.35   Removed  ---      Normal  ---
syn->unicode-ident                                1.0.12   ---      Removed  Normal  ---
syn->unicode-ident                                1.0.12   Removed  ---      Normal  ---
tinyvec->tinyvec_macros                           0.1.1    Removed  ---      Normal  ---
toml->serde                                       1.0.197  Removed  ---      Normal  ---
unicode-normalization->tinyvec                    1.6.0    Removed  ---      Normal  ---
url->form_urlencoded                              1.2.1    Removed  ---      Normal  ---
url->idna                                         0.5.0    Removed  ---      Normal  ---
url->percent-encoding                             2.3.1    Removed  ---      Normal  ---
wasm-bindgen->cfg-if                              1.0.0    Removed  ---      Normal  ---
wasm-bindgen->wasm-bindgen-macro                  0.2.92   Removed  ---      Normal  ---
wasm-bindgen-backend->bumpalo                     3.15.4   Removed  ---      Normal  ---
wasm-bindgen-backend->log                         0.4.21   Removed  ---      Normal  ---
wasm-bindgen-backend->once_cell                   1.19.0   Removed  ---      Normal  ---
wasm-bindgen-backend->proc-macro2                 1.0.79   Removed  ---      Normal  ---
wasm-bindgen-backend->quote                       1.0.35   Removed  ---      Normal  ---
wasm-bindgen-backend->syn                         2.0.52   Removed  ---      Normal  ---
wasm-bindgen-backend->wasm-bindgen-shared         0.2.92   Removed  ---      Normal  ---
wasm-bindgen-macro->quote                         1.0.35   Removed  ---      Normal  ---
wasm-bindgen-macro->wasm-bindgen-macro-support    0.2.92   Removed  ---      Normal  ---
wasm-bindgen-macro-support->proc-macro2           1.0.79   Removed  ---      Normal  ---
wasm-bindgen-macro-support->quote                 1.0.35   Removed  ---      Normal  ---
wasm-bindgen-macro-support->syn                   2.0.52   Removed  ---      Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-backend  0.2.92   Removed  ---      Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-shared   0.2.92   Removed  ---      Normal  ---

Other times it shows this:

Name                                              Project  Compat   Latest   Kind    Platform
----                                              -------  ------   ------   ----    --------
built->cargo-lock                                 8.0.3    ---      Removed  Normal  ---
cargo-lock->semver                                1.0.22   ---      Removed  Normal  ---
cargo-lock->serde                                 1.0.197  ---      Removed  Normal  ---
cargo-lock->toml                                  0.5.11   ---      Removed  Normal  ---
cargo-lock->url                                   2.5.0    ---      Removed  Normal  ---
form_urlencoded->percent-encoding                 2.3.1    ---      Removed  Normal  ---
idna->unicode-bidi                                0.3.15   ---      Removed  Normal  ---
idna->unicode-normalization                       0.1.23   ---      Removed  Normal  ---
libfuzzer-sys->arbitrary                          0.4.7    ---      1.3.2    Normal  ---
libfuzzer-sys->arbitrary                          1.3.2    0.4.7    ---      Normal  ---
libfuzzer-sys->once_cell                          1.19.0   Removed  ---      Normal  ---
num-derive->syn                                   1.0.109  ---      2.0.52   Normal  ---
num-derive->syn                                   2.0.52   1.0.109  ---      Normal  ---
proc-macro2->unicode-ident                        1.0.12   ---      Removed  Normal  ---
proc-macro2->unicode-ident                        1.0.12   Removed  ---      Normal  ---
profiling->profiling-procmacros                   1.0.15   Removed  ---      Normal  ---
profiling-procmacros->quote                       1.0.35   Removed  ---      Normal  ---
profiling-procmacros->syn                         2.0.52   Removed  ---      Normal  ---
quote->proc-macro2                                1.0.79   ---      Removed  Normal  ---
quote->proc-macro2                                1.0.79   Removed  ---      Normal  ---
rav1e->arbitrary                                  0.4.7    ---      1.3.2    Normal  cfg(fuzzing)
rav1e->arbitrary                                  1.3.2    0.4.7    ---      Normal  cfg(fuzzing)
rav1e->bitstream-io                               1.10.0   ---      2.2.0    Normal  ---
rav1e->bitstream-io                               2.2.0    1.10.0   ---      Normal  ---
rav1e->built                                      0.5.2    ---      0.7.1    Build   ---
rav1e->built                                      0.7.1    0.5.2    ---      Build   ---
rav1e->itertools                                  0.10.5   ---      0.12.1   Normal  ---
rav1e->itertools                                  0.12.1   0.10.5   ---      Normal  ---
rav1e->libfuzzer-sys                              0.3.5    ---      0.4.7    Normal  cfg(fuzzing)
rav1e->libfuzzer-sys                              0.4.7    0.3.5    ---      Normal  cfg(fuzzing)
rav1e->num-derive                                 0.3.3    ---      0.4.2    Normal  ---
rav1e->num-derive                                 0.4.2    0.3.3    ---      Normal  ---
rav1e->profiling                                  1.0.15   Removed  ---      Normal  ---
rav1e->rust_hawktracer                            0.7.0    ---      Removed  Normal  ---
rav1e->rustc_version                              0.4.0    ---      Removed  Build   ---
rav1e->wasm-bindgen                               0.2.92   ---      Removed  Normal  ---
ravif->rav1e                                      0.6.6    ---      0.7.1    Normal  cfg(target = "wasm32-unknown-unknown")
ravif->rav1e                                      0.7.1    0.6.6    ---      Normal  ---
rust_hawktracer->rust_hawktracer_normal_macro     0.4.1    ---      Removed  Normal  ---
rust_hawktracer->rust_hawktracer_proc_macro       0.4.1    ---      Removed  Normal  ---
rustc_version->semver                             1.0.22   ---      Removed  Normal  ---
semver->serde                                     1.0.197  ---      Removed  Normal  ---
serde->serde_derive                               1.0.197  ---      Removed  Normal  ---
serde_derive->proc-macro2                         1.0.79   ---      Removed  Normal  ---
serde_derive->quote                               1.0.35   ---      Removed  Normal  ---
serde_derive->syn                                 2.0.52   ---      Removed  Normal  ---
syn->proc-macro2                                  1.0.79   ---      Removed  Normal  ---
syn->proc-macro2                                  1.0.79   Removed  ---      Normal  ---
syn->quote                                        1.0.35   ---      Removed  Normal  ---
syn->quote                                        1.0.35   Removed  ---      Normal  ---
syn->unicode-ident                                1.0.12   ---      Removed  Normal  ---
syn->unicode-ident                                1.0.12   Removed  ---      Normal  ---
tinyvec->tinyvec_macros                           0.1.1    ---      Removed  Normal  ---
toml->serde                                       1.0.197  ---      Removed  Normal  ---
unicode-normalization->tinyvec                    1.6.0    ---      Removed  Normal  ---
url->form_urlencoded                              1.2.1    ---      Removed  Normal  ---
url->idna                                         0.5.0    ---      Removed  Normal  ---
url->percent-encoding                             2.3.1    ---      Removed  Normal  ---
wasm-bindgen->cfg-if                              1.0.0    ---      Removed  Normal  ---
wasm-bindgen->wasm-bindgen-macro                  0.2.92   ---      Removed  Normal  ---
wasm-bindgen-backend->bumpalo                     3.15.4   ---      Removed  Normal  ---
wasm-bindgen-backend->log                         0.4.21   ---      Removed  Normal  ---
wasm-bindgen-backend->once_cell                   1.19.0   ---      Removed  Normal  ---
wasm-bindgen-backend->proc-macro2                 1.0.79   ---      Removed  Normal  ---
wasm-bindgen-backend->quote                       1.0.35   ---      Removed  Normal  ---
wasm-bindgen-backend->syn                         2.0.52   ---      Removed  Normal  ---
wasm-bindgen-backend->wasm-bindgen-shared         0.2.92   ---      Removed  Normal  ---
wasm-bindgen-macro->quote                         1.0.35   ---      Removed  Normal  ---
wasm-bindgen-macro->wasm-bindgen-macro-support    0.2.92   ---      Removed  Normal  ---
wasm-bindgen-macro-support->proc-macro2           1.0.79   ---      Removed  Normal  ---
wasm-bindgen-macro-support->quote                 1.0.35   ---      Removed  Normal  ---
wasm-bindgen-macro-support->syn                   2.0.52   ---      Removed  Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-backend  0.2.92   ---      Removed  Normal  ---
wasm-bindgen-macro-support->wasm-bindgen-shared   0.2.92   ---      Removed  Normal  ---
kbknapp commented 6 months ago

Is this part of a larger repo/workspace? I can't seem to reproduce either via just a single dep image or via a real world repository. I let a script run a hundred times and the output is always the same.

dtolnay commented 6 months ago

Somewhere in image's dependency graph, whatever was triggering this went away on March 14. I checked the GitHub Actions history of https://github.com/dtolnay/unicode-ident and I see this failure occur between March 10 (when image 0.25.0 was released and I updated to it in https://github.com/dtolnay/unicode-ident/commit/05a09281767967ead580eddeea7bd3614af7a60a) through March 13:

and then since March 14 (https://github.com/dtolnay/unicode-ident/actions/runs/8290204559/job/22687874893) it has been succeeding.

The unicode-ident repo does use a workspace, but the outputs I pasted when filing this issue on March 11 are not from unicode-ident. I got all of them using the minimal repro with just a single image = "0.25.0" dependency and no workspace, using the latest nightly at the time (nightly-2024-03-12).

I tried to reproduce again today using nightly-2024-03-12 and the issue does not reproduce, so this issue isn't something that got fixed in Cargo — it's just been masked by some package in image's dependency graph getting published or yanked around March 14.

The list of crate versions that got pulled into the March 13 builds can be reconstructed from the cargo clippy step in https://github.com/dtolnay/unicode-ident/actions/runs/8274314132/job/22639463871.

Updating crates.io index... Downloading crates ... Downloaded adler v1.0.2 Downloaded aho-corasick v1.1.2 Downloaded aligned-vec v0.5.0 Downloaded anes v0.1.6 Downloaded anstyle v1.0.6 Downloaded anyhow v1.0.81 Downloaded arg_enum_proc_macro v0.3.4 Downloaded arrayvec v0.7.4 Downloaded autocfg v1.1.0 Downloaded av1-grain v0.2.3 Downloaded bit_field v0.10.2 Downloaded bitflags v1.3.2 Downloaded bitstream-io v2.2.0 Downloaded cast v0.3.0 Downloaded cfg-if v1.0.0 Downloaded ciborium-io v0.2.2 Downloaded ciborium-ll v0.2.2 Downloaded ciborium v0.2.2 Downloaded clap_builder v4.5.2 Downloaded clap v4.5.2 Downloaded flume v0.11.0 Downloaded fst v0.4.7 Downloaded getrandom v0.2.12 Downloaded jpeg-decoder v0.3.1 Downloaded libc v0.2.153 Downloaded num-rational v0.4.1 Downloaded proc-macro2 v1.0.79 Downloaded qoi v0.4.1 Downloaded rand_chacha v0.3.1 Downloaded rand_core v0.6.4 Downloaded rand v0.8.5 Downloaded rav1e v0.7.1 Downloaded ravif v0.11.4 Downloaded rayon-core v1.12.1 Downloaded rayon v1.9.0 Downloaded regex-automata v0.4.6 Downloaded regex-syntax v0.8.2 Downloaded regex v1.10.3 Downloaded rgb v0.8.37 Downloaded roaring v0.10.3 Downloaded same-file v1.0.6 Downloaded scopeguard v1.2.0 Downloaded serde_derive v1.0.197 Downloaded serde_json v1.0.114 Downloaded serde v1.0.197 Downloaded simd-adler32 v0.3.7 Downloaded simd_helpers v0.1.0 Downloaded smallvec v1.13.1 Downloaded spin v0.9.8 Downloaded syn v2.0.52 Downloaded thiserror-impl v1.0.58 Downloaded thiserror v1.0.58 Downloaded tiff v0.9.1 Downloaded tinytemplate v1.2.1 Downloaded ucd-trie v0.1.6 Downloaded unicode-ident v1.0.12 Downloaded unicode-xid v0.2.4 Downloaded v_frame v0.3.8 Downloaded walkdir v2.5.0 Downloaded weezl v0.1.8 Downloaded zune-core v0.4.12 Downloaded zune-inflate v0.2.54 Downloaded zune-jpeg v0.4.11

and on March 14 from https://github.com/dtolnay/unicode-ident/actions/runs/8290204559/job/22687875159:

Updating crates.io index... Downloading crates ... Downloaded adler v1.0.2 Downloaded aho-corasick v1.1.2 Downloaded aligned-vec v0.5.0 Downloaded anes v0.1.6 Downloaded anstyle v1.0.6 Downloaded anyhow v1.0.81 Downloaded arg_enum_proc_macro v0.3.4 Downloaded arrayvec v0.7.4 Downloaded autocfg v1.1.0 Downloaded av1-grain v0.2.3 Downloaded avif-serialize v0.8.1 Downloaded bit_field v0.10.2 Downloaded bitflags v1.3.2 Downloaded bumpalo v3.15.4 Downloaded bytemuck v1.15.0 Downloaded byteorder v1.5.0 Downloaded cast v0.3.0 Downloaded cfg-if v1.0.0 Downloaded ciborium-io v0.2.2 Downloaded ciborium-ll v0.2.2 Downloaded ciborium v0.2.2 Downloaded clap_lex v0.7.0 Downloaded color_quant v1.1.0 Downloaded crc32fast v1.4.0 Downloaded criterion-plot v0.5.0 Downloaded criterion v0.5.1 Downloaded crossbeam-deque v0.8.5 Downloaded either v1.10.0 Downloaded fdeflate v0.3.4 Downloaded gif v0.13.1 Downloaded image v0.25.0 Downloaded is-terminal v0.4.12 Downloaded itoa v1.0.10 Downloaded lebe v0.5.2 Downloaded loop9 v0.1.5 Downloaded new_debug_unreachable v1.0.4 Downloaded paste v1.0.14 Downloaded ppv-lite86 v0.2.17 Downloaded profiling-procmacros v1.0.15 Downloaded profiling v1.0.15 Downloaded qoi v0.4.1 Downloaded quick-error v2.0.1 Downloaded quote v1.0.35 Downloaded rand_chacha v0.3.1 Downloaded rand_core v0.6.4 Downloaded rand v0.8.5 Downloaded ravif v0.11.5 Downloaded simd-adler32 v0.3.7 Downloaded simd_helpers v0.1.0 Downloaded smallvec v1.13.1 Downloaded syn v2.0.52 Downloaded thiserror-impl v1.0.58 Downloaded thiserror v1.0.58 Downloaded tiff v0.9.1 Downloaded tinytemplate v1.2.1 Downloaded ucd-trie v0.1.6 Downloaded unicode-ident v1.0.12 Downloaded unicode-xid v0.2.4 Downloaded v_frame v0.3.8 Downloaded walkdir v2.5.0 Downloaded wasm-bindgen-backend v0.2.92 Downloaded wasm-bindgen-macro-support v0.2.92 Downloaded wasm-bindgen-macro v0.2.92 Downloaded wasm-bindgen-shared v0.2.92 Downloaded wasm-bindgen v0.2.92 Downloaded weezl v0.1.8 Downloaded zune-core v0.4.12 Downloaded zune-inflate v0.2.54 Downloaded zune-jpeg v0.4.11

The difference is:

10a11
>   Downloaded avif-serialize v0.8.1
13c14,16
<   Downloaded bitstream-io v2.2.0
---
>   Downloaded bumpalo v3.15.4
>   Downloaded bytemuck v1.15.0
>   Downloaded byteorder v1.5.0
19,27c22,40
<   Downloaded clap_builder v4.5.2
<   Downloaded clap v4.5.2
<   Downloaded flume v0.11.0
<   Downloaded fst v0.4.7
<   Downloaded getrandom v0.2.12
<   Downloaded jpeg-decoder v0.3.1
<   Downloaded libc v0.2.153
<   Downloaded num-rational v0.4.1
<   Downloaded proc-macro2 v1.0.79
---
>   Downloaded clap_lex v0.7.0
>   Downloaded color_quant v1.1.0
>   Downloaded crc32fast v1.4.0
>   Downloaded criterion-plot v0.5.0
>   Downloaded criterion v0.5.1
>   Downloaded crossbeam-deque v0.8.5
>   Downloaded either v1.10.0
>   Downloaded fdeflate v0.3.4
>   Downloaded gif v0.13.1
>   Downloaded image v0.25.0
>   Downloaded is-terminal v0.4.12
>   Downloaded itoa v1.0.10
>   Downloaded lebe v0.5.2
>   Downloaded loop9 v0.1.5
>   Downloaded new_debug_unreachable v1.0.4
>   Downloaded paste v1.0.14
>   Downloaded ppv-lite86 v0.2.17
>   Downloaded profiling-procmacros v1.0.15
>   Downloaded profiling v1.0.15
28a42,43
>   Downloaded quick-error v2.0.1
>   Downloaded quote v1.0.35
32,45c47
<   Downloaded rav1e v0.7.1
<   Downloaded ravif v0.11.4
<   Downloaded rayon-core v1.12.1
<   Downloaded rayon v1.9.0
<   Downloaded regex-automata v0.4.6
<   Downloaded regex-syntax v0.8.2
<   Downloaded regex v1.10.3
<   Downloaded rgb v0.8.37
<   Downloaded roaring v0.10.3
<   Downloaded same-file v1.0.6
<   Downloaded scopeguard v1.2.0
<   Downloaded serde_derive v1.0.197
<   Downloaded serde_json v1.0.114
<   Downloaded serde v1.0.197
---
>   Downloaded ravif v0.11.5
49d50
<   Downloaded spin v0.9.8
59a61,65
>   Downloaded wasm-bindgen-backend v0.2.92
>   Downloaded wasm-bindgen-macro-support v0.2.92
>   Downloaded wasm-bindgen-macro v0.2.92
>   Downloaded wasm-bindgen-shared v0.2.92
>   Downloaded wasm-bindgen v0.2.92
dtolnay commented 6 months ago

Fortunately, this is easy to narrow down: Looks like ravif is the only package that appears in both March 13 and March 14 but with different versions: 0.11.4 to 0.11.5. Indeed 0.11.5 got published on March 14 and accounts for every single other dependency change. https://crates.io/crates/ravif/0.11.5

So here is a surefire repro as of today:

#!/bin/bash

mkdir repro
cd repro
cargo +stable init
cargo +stable add image
cargo +stable add ravif@=0.11.4
cargo +stable outdated > cargo-outdated-0.out

while true; do
    rm Cargo.lock
    cargo +stable outdated > cargo-outdated-1.out
    if ! diff -q cargo-outdated-0.out cargo-outdated-1.out &>/dev/null; then
        cat cargo-outdated-0.out cargo-outdated-1.out
        exit
    fi
    echo did not reproduce, trying again
done
dtolnay commented 6 months ago

I confirmed that the only difference between ravif 0.11.4 and ravif 0.11.5 is https://github.com/kornelski/cavif-rs/commit/d1577372a04a78f677fe94a91e0dba2df81f4f80.

This situation is probably your root cause:

[dependencies]
rav1e = { version = "0.7", default-features = false, features = ["threading"] }
#...

[target.'cfg(target = "wasm32-unknown-unknown")'.dependencies]
rav1e = { version = "0.6", default-features = false, features = ["wasm"] }