Merge pull request #203520 from figsoda/nextest
rustPlatform.buildRustPackage: add cargo-nextest support
This commit is contained in:
commit
75c01e730d
@ -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
|
||||
|
@ -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
|
||||
|
54
pkgs/build-support/rust/hooks/cargo-nextest-hook.sh
Normal file
54
pkgs/build-support/rust/hooks/cargo-nextest-hook.sh
Normal 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
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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";
|
||||
|
Loading…
Reference in New Issue
Block a user