]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ci: verify minimum supported Rust version
authorPatrick Steinhardt <ps@pks.im>
Wed, 15 Oct 2025 06:04:09 +0000 (08:04 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 Oct 2025 15:10:17 +0000 (08:10 -0700)
In the current state of our Rust code base we don't really have any
requirements for the minimum supported Rust version yet, as we don't use
any features introduced by a recent version of Rust. Consequently, we
have decided that we want to aim for a rather old version and edition of
Rust, where the hope is that using an old version will make alternatives
like gccrs viable earlier for compiling Git.

But while we specify the Rust edition, we don't yet specify a Rust
version. And even if we did, the Rust version would only be enforced for
our own code, but not for any of our dependencies.

We don't yet have any dependencies at the current point in time. But
let's add some safeguards by specifying the minimum supported Rust
version and using cargo-msrv(1) to verify that this version can be
satisfied for all of our dependencies.

Note that we fix the version of cargo-msrv(1) at v0.18.1. This is the
latest release supported by Ubuntu's Rust version.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Cargo.toml
ci/install-dependencies.sh
ci/run-rust-checks.sh

index 45c9b34981abb311866666d3ef495611b28ffa3b..2f51bf5d5ff5f83e023cbc17f4365d99ab837ce0 100644 (file)
@@ -2,6 +2,7 @@
 name = "gitcore"
 version = "0.1.0"
 edition = "2018"
+rust-version = "1.49.0"
 
 [lib]
 crate-type = ["staticlib"]
index dcd22ddd95c75e61c7ac3dd090efae380003b503..29e558bb9ccd7e4ff838a79044b03a2a385a1844 100755 (executable)
@@ -10,6 +10,8 @@ begin_group "Install dependencies"
 P4WHENCE=https://cdist2.perforce.com/perforce/r23.2
 LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION
 JGITWHENCE=https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit.pgm/6.8.0.202311291450-r/org.eclipse.jgit.pgm-6.8.0.202311291450-r.sh
+CARGO_MSRV_VERSION=0.18.4
+CARGO_MSRV_WHENCE=https://github.com/foresterre/cargo-msrv/releases/download/v$CARGO_MSRV_VERSION/cargo-msrv-x86_64-unknown-linux-musl-v$CARGO_MSRV_VERSION.tgz
 
 # Make sudo a no-op and execute the command directly when running as root.
 # While using sudo would be fine on most platforms when we are root already,
@@ -130,6 +132,12 @@ RustAnalysis)
        sudo apt-get -q -y install rustup
        rustup default stable
        rustup component add clippy rustfmt
+
+       wget -q "$CARGO_MSRV_WHENCE" -O "cargo-msvc.tgz"
+       sudo mkdir -p "$CUSTOM_PATH"
+       sudo tar -xf "cargo-msvc.tgz" --strip-components=1 \
+               --directory "$CUSTOM_PATH" --wildcards "*/cargo-msrv"
+       sudo chmod a+x "$CUSTOM_PATH/cargo-msrv"
        ;;
 sparse)
        sudo apt-get -q -y install libssl-dev libcurl4-openssl-dev \
index fb5ea8991b8af4f2fcc414da53194ea0d4461536..b5ad9e8dc6f71fbd8a329f23b80bab8935fd6ff0 100755 (executable)
@@ -14,4 +14,9 @@ then
        RET=1
 fi
 
+if ! group "Check for minimum required Rust version" cargo msrv verify
+then
+       RET=1
+fi
+
 exit $RET