👏

MSRVでCIを実行するときに設定しておくべき環境変数

に公開

概要

export CARGO_UNSTABLE_SPARSE_REGISTRY="true" # for rust_version < 1.68
export CARGO_REGISTRIES_CRATES_IO_PROTOCOL="sparse" # for 1.68 <= rust_version < 1.70
export CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS="fallback" # for edition < 2024
variables:
  CARGO_UNSTABLE_SPARSE_REGISTRY: "true"
  CARGO_REGISTRIES_CRATES_IO_PROTOCOL: "sparse"
  CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: "fallback"

sparse registory

non-sparseなレジストリでも動くが、非常にCIの時間が延びてしまう。
1.67以前はnightlyと環境変数の設定が必要。
1.68以降で1.69以前はdefaultでは有効化されないので環境変数の設定が必要。
https://blog.rust-lang.org/2022/06/22/sparse-registry-testing/
https://blog.rust-lang.org/2023/03/09/Rust-1.68.0/#cargo-s-sparse-protocol
https://blog.rust-lang.org/2023/06/01/Rust-1.70.0/#sparse-by-default-for-crates-io

MSRVを考慮した依存解決

2024 editionではデフォルトでMSRVを考慮した依存解決をしてくれるが、2021 edition以前では環境変数の設定が必要。
https://doc.rust-lang.org/edition-guide/rust-2024/cargo-resolver.html
https://doc.rust-lang.org/cargo/reference/config.html#resolverincompatible-rust-versions

終わりに

他にもありましたらコメント等で教えて下さい

Discussion