Merge pull request #203520 from figsoda/nextest

rustPlatform.buildRustPackage: add cargo-nextest support
This commit is contained in:
figsoda 2022-12-03 19:03:34 -05:00 committed by GitHub
commit 75c01e730d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 87 additions and 4 deletions

View file

@ -331,6 +331,20 @@ rustPlatform.buildRustPackage {
}
```
#### Using `cargo-nextest` {#using-cargo-nextest}
Tests can be run with [cargo-nextest](https://github.com/nextest-rs/nextest)
by setting `useNextest = true`. The same options still apply, but nextest
accepts a different set of arguments and the settings might need to be
adapted to be compatible with cargo-nextest.
```nix
rustPlatform.buildRustPackage {
/* ... */
useNextest = true;
}
```
#### Setting `test-threads` {#setting-test-threads}
`buildRustPackage` will use parallel test threads by default,
@ -474,6 +488,9 @@ you of the correct hash.
flags can be passed to the tests using `checkFlags` and
`checkFlagsArray`. By default, tests are run in parallel. This can
be disabled by setting `dontUseCargoParallelTests`.
* `cargoNextestHook`: run tests using
[cargo-nextest](https://github.com/nextest-rs/nextest). The same
options for `cargoCheckHook` also applies to `cargoNextestHook`.
* `cargoInstallHook`: install binaries and static/shared libraries
that were built using `cargoBuildHook`.
* `bindgenHook`: for crates which use `bindgen` as a build dependency, lets

View file

@ -9,6 +9,7 @@
, cargoBuildHook
, cargoCheckHook
, cargoInstallHook
, cargoNextestHook
, cargoSetupHook
, rustc
, libiconv
@ -40,6 +41,7 @@
, checkNoDefaultFeatures ? buildNoDefaultFeatures
, buildFeatures ? [ ]
, checkFeatures ? buildFeatures
, useNextest ? false
, depsExtraArgs ? {}
# Toggles whether a custom sysroot is created when the target is a .json file.
@ -117,7 +119,7 @@ stdenv.mkDerivation ((removeAttrs args [ "depsExtraArgs" "cargoUpdateHook" "carg
cacert
git
cargoBuildHook
cargoCheckHook
(if useNextest then cargoNextestHook else cargoCheckHook)
cargoInstallHook
cargoSetupHook
rustc

View file

@ -0,0 +1,54 @@
declare -a checkFlags
declare -a cargoTestFlags
cargoNextestHook() {
echo "Executing cargoNextestHook"
runHook preCheck
if [[ -n "${buildAndTestSubdir-}" ]]; then
pushd "${buildAndTestSubdir}"
fi
if [[ -z ${dontUseCargoParallelTests-} ]]; then
threads=$NIX_BUILD_CORES
else
threads=1
fi
if [ "${cargoCheckType}" != "debug" ]; then
cargoCheckProfileFlag="--${cargoCheckType}"
fi
if [ -n "${cargoCheckNoDefaultFeatures-}" ]; then
cargoCheckNoDefaultFeaturesFlag=--no-default-features
fi
if [ -n "${cargoCheckFeatures-}" ]; then
cargoCheckFeaturesFlag="--features=${cargoCheckFeatures// /,}"
fi
argstr="${cargoCheckProfileFlag} ${cargoCheckNoDefaultFeaturesFlag} ${cargoCheckFeaturesFlag}
--target @rustTargetPlatformSpec@ --frozen ${cargoTestFlags}"
(
set -x
cargo nextest run \
-j ${threads} \
${argstr} -- \
${checkFlags} \
${checkFlagsArray+"${checkFlagsArray[@]}"}
)
if [[ -n "${buildAndTestSubdir-}" ]]; then
popd
fi
echo "Finished cargoNextestHook"
runHook postCheck
}
if [ -z "${dontCargoCheck-}" ] && [ -z "${checkPhase-}" ]; then
checkPhase=cargoNextestHook
fi

View file

@ -1,6 +1,7 @@
{ buildPackages
, callPackage
, cargo
, cargo-nextest
, clang
, lib
, makeSetupHook
@ -55,6 +56,15 @@ in {
};
} ./cargo-install-hook.sh) {};
cargoNextestHook = callPackage ({ }:
makeSetupHook {
name = "cargo-nextest-hook.sh";
deps = [ cargo cargo-nextest ];
substitutions = {
inherit rustTargetPlatformSpec;
};
} ./cargo-nextest-hook.sh) {};
cargoSetupHook = callPackage ({ }:
makeSetupHook {
name = "cargo-setup-hook.sh";

View file

@ -14,7 +14,7 @@ rec {
buildRustPackage = callPackage ../../../build-support/rust/build-rust-package {
git = buildPackages.gitMinimal;
inherit stdenv cargoBuildHook cargoCheckHook cargoInstallHook cargoSetupHook
inherit stdenv cargoBuildHook cargoCheckHook cargoInstallHook cargoNextestHook cargoSetupHook
fetchCargoTarball importCargoLock rustc;
};
@ -31,5 +31,5 @@ rec {
# Hooks
inherit (callPackage ../../../build-support/rust/hooks {
inherit stdenv cargo rustc;
}) cargoBuildHook cargoCheckHook cargoInstallHook cargoSetupHook maturinBuildHook bindgenHook;
}) cargoBuildHook cargoCheckHook cargoInstallHook cargoNextestHook cargoSetupHook maturinBuildHook bindgenHook;
}

View file

@ -15,7 +15,7 @@ rustPlatform.buildRustPackage rec {
checkInputs = [ python3 ];
dontUseCargoParallelTests = true;
useNextest = true;
meta = with lib; {
description = "An implementation of the `py` command for Unix-based platforms";