76 lines
1.4 KiB
Nix
76 lines
1.4 KiB
Nix
{
|
|
lib
|
|
, stdenvNoCC
|
|
, rustPlatform
|
|
, cargoToml
|
|
, cargoLock
|
|
, src
|
|
|
|
, rust-bin
|
|
, cargo-nextest
|
|
, grcov
|
|
}:
|
|
|
|
stdenvNoCC.mkDerivation {
|
|
pname = "coverage-${cargoToml.package.name}";
|
|
version = cargoToml.package.version;
|
|
inherit src;
|
|
|
|
env = {
|
|
RUSTFLAGS = "-Cinstrument-coverage";
|
|
LLVM_PROFILE_FILE = "target/coverage/%p-%m.profraw";
|
|
};
|
|
|
|
cargoDeps = rustPlatform.importCargoLock {
|
|
lockFile = cargoLock;
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
rustPlatform.cargoSetupHook
|
|
cargo-nextest
|
|
grcov
|
|
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
|
|
extensions = [ "llvm-tools-preview" ];
|
|
}))
|
|
];
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
export HOME="$(pwd)"
|
|
|
|
cargo nextest run --all-features --release --no-fail-fast
|
|
|
|
grcov \
|
|
--source-dir . \
|
|
--binary-path ./target/release/deps/ \
|
|
--excl-start 'mod test* \{' \
|
|
--ignore 'tests/*' \
|
|
--ignore "*test.rs" \
|
|
--ignore "*tests.rs" \
|
|
--ignore "*github.com*" \
|
|
--ignore "*libcore*" \
|
|
--ignore "*rustc*" \
|
|
--ignore "*liballoc*" \
|
|
--ignore "*cargo*" \
|
|
-t html \
|
|
-o ./target/coverage/html \
|
|
target/coverage/
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preBuild
|
|
|
|
mv target/coverage $out
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
meta = with lib; {
|
|
license = licenses.mit;
|
|
platforms = platforms.linux ++ platforms.darwin;
|
|
};
|
|
}
|