Add generator for single crate flake
This commit is contained in:
parent
96b2edfb41
commit
d05b9e331e
134
flake.nix
134
flake.nix
|
@ -11,14 +11,23 @@
|
|||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
# Advisory db from rust-sec
|
||||
advisory-db = {
|
||||
url = "github:RustSec/advisory-db";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
description = "Rust Toolchain and Utility Flake";
|
||||
|
||||
outputs = { self, nixpkgs, utils, ... }@inputs:
|
||||
(utils.lib.eachDefaultSystem (system: {
|
||||
with builtins;
|
||||
let
|
||||
sources = fromJSON (readFile ./sources/sources.json);
|
||||
rustPackageNames = attrValues sources;
|
||||
# Build the rust packages we'll be using
|
||||
in (utils.lib.eachDefaultSystem (system: {
|
||||
packages = let
|
||||
sources = builtins.fromJSON (builtins.readFile ./sources/sources.json);
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ (import inputs.rust-overlay) ];
|
||||
|
@ -30,10 +39,127 @@
|
|||
rustc = rust;
|
||||
cargo = rust;
|
||||
};
|
||||
in builtins.mapAttrs (name: source:
|
||||
in mapAttrs (name: source:
|
||||
naersk-lib.buildPackage {
|
||||
pname = source.pname;
|
||||
src = pkgs.fetchCrate source;
|
||||
}) sources;
|
||||
}));
|
||||
})) //
|
||||
# Now provide our builder functions
|
||||
{
|
||||
# Build a rust flake with a single crate
|
||||
single = { src, crateName, sharedDeps ? (system: [ ])
|
||||
, sharedNativeDeps ? (system: [ ]) }:
|
||||
utils.lib.eachDefaultsystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ (import inputs.rust-overlay) ];
|
||||
};
|
||||
rust = pkgs.rust-bin.stable.latest.default.override {
|
||||
extensions = [ "llvm-tools-preview" ];
|
||||
};
|
||||
naersk-lib = inputs.naersk.lib."${system}".override {
|
||||
rustc = rust;
|
||||
cargo = rust;
|
||||
};
|
||||
devBase = with pkgs;
|
||||
[
|
||||
# Build tools
|
||||
openssl
|
||||
pkg-config
|
||||
rust-analyzer
|
||||
cmake
|
||||
gnuplot
|
||||
# git tooling
|
||||
gitFull
|
||||
pre-commit
|
||||
git-lfs
|
||||
git-cliff
|
||||
# Formatters
|
||||
nixfmt
|
||||
python311Packages.mdformat
|
||||
] ++ map (x: self.packages.${system}.${x}) rustPackageNames;
|
||||
in rec {
|
||||
# Main binary
|
||||
packages.${crateName} = naersk-lib.buildPackage {
|
||||
pname = "${crateName}";
|
||||
buildInputs = sharedDeps system;
|
||||
nativeBuildInputs = sharedNativeDeps system;
|
||||
root = src;
|
||||
};
|
||||
# binary + tests
|
||||
packages.tests.${crateName} = naersk-lib.buildPackage {
|
||||
pname = "${crateName}";
|
||||
buildInputs = sharedDeps system;
|
||||
nativeBuildInputs = sharedNativeDeps system;
|
||||
root = src;
|
||||
doCheck = true;
|
||||
};
|
||||
# Docs
|
||||
packages.docs.${crateName} = naersk-lib.buildPackage {
|
||||
pname = "${crateName}";
|
||||
buildInputs = sharedDeps system;
|
||||
nativeBuildInputs = sharedNativeDeps system;
|
||||
root = src;
|
||||
dontBuild = true;
|
||||
doDoc = true;
|
||||
doDocFail = true;
|
||||
};
|
||||
|
||||
# Set the default package to the main binary
|
||||
defaultPackage = packages.${crateName};
|
||||
|
||||
# CI tasks
|
||||
packages.lints = {
|
||||
# lint formatting
|
||||
format.${crateName} = with import nixpkgs { inherit system; };
|
||||
stdenv.mkDerivation {
|
||||
name = "format lint";
|
||||
src = src;
|
||||
nativeBuildInputs = with pkgs;
|
||||
[ rust-bin.stable.latest.default ]
|
||||
++ (sharedNativeDeps system);
|
||||
buildInputs = sharedDeps system;
|
||||
buildPhase = "cargo fmt -- --check";
|
||||
installPhase = "mkdir -p $out; echo 'done'";
|
||||
};
|
||||
# audit against stored advisory db
|
||||
audit.${crateName} = with import nixpkgs { inherit system; };
|
||||
stdenv.mkDerivation {
|
||||
name = "audit lint";
|
||||
src = src;
|
||||
nativeBuildInputs = with pkgs;
|
||||
[ rust-bin.stable.latest.default cargo-audit ]
|
||||
++ (sharedNativeDeps system);
|
||||
buildInputs = sharedDeps system;
|
||||
buildPhase = ''
|
||||
export HOME=$TMP
|
||||
mkdir -p ~/.cargo
|
||||
cp -r ${advisory-db} ~/.cargo/advisory-db
|
||||
cargo audit -n
|
||||
'';
|
||||
installPhase = "mkdir -p $out; echo 'done'";
|
||||
};
|
||||
# Clippy
|
||||
clippy.${crateName} = naersk-lib.buildPackage {
|
||||
pname = "${crateName}";
|
||||
root = src;
|
||||
buildInputs = sharedDeps system;
|
||||
nativeBuildInputs = sharedNativeDeps system;
|
||||
cargoTestCommands = (old: [ "cargo $cargo_options clippy" ]);
|
||||
doCheck = true;
|
||||
dontBuild = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Development environments
|
||||
devShell = pkgs.mkShell {
|
||||
inputsFrom = builtins.attrValues packages.${system};
|
||||
buildInputs = [ rust ] ++ devBase ++ (sharedDeps system)
|
||||
++ (sharedNativeDeps system);
|
||||
};
|
||||
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue