flake.nix: create packaging, generate coverage
This commit is contained in:
parent
e420c1f4d5
commit
dc29dd274a
43
flake.nix
43
flake.nix
|
@ -7,7 +7,9 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, rust-overlay }@inputs:
|
outputs = { self, nixpkgs, rust-overlay }@inputs:
|
||||||
let
|
let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
|
||||||
systems = [
|
systems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
|
@ -15,6 +17,7 @@
|
||||||
"aarch64-darwin"
|
"aarch64-darwin"
|
||||||
"armv7l-linux"
|
"armv7l-linux"
|
||||||
];
|
];
|
||||||
|
|
||||||
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: let
|
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
@ -27,6 +30,16 @@
|
||||||
toolchain = rust-bin.stable.latest.default;
|
toolchain = rust-bin.stable.latest.default;
|
||||||
in f system pkgs toolchain);
|
in f system pkgs toolchain);
|
||||||
in {
|
in {
|
||||||
|
|
||||||
|
apps = let
|
||||||
|
mkApp = program: { type = "app"; program = toString program; };
|
||||||
|
in forAllSystems (system: pkgs: _: {
|
||||||
|
mysqladm-rs = mkApp (lib.getExe self.packages.${system}.mysqladm-rs);
|
||||||
|
coverage = mkApp (pkgs.writeScript "mysqladm-rs-coverage" ''
|
||||||
|
${lib.getExe pkgs.python3} -m http.server -d "${self.packages.${system}.coverage}/html/src"
|
||||||
|
'');
|
||||||
|
});
|
||||||
|
|
||||||
devShell = forAllSystems (system: pkgs: toolchain: pkgs.mkShell {
|
devShell = forAllSystems (system: pkgs: toolchain: pkgs.mkShell {
|
||||||
nativeBuildInputs = with pkgs; [
|
nativeBuildInputs = with pkgs; [
|
||||||
toolchain
|
toolchain
|
||||||
|
@ -36,5 +49,33 @@
|
||||||
|
|
||||||
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
|
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
overlays = {
|
||||||
|
default = self.overlays.mysqladm-rs;
|
||||||
|
greg-ng = final: prev: {
|
||||||
|
inherit (self.packages.${prev.system}) mysqladm-rs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = let
|
||||||
|
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
||||||
|
cargoLock = ./Cargo.lock;
|
||||||
|
src = builtins.filterSource (path: type: let
|
||||||
|
baseName = baseNameOf (toString path);
|
||||||
|
in !(lib.any (b: b) [
|
||||||
|
(!(lib.cleanSourceFilter path type))
|
||||||
|
(baseName == "target" && type == "directory")
|
||||||
|
(baseName == "nix" && type == "directory")
|
||||||
|
(baseName == "flake.nix" && type == "regular")
|
||||||
|
(baseName == "flake.lock" && type == "regular")
|
||||||
|
])) ./.;
|
||||||
|
in forAllSystems (system: pkgs: _: {
|
||||||
|
default = self.packages.${system}.mysqladm-rs;
|
||||||
|
mysqladm-rs = pkgs.callPackage ./nix/default.nix { inherit cargoToml cargoLock src; };
|
||||||
|
coverage = pkgs.callPackage ./nix/coverage.nix { inherit cargoToml cargoLock src; };
|
||||||
|
filteredSource = pkgs.runCommandLocal "filtered-source" { } ''
|
||||||
|
ln -s ${src} $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
lib
|
||||||
|
, rustPlatform
|
||||||
|
, cargoToml
|
||||||
|
, cargoLock
|
||||||
|
, src
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
pname = cargoToml.package.name;
|
||||||
|
version = cargoToml.package.version;
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
cargoLock.lockFile = cargoLock;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
license = licenses.mit;
|
||||||
|
platforms = platforms.linux ++ platforms.darwin;
|
||||||
|
mainProgram = (lib.head cargoToml.bin).name;
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue