Skip to content

Commit 1b07117

Browse files
committed
Abstract away Rust builder
1 parent 4d603d3 commit 1b07117

File tree

4 files changed

+86
-122
lines changed

4 files changed

+86
-122
lines changed

extras/build.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
overlayAttrs = {
1010
extras = {
1111
purescriptFlake = import ./flake-purescript.nix pkgs;
12+
rustFlake = import ./flake-rust.nix pkgs;
1213
haskellData = import ./haskell-data.nix pkgs;
1314
};
1415
};

extras/flake-rust.nix

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
pkgs:
2+
3+
{ crane, src, system, crateName, localDeps, dataDeps }:
4+
let
5+
rustWithTools = pkgs.rust-bin.stable.latest.default.override {
6+
extensions = [ "rustfmt" "rust-analyzer" "clippy" ];
7+
};
8+
craneLib = crane.lib.${system}.overrideToolchain rustWithTools;
9+
10+
buildEnv = pkgs.stdenv.mkDerivation {
11+
inherit src;
12+
name = "lbf-rust-workspace";
13+
unpackPhase = builtins.concatStringsSep "\n"
14+
([
15+
"mkdir -p $out"
16+
"cp -r $src $out/${crateName}"
17+
]
18+
++ (map ({ name, path }: "cp -r ${path} $out/${name}") localDeps)
19+
++ (map ({ name, path }: "cp -r ${path} $out/${name}") dataDeps)
20+
);
21+
};
22+
commonArgs = {
23+
src = buildEnv;
24+
pname = crateName;
25+
strictDeps = true;
26+
cargoLock = "${src}/Cargo.lock";
27+
cargoToml = "${src}/Cargo.toml";
28+
postUnpack = ''
29+
cd $sourceRoot/${crateName}
30+
sourceRoot="."
31+
'';
32+
};
33+
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
34+
35+
in
36+
{
37+
devShells."dev-${crateName}-rust" = craneLib.devShell {
38+
# checks = self'.checks;
39+
};
40+
41+
packages."${crateName}-rust" = craneLib.buildPackage commonArgs // {
42+
inherit cargoArtifacts;
43+
doCheck = false;
44+
};
45+
46+
checks."${crateName}-rust-test" = craneLib.cargoNextest (commonArgs // {
47+
inherit cargoArtifacts;
48+
});
49+
50+
checks."${crateName}-rust-clippy" = craneLib.cargoClippy (commonArgs // {
51+
inherit cargoArtifacts;
52+
});
53+
}
Lines changed: 16 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,22 @@
11
{ inputs, ... }: {
2-
perSystem = { self', pkgs, system, ... }:
2+
perSystem = { system, config, ... }:
33
let
4-
rustProject = { crateName, localDeps, dataDeps }:
5-
let
6-
rustWithTools = pkgs.rust-bin.stable.latest.default.override {
7-
extensions = [ "rustfmt" "rust-analyzer" "clippy" ];
8-
};
9-
craneLib = inputs.crane.lib.${system}.overrideToolchain rustWithTools;
10-
11-
buildEnv = pkgs.stdenv.mkDerivation {
12-
src = ./.;
13-
name = "lbf-rust-workspace";
14-
unpackPhase = builtins.concatStringsSep "\n"
15-
([
16-
"mkdir -p $out"
17-
"cp -r $src $out/${crateName}"
18-
]
19-
++ (map ({ name, path }: "cp -r ${path} $out/${name}") localDeps)
20-
++ (map ({ name, path }: "cp -r ${path} $out/${name}") dataDeps)
21-
);
22-
};
23-
commonArgs = {
24-
src = buildEnv;
25-
pname = crateName;
26-
strictDeps = true;
27-
cargoLock = ./Cargo.lock;
28-
cargoToml = ./Cargo.toml;
29-
postUnpack = ''
30-
cd $sourceRoot/${crateName}
31-
sourceRoot="."
32-
'';
33-
};
34-
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
35-
36-
in
37-
{
38-
devShells."dev-${crateName}-rust" = craneLib.devShell {
39-
checks = self'.checks;
40-
};
41-
42-
packages."${crateName}-rust" = craneLib.buildPackage commonArgs // {
43-
inherit cargoArtifacts;
44-
doCheck = false;
45-
};
46-
47-
checks."${crateName}-rust-test" = craneLib.cargoNextest (commonArgs // {
48-
inherit cargoArtifacts;
49-
});
50-
51-
checks."${crateName}-rust-clippy" = craneLib.cargoClippy (commonArgs // {
52-
inherit cargoArtifacts;
53-
});
4+
rustFlake =
5+
config.overlayAttrs.extras.rustFlake {
6+
inherit system;
7+
src = ./.;
8+
crane = inputs.crane;
9+
crateName = "lbr-prelude-derive";
10+
localDeps = [
11+
{
12+
name = "lbr-prelude";
13+
path = ../lbr-prelude;
14+
}
15+
];
16+
dataDeps = [ ];
5417
};
5518
in
56-
rustProject {
57-
crateName = "lbr-prelude-derive";
58-
localDeps = [
59-
{
60-
name = "lbr-prelude";
61-
path = ../lbr-prelude;
62-
}
63-
];
64-
dataDeps = [ ];
19+
{
20+
inherit (rustFlake) packages checks devShells;
6521
};
66-
6722
}

