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}
|
#### Setting `test-threads` {#setting-test-threads}
|
||||||
|
|
||||||
`buildRustPackage` will use parallel test threads by default,
|
`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
|
flags can be passed to the tests using `checkFlags` and
|
||||||
`checkFlagsArray`. By default, tests are run in parallel. This can
|
`checkFlagsArray`. By default, tests are run in parallel. This can
|
||||||
be disabled by setting `dontUseCargoParallelTests`.
|
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
|
* `cargoInstallHook`: install binaries and static/shared libraries
|
||||||
that were built using `cargoBuildHook`.
|
that were built using `cargoBuildHook`.
|
||||||
* `bindgenHook`: for crates which use `bindgen` as a build dependency, lets
|
* `bindgenHook`: for crates which use `bindgen` as a build dependency, lets
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
, cargoBuildHook
|
, cargoBuildHook
|
||||||
, cargoCheckHook
|
, cargoCheckHook
|
||||||
, cargoInstallHook
|
, cargoInstallHook
|
||||||
|
, cargoNextestHook
|
||||||
, cargoSetupHook
|
, cargoSetupHook
|
||||||
, rustc
|
, rustc
|
||||||
, libiconv
|
, libiconv
|
||||||
@ -40,6 +41,7 @@
|
|||||||
, checkNoDefaultFeatures ? buildNoDefaultFeatures
|
, checkNoDefaultFeatures ? buildNoDefaultFeatures
|
||||||
, buildFeatures ? [ ]
|
, buildFeatures ? [ ]
|
||||||
, checkFeatures ? buildFeatures
|
, checkFeatures ? buildFeatures
|
||||||
|
, useNextest ? false
|
||||||
, depsExtraArgs ? {}
|
, depsExtraArgs ? {}
|
||||||
|
|
||||||
# Toggles whether a custom sysroot is created when the target is a .json file.
|
# 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
|
cacert
|
||||||
git
|
git
|
||||||
cargoBuildHook
|
cargoBuildHook
|
||||||
cargoCheckHook
|
(if useNextest then cargoNextestHook else cargoCheckHook)
|
||||||
cargoInstallHook
|
cargoInstallHook
|
||||||
cargoSetupHook
|
cargoSetupHook
|
||||||
rustc
|
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
|
{ buildPackages
|
||||||
, callPackage
|
, callPackage
|
||||||
, cargo
|
, cargo
|
||||||
|
, cargo-nextest
|
||||||
, clang
|
, clang
|
||||||
, lib
|
, lib
|
||||||
, makeSetupHook
|
, makeSetupHook
|
||||||
@ -55,6 +56,15 @@ in {
|
|||||||
};
|
};
|
||||||
} ./cargo-install-hook.sh) {};
|
} ./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 ({ }:
|
cargoSetupHook = callPackage ({ }:
|
||||||
makeSetupHook {
|
makeSetupHook {
|
||||||
name = "cargo-setup-hook.sh";
|
name = "cargo-setup-hook.sh";
|
||||||
|
@ -14,7 +14,7 @@ rec {
|
|||||||
|
|
||||||
buildRustPackage = callPackage ../../../build-support/rust/build-rust-package {
|
buildRustPackage = callPackage ../../../build-support/rust/build-rust-package {
|
||||||
git = buildPackages.gitMinimal;
|
git = buildPackages.gitMinimal;
|
||||||
inherit stdenv cargoBuildHook cargoCheckHook cargoInstallHook cargoSetupHook
|
inherit stdenv cargoBuildHook cargoCheckHook cargoInstallHook cargoNextestHook cargoSetupHook
|
||||||
fetchCargoTarball importCargoLock rustc;
|
fetchCargoTarball importCargoLock rustc;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -31,5 +31,5 @@ rec {
|
|||||||
# Hooks
|
# Hooks
|
||||||
inherit (callPackage ../../../build-support/rust/hooks {
|
inherit (callPackage ../../../build-support/rust/hooks {
|
||||||
inherit stdenv cargo rustc;
|
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 ];
|
checkInputs = [ python3 ];
|
||||||
|
|
||||||
dontUseCargoParallelTests = true;
|
useNextest = true;
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "An implementation of the `py` command for Unix-based platforms";
|
description = "An implementation of the `py` command for Unix-based platforms";
|
||||||
|
Loading…
Reference in New Issue
Block a user