Compare commits

..

No commits in common. "7d9b2d18187647060cd1b204d916ca0317739707" and "96b2edfb41eb6eed674c32e4576c432720b26959" have entirely different histories.

5 changed files with 4 additions and 176 deletions

134
flake.nix
View File

@ -11,23 +11,14 @@
url = "github:oxalica/rust-overlay"; url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# Advisory db from rust-sec
advisory-db = {
url = "github:RustSec/advisory-db";
flake = false;
};
}; };
description = "Rust Toolchain and Utility Flake"; description = "Rust Toolchain and Utility Flake";
outputs = { self, nixpkgs, utils, ... }@inputs: outputs = { self, nixpkgs, utils, ... }@inputs:
with builtins; (utils.lib.eachDefaultSystem (system: {
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 packages = let
sources = builtins.fromJSON (builtins.readFile ./sources/sources.json);
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
overlays = [ (import inputs.rust-overlay) ]; overlays = [ (import inputs.rust-overlay) ];
@ -39,127 +30,10 @@
rustc = rust; rustc = rust;
cargo = rust; cargo = rust;
}; };
in mapAttrs (name: source: in builtins.mapAttrs (name: source:
naersk-lib.buildPackage { naersk-lib.buildPackage {
pname = source.pname; pname = source.pname;
src = pkgs.fetchCrate source; src = pkgs.fetchCrate source;
}) sources; }) 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);
};
});
};
} }

View File

@ -1,8 +0,0 @@
[package]
name = "test-crate"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View File

@ -1,25 +0,0 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1683777345,
"narHash": "sha256-V2p/A4RpEGqEZussOnHYMU6XglxBJGCODdzoyvcwig8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "635a306fc8ede2e34cb3dd0d6d0a5d49362150ed",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View File

@ -1,10 +0,0 @@
{
inputs = { rust = { url = ./..; }; };
description = "Simple Test Package";
outputs = { self, nixpkgs, rust }:
rust.single {
name = "test-crate";
src = ./.;
};
}

View File

@ -1,3 +0,0 @@
fn main() {
println!("Hello, world!");
}