mysqladm-rs/nix/coverage.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;
};
}