nix: cache builds

This commit is contained in:
Rory&
2026-03-13 02:00:13 +01:00
parent 2f1c0ba2d4
commit b17f3a3832

View File

@@ -22,51 +22,49 @@ let
)
);
};
in
pkgs.stdenv.mkDerivation {
pname = "spacebar-server-ts";
nodejs = pkgs.nodejs_24;
version = "1.0.0-" + rVersion;
meta = with lib; {
description = "Spacebar server, a FOSS reimplementation of the Discord backend.";
homepage = "https://github.com/spacebarchat/server";
license = licenses.agpl3Plus;
platforms = platforms.all;
mainProgram = "start-bundle";
maintainers = with maintainers; [ RorySys ];
};
revsFile = pkgs.writeText "spacebar-server-rev.json" (
builtins.toJSON {
rev = self.sourceInfo.rev or self.sourceInfo.dirtyRev;
shortRev = self.sourceInfo.shortRev or self.sourceInfo.dirtyShortRev;
lastModified = self.sourceInfo.lastModified;
}
);
src = filteredSrc;
dontStrip = true;
srcHash = builtins.substring 11 32 (toString filteredSrc);
unwrapped = pkgs.stdenv.mkDerivation {
pname = "spacebar-server-ts-unwrapped";
nodejs = pkgs.nodejs_24;
version = "1.0.0-" + srcHash;
nativeBuildInputs = with pkgs; [
nodejs
makeWrapper
(pkgs.python3.withPackages (ps: with ps; [ setuptools ]))
];
meta = with lib; {
description = "Spacebar server, a FOSS reimplementation of the Discord backend.";
homepage = "https://github.com/spacebarchat/server";
license = licenses.agpl3Plus;
platforms = platforms.all;
mainProgram = "start-bundle";
maintainers = with maintainers; [ RorySys ];
};
configurePhase = ''
cp -r --no-preserve=ownership,timestamps ${pkgs.callPackage ./node-modules.nix { }} node_modules
chown $USER:$GROUP node_modules -R
chmod +w node_modules -R
'';
src = filteredSrc;
dontStrip = true;
buildPhase = ''
npm run build:tsgo
'';
nativeBuildInputs = with pkgs; [
nodejs
(pkgs.python3.withPackages (ps: with ps; [ setuptools ]))
];
installPhase =
let
revsFile = pkgs.writeText "spacebar-server-rev.json" (
builtins.toJSON {
rev = self.sourceInfo.rev or self.sourceInfo.dirtyRev;
shortRev = self.sourceInfo.shortRev or self.sourceInfo.dirtyShortRev;
lastModified = self.sourceInfo.lastModified;
}
);
in
''
configurePhase = ''
cp -r --no-preserve=ownership,timestamps ${pkgs.callPackage ./node-modules.nix { }} node_modules
chown $USER:$GROUP node_modules -R
chmod +w node_modules -R
'';
buildPhase = ''
npm run build:tsgo
'';
installPhase = ''
runHook preInstall
# set -x
@@ -80,19 +78,49 @@ pkgs.stdenv.mkDerivation {
echo "Installing package into $out"
mkdir -p $out
cp -r assets dist node_modules package.json $out/
cp ${revsFile} $out/.rev
# Create wrappers for start scripts
echo "Creating wrappers for start scripts"
for i in dist/**/start.js
do
makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/$i
done
makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/apply-migrations --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/dist/apply-migrations.js
# set +x
runHook postInstall
'';
passthru.tests = pkgs.testers.runNixOSTest (import ./nix/tests/test-bundle-starts.nix self);
};
in
pkgs.stdenv.mkDerivation {
pname = "spacebar-server-ts";
nodejs = unwrapped.nodejs;
version = "1.0.0-" + rVersion;
meta = unwrapped.meta;
nativeBuildInputs = with pkgs; [
makeWrapper
];
# this isnt a real builder, we dont need these at all
dontUnpack = true;
dontBuild = true;
dontPatch = true;
dontConfigure = true;
dontStrip = true;
dontFixup = true;
installPhase = ''
# Copy outputs
echo "Installing package into $out"
mkdir -p $out
cp -r --no-preserve=ownership,timestamps ${unwrapped}/. $out/
# add version info
cp ${revsFile} $out/.rev
# Create wrappers for start scripts
echo "Creating wrappers for start scripts"
for i in dist/**/start.js
do
makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/$i
done
makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/apply-migrations --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/dist/apply-migrations.js
'';
passthru.tests = pkgs.testers.runNixOSTest (import ./nix/tests/test-bundle-starts.nix self);
}