Skip to content

Commit 2972429

Browse files
committed
fix unnecessary deps builds + manual deps hash handling
1 parent 303e1b6 commit 2972429

2 files changed

Lines changed: 102 additions & 10 deletions

File tree

flake.nix

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,27 @@
1818
craneLib = crane.mkLib pkgs;
1919
bun = pkgs.bun;
2020

21-
src = pkgs.lib.fileset.toSource {
21+
cargoSrc = pkgs.lib.fileset.toSource {
2222
root = ./.;
2323
fileset = pkgs.lib.fileset.unions [
2424
./Cargo.toml
2525
./Cargo.lock
26+
./build.rs
2627
./src
28+
];
29+
};
30+
31+
runtimeAssetsSrc = pkgs.lib.fileset.toSource {
32+
root = ./.;
33+
fileset = pkgs.lib.fileset.unions [
2734
./migrations
2835
./prompts
36+
];
37+
};
38+
39+
frontendSrc = pkgs.lib.fileset.toSource {
40+
root = ./.;
41+
fileset = pkgs.lib.fileset.unions [
2942
./interface/package.json
3043
./interface/package-lock.json
3144
./interface/index.html
@@ -40,7 +53,7 @@
4053
};
4154

4255
spacebotPackages = import ./nix {
43-
inherit pkgs craneLib src;
56+
inherit pkgs craneLib cargoSrc runtimeAssetsSrc frontendSrc;
4457
};
4558

4659
inherit (spacebotPackages) spacebot spacebot-full;

nix/default.nix

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
{
22
pkgs,
33
craneLib,
4-
src,
4+
cargoSrc,
5+
runtimeAssetsSrc,
6+
frontendSrc,
57
}: let
68
inherit (pkgs) lib onnxruntime;
79

810
# Read version from Cargo.toml
9-
cargoToml = fromTOML (builtins.readFile "${src}/Cargo.toml");
11+
cargoToml = fromTOML (builtins.readFile "${cargoSrc}/Cargo.toml");
1012
inherit (cargoToml.package) version;
1113

1214
buildInputs = with pkgs; [
@@ -23,12 +25,76 @@
2325
cmake
2426
];
2527

28+
frontendPackageLock = lib.importJSON "${frontendSrc}/interface/package-lock.json";
29+
frontendPackage =
30+
let
31+
originalPackage = lib.importJSON "${frontendSrc}/interface/package.json";
32+
rootDependencies = originalPackage.dependencies or {};
33+
lockPackages = frontendPackageLock.packages;
34+
rootDependencyNames = builtins.attrNames rootDependencies;
35+
36+
collectPeerClosure = dependencyNames:
37+
let
38+
peerNames =
39+
lib.unique
40+
(builtins.concatLists (
41+
map (
42+
dependencyName:
43+
let
44+
packagePath = "node_modules/${dependencyName}";
45+
packageEntry =
46+
if builtins.hasAttr packagePath lockPackages
47+
then lockPackages.${packagePath}
48+
else {};
49+
in builtins.attrNames (packageEntry.peerDependencies or {})
50+
)
51+
dependencyNames
52+
));
53+
54+
expandedNames = lib.unique (dependencyNames ++ peerNames);
55+
in
56+
if builtins.length expandedNames == builtins.length dependencyNames
57+
then dependencyNames
58+
else collectPeerClosure expandedNames;
59+
60+
peerDependencyNames =
61+
lib.filter (dependencyName: !(lib.elem dependencyName rootDependencyNames))
62+
(collectPeerClosure rootDependencyNames);
63+
64+
peerDependencyVersions = builtins.listToAttrs (
65+
lib.filter (entry: entry != null) (
66+
map (
67+
dependencyName:
68+
let
69+
packagePath = "node_modules/${dependencyName}";
70+
in
71+
if builtins.hasAttr packagePath lockPackages
72+
then {
73+
name = dependencyName;
74+
value = lockPackages.${packagePath}.version;
75+
}
76+
else null
77+
)
78+
peerDependencyNames
79+
)
80+
);
81+
in
82+
originalPackage
83+
// {
84+
dependencies = rootDependencies // peerDependencyVersions;
85+
};
86+
2687
frontend = pkgs.buildNpmPackage {
2788
pname = "spacebot-frontend";
2889
inherit version;
29-
src = "${src}/interface";
30-
31-
npmDepsHash = "sha256-J11BrUDbZLKQDnS/+ux7QzK2vfLhtxUSZye0hIWnLPk=";
90+
src = "${frontendSrc}/interface";
91+
92+
npmDeps = pkgs.importNpmLock {
93+
npmRoot = "${frontendSrc}/interface";
94+
package = frontendPackage;
95+
packageLock = frontendPackageLock;
96+
};
97+
npmConfigHook = pkgs.importNpmLock.npmConfigHook;
3298
npmInstallFlags = ["--legacy-peer-deps"];
3399
makeCacheWritable = true;
34100

@@ -39,13 +105,26 @@
39105
};
40106

41107
commonArgs = {
42-
inherit src nativeBuildInputs buildInputs;
108+
src = cargoSrc;
109+
inherit nativeBuildInputs buildInputs;
43110
strictDeps = true;
44111
cargoExtraArgs = "";
45112
};
46113

114+
dummyRustSource = pkgs.writeText "dummy.rs" ''
115+
fn main() {}
116+
'';
117+
47118
cargoArtifacts = craneLib.buildDepsOnly (commonArgs
48119
// {
120+
src = craneLib.mkDummySrc {
121+
src = cargoSrc;
122+
dummyrs = dummyRustSource;
123+
dummyBuildrs = "build.rs";
124+
extraDummyScript = ''
125+
cp ${dummyRustSource} $out/build.rs
126+
'';
127+
};
49128
preBuild = ''
50129
export ORT_LIB_LOCATION=${onnxruntime}/lib
51130
'';
@@ -67,8 +146,8 @@
67146

68147
postInstall = ''
69148
mkdir -p $out/share/spacebot
70-
cp -r ${src}/prompts $out/share/spacebot/
71-
cp -r ${src}/migrations $out/share/spacebot/
149+
cp -r ${runtimeAssetsSrc}/prompts $out/share/spacebot/
150+
cp -r ${runtimeAssetsSrc}/migrations $out/share/spacebot/
72151
chmod -R u+w $out/share/spacebot
73152
'';
74153

0 commit comments

Comments
 (0)