runtimes/rust/lbr-prelude/build.nix

Lines changed: 16 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,22 @@
11
{ inputs, ... }: {
2-
perSystem = { self', pkgs, system, ... }:
2+
perSystem = { system, config, ... }:
33
let
4-
rustProject = { crateName, localDeps, dataDeps }:
5-
let
6-
rustWithTools = pkgs.rust-bin.stable.latest.default.override {
7-
extensions = [ "rustfmt" "rust-analyzer" "clippy" ];
8-
};
9-
craneLib = inputs.crane.lib.${system}.overrideToolchain rustWithTools;
10-
11-
buildEnv = pkgs.stdenv.mkDerivation {
12-
src = ./.;
13-
name = "lbf-rust-workspace";
14-
unpackPhase = builtins.concatStringsSep "\n"
15-
([
16-
"mkdir -p $out"
17-
"cp -r $src $out/${crateName}"
18-
]
19-
++ (map ({ name, path }: "cp -r ${path} $out/${name}") localDeps)
20-
++ (map ({ name, path }: "cp -r ${path} $out/${name}") dataDeps)
21-
);
22-
};
23-
commonArgs = {
24-
src = buildEnv;
25-
pname = crateName;
26-
strictDeps = true;
27-
cargoLock = ./Cargo.lock;
28-
cargoToml = ./Cargo.toml;
29-
postUnpack = ''
30-
cd $sourceRoot/${crateName}
31-
sourceRoot="."
32-
'';
33-
};
34-
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
35-
36-
in
37-
{
38-
devShells."dev-${crateName}-rust" = craneLib.devShell {
39-
checks = self'.checks;
40-
};
41-
42-
packages."${crateName}-rust" = craneLib.buildPackage commonArgs // {
43-
inherit cargoArtifacts;
44-
doCheck = false;
45-
};
46-
47-
checks."${crateName}-rust-test" = craneLib.cargoNextest (commonArgs // {
48-
inherit cargoArtifacts;
49-
});
50-
51-
checks."${crateName}-rust-clippy" = craneLib.cargoClippy (commonArgs // {
52-
inherit cargoArtifacts;
53-
});
4+
rustFlake =
5+
config.overlayAttrs.extras.rustFlake {
6+
inherit system;
7+
src = ./.;
8+
crane = inputs.crane;
9+
crateName = "lbr-prelude";
10+
localDeps = [
11+
{
12+
name = "lbr-prelude-derive";
13+
path = ../lbr-prelude-derive;
14+
}
15+
];
16+
dataDeps = [ ];
5417
};
5518
in
56-
rustProject {
57-
crateName = "lbr-prelude";
58-
localDeps = [
59-
{
60-
name = "lbr-prelude-derive";
61-
path = ../lbr-prelude-derive;
62-
}
63-
];
64-
dataDeps = [ ];
19+
{
20+
inherit (rustFlake) packages checks devShells;
6521
};
66-
6722
}

0 commit comments

Comments
 (0